TCP/IP卷一:78---TCP超时与重传之(目的度量、重新组包)
发布日期:2021-06-29 22:33:34 浏览次数:2 分类:技术文章

本文共 1291 字,大约阅读时间需要 4 分钟。

  • “目的度量”与“重新组包”没有关联,为了减少博客文章篇幅,将两个内容放在一篇中进行讲解

一、目的度量

  • 从前面的讨论中我们看到,TCP能不断“学习”发送端与接收端之间的链路特征。学习的结果显示为发送端记录一些状态变量,如srtt和rttvar。一些TCP实现也记录一段时间内已出现的失序包的估计值。 一般来说,一旦该连接关闭,这些学习结果也会丢失,即与同一个接收端建立一个新的TCP连接后,它必须从头开始获得状态变量值

保留“学习”记录

  • 较新的TCP实现维护了这些度量值,即使在连接断开后,也能保存之前存在的路由或转发表项,或其他的一些系统数据结构
  • 当创立一个新的连接时,首先查看数据结构中是否存在与该目的端的先前通信信息。如果存在,则选择较近的信息,据此为srtt、 rttvar以及其他变量设初值
  • 在TCP连接关闭前,可更新统计数据,通过替换现存数据或其他方式的更新来实现。在Linux 2.6中,变量值更新为现存值中的最大值和最近测量的数据。可通过iproute2的相关工具来查看这些变量值:

  • 该命令利用特殊的DSCP值(16,表示CS2,但值为Ox40代表采用较旧的“ToS”)显 示了之前连接存储的信息,本地系统和132.239.50.184之间采用IPv4,下一跳为10.0.0.1,网络设备为eht0。我们可以看到包大小信息(由PMTUD得到路径MTU,由远端告知MSS)、最大跳步数(针对IPv6,这里没有用到)、 srtt和rttvar的值,以及在后面会讨论的拥塞控制信息如cwnd

二、重新组包

  • 当TCP超时重传,它并不需要完全重传相同的报文段。TCP允许执行重新组包,发送一个更大的报文段来提高性能。(通常该更大的报文段不能超过接收端通告的MSS,也不能大于路径MTU)允许这样做的原因在于,TCP是通过字节号来识别发送和接收的数据,而非报文段(或包)号
  • TCP能重传一个与原报文段不同大小的报文段,这从一定意义上解决了重传二义性问题。STODER[TZZO5]就是基于该思想,采用重新组包的方法来检测伪超时

演示案例

  • 我们可以很容易地观察到重新组包的过程。我们采用sock程序作为服务器,将其连接 至Telneto首次我们输人一行信息“he110 there”。这就生成了一个13字节的数据段,包括回车换行在内。接着断开网络连接,输人“1inenumber2” (14字节,包括换行)。然后在等待约45秒后,输人“and3”,之后关闭连接:

  • 在分析结果中,省略了初始SYN交换过程。前两个报文段包含数据宇符串“hello there”及其确认信息。紧接着的包并非有序:它从序列号29开始,包含字符串“and3” (7个字节)。它返回的ACK包含ACK号14,但SACK块的相对序列号为(29,36)。中间的数据已丢失。TCP采用一个更大的包来重传,包含序列号14~36。因此,我们可以看到序列号14数据的重传导致了一次重新组包,形成了22字节的较大包来传输。有趣的是,包中重复包含了SACK块中的数据,同时也将FIN位字段置位,表明这是连接关闭前最后传输的数据

转载地址:https://dongshao.blog.csdn.net/article/details/104110872 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:TCP/IP卷一:79---TCP数据流与窗口管理之(交互式通信概念及ssh演示案例)
下一篇:TCP/IP卷一:77---TCP超时与重传之(包失序与包重复)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月07日 17时10分38秒