TCP在超时重传机制中,并不强制要求发送完全相同的报文段。相反,TCP允许进行数据分组重组,发送更大的报文段以提升性能,前提是该报文段的大小不超过接收方声明的MSS(最大报文段大小)。
TCP之所以能够进行数据分组重组,是因为它使用字节序号而非报文段序号来标识和确认要发送的数据。
实例分析
以下实验展示了TCP数据分组重组的过程:
- 使用
sock
程序连接到丢弃服务器,并输入一行文本"hello there"。 - 断开以太网连接,并输入第二行文本"line number 2"。
- 在第二行文本重传之前,重新连接以太网连接,并输入第三行文本"and 3"。
预期结果:下一次重传将包含第二行和第三行文本的数据。
实验结果:
使用tcpdump
工具抓取网络数据包,观察到以下结果:
- 第一、二行显示第一行文本"hello there"发送成功及其确认。
- 断开网线后,输入的第二行文本"line number 2"(14字节)在第三行发送,并在第四、五行进行重传。
- 在第六行重传之前,输入第三行文本"and 3"(6字节),观察到此次重传包含了20字节数据,即第二行和第三行文本的组合。
- 第九行接收到确认信息,确认了这20字节的数据。
总结
- 详细探讨了TCP超时与重传机制,并通过丢失连接建立SYN的例子,阐述了指数退避机制在重传和超时中的应用。
- TCP通过计算往返时间,维护平滑的RTT估计器和均值偏差估计器,用于计算下一次重传时间。
- 一些TCP实现仅在每个窗口测量一次RTT。Karn算法则可以在不测量RTT的情况下,解决分组丢失时的重传二义性问题。
暂无评论