《HTTP 权威指南》阅读随笔
为什么要有 TCP 时延确认
因特网由于自身原因无法保证可靠的分组传输,比如路由器超负荷的情况下可以随意丢弃分组。因此 TCP 实现了自己的确认机制来确保数据的成功传输。
TCP 如何保证发送数据的完整性
每个 TCP 段都有一个序列号和数据完整性校验和,每个段的接收者收到完好的段时,都会像发送者送回小的确认分组,如果发送者没有在指定时间内收到确认信息,那么发送者会认为分组已被破坏,并重新发送数据。
延迟确认算法
由于确认报文很小,所以 TCP 允许在发往同方向的输出数据分组中对其进行“捎带”。TCP 将返回的确认消息和输出的数据分组结合在一起,可以更有效的利用网络。为了增加确认报文找到同向传输数据分组的可能性,很多 TCP 栈都实现了一种“延迟确认”算法。延迟算法会在一个特性的窗口时间内,比如 100~200 毫秒,将输出确认放在缓冲区中,以寻找能够“捎带”它们的输出数据分组。如果在这个特定的窗口时间内没有输出分组数据,那么确认信息将会单独发送。
适当使用算法
对于具有双峰特征(请求 - 应答)的 HTTP 行为,则降低了“捎带”确认信息的可能,当希望有相反方向的回传分组时,往往没有那么多,这时延迟确认算法的引入反而会带来相当大的时延。因此,需要根据实际情况来选择是否使用延迟确认算法。