Page 77 - Web性能权威指南
P. 77

此外,如果客户端和服务器都支持会话记录单,则所有会话数据都将保存在客户端,
                 上述步骤就都不需要了(问题一下子就简单了很多)!不过,由于会话记录单还是
                 相对新的 TLS 扩展,并非所有客户端都支持它。实践中,为了取得最优结果,应该
                 做好两手准备:在支持的客户端中使用会话记录单,而在不支持的客户端中使用会
                 话标识符。这两种手段不会相互干扰,而是会很好地协同工作。


                 4.7.4 TLS记录大小

                 所有通过 TLS 交付的应用数据都会根据记录协议传输(图 4-8)。每条记录的上限
                 为 16 KB,视选择的加密方式不同,每条记录还可能额外带有 20 到 40 字节的首部、
                 MAC 及可选的填充信息。如果记录可以封装在一个 TCP 分组内,则还会给它增加
                 相应的 IP 和 TCP 字段,即 20 字节的 IP 首部和 20 字节的 TCP 首部(无选项)。结
                 果,每条记录的大小就变成了 60 到 100 字节。由于 MTU 通常为 1500 字节,因此
                 分组占比最小的情况下只相当于帧大小的 6%。
                 记录越小,分帧浪费越大。但简单地把记录增大到上限(60  KB)也不一定好!如
                 果记录要分成多个 TCP 分组,那 TLS 层必须等到所有 TCP 分组都到达之后才能解
                 密数据(图 4-10)。只要有 TCP 分组因拥塞控制而丢失、失序或被节流,那就必须
                 将相应 TLS 记录的分段缓存起来,从而导致额外的延迟。实践中,这种延迟会造成
                 浏览器性能显著下降,因为浏览器倾向于逐字节地读取数据。
























                 图 4-10:WireShark 的截图,其中 11 211 字节的 TLS 记录被分成了 8 个 TCP 段
                 小记录会造成浪费,大记录会导致延迟。因此,记录到底多大合适没有唯一“正
                 确”的答案。不过对于在浏览器中运行的 Web 应用来说,倒是有一个值得推荐的做
                 法:每个 TCP 分组恰好封装一个 TLS 记录,而 TLS 记录大小恰好占满 TCP 分配的


                                                                     传输层安全(TLS)   |   59
   72   73   74   75   76   77   78   79   80   81   82