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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月07日 17时10分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux png转jpg (convert命令)
2019-04-30
NAS (Network Attached Storage 网络附属存储)
2019-04-30
Ubuntu更新后终端中字体的颜色全是白色
2019-04-30
Ninja
2019-04-30
lmdb数据库的读取与转换(一) —— 基本操作
2019-04-30
opencv相关操作(cv2) (python)
2019-04-30
lmdb数据库的读取与转换(二) —— 数据集操作
2019-04-30
Lua语言
2019-04-30
Python __doc__获得模块的文档字符串内容
2019-04-30
Python sys.path和模块搜索路径
2019-04-30
github.io网页无法打开(连接不是私密连接)
2019-04-30
git submodule
2019-04-30
linux中source、sh、bash、./有什么区别
2019-04-30
vscode git
2019-04-30
基于MATLAB的二进制数字调制与解调信号的仿真——2FSK
2019-04-30
基于MATLAB的二进制数字调制与解调信号的仿真——2PSK
2019-04-30
基于MATLAB的模拟调制信号与解调的仿真——AM
2019-04-30
基于MATLAB的模拟调制信号与解调的仿真——DSB
2019-04-30
基于MATLAB的模拟调制信号与解调的仿真——SSB
2019-04-30