查看: 7969|回复: 15

请教:在一个TCP会话中出现序列号相同,偏移量不同的数据包

[复制链接]
发表于 2011-6-17 14:23:19 | 显示全部楼层 |阅读模式
在分析一个POP3会话中,发现在一个会话中,出现了两个序列号相同、偏移量不同的数据包,如下图:
第一个包:

第二个包:


可能会是重传数据包,那怎么会数据包不同呢?
下面是时间差:


大家都发表下意见吧,畅所欲言。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×

评分

1

查看全部评分

回复

使用道具 举报

发表于 2011-6-17 14:33:11 | 显示全部楼层
只是两个相同的确认包(ACK),第二个包多了几个TCP选项。
回复

使用道具 举报

发表于 2011-6-17 15:44:34 | 显示全部楼层
1# long_323


如果你用WS查看的话
会发现第二个报文是Select ACK

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2011-6-17 17:19:42 | 显示全部楼层
3# haiwanxue

嗯,我知道是TCP的选项,这个用科来也能查看出来。
不过不清楚为什么,重复的ACK,却使用了不同的数据包呢?
一个没加TCP选项,一个却要加了。这是为什么呢?
回复

使用道具 举报

发表于 2011-6-17 22:56:59 | 显示全部楼层
感觉这个情况,应该是重传的了,以前也听过。好像是重传时候考虑可能数据包超过PMTU,所以重传的重传会减小数据包长度,来探测PMTU大小。
回复

使用道具 举报

发表于 2011-6-18 13:25:21 | 显示全部楼层
2个数据包都是不分片,为什么第二个包会有选择应答的项呢?
回复

使用道具 举报

发表于 2011-6-18 13:46:24 | 显示全部楼层
4# long_323



你研究一下这张片子 如果有什么疑问
继续讨论

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

发表于 2011-6-18 14:33:37 | 显示全部楼层
谢谢楼上,我看懂了。类似这样的片子还有吗? 能否共享一下。
回复

使用道具 举报

发表于 2011-6-18 19:36:58 | 显示全部楼层
8# xiaoshazi



在楼主提供的这种场景下,还有一种常见的处理方式
如果Client不发送SACK报文,Server重传计时器到时
会主动重传,如这张片子

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2011-6-20 09:54:48 | 显示全部楼层
7# haiwanxue

恩,基本看懂了,非常感谢。
另外用科来、wireshark分别打开了两个类似的数据包。
在科来中在这个选择ACK中标明了,两个块边界的位置。如下图:


在wireshar中显示中,只是标明是一个重复的ACK,而没有进一步的说明,如下图:



这个还需要进一步学习,希望大家继续讨论。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2011-6-20 10:06:21 | 显示全部楼层
9# haiwanxue

还需要请教一下,由选择确认导致的重传,与超时导致的重传,在TCP的后续处理上应该有很大的不同吧。
比如涉及到的TCP的慢启动等导致的TCP窗口变化,从而影响TCP传输性能。
希望hai工能给予详细介绍,谢谢!
回复

使用道具 举报

发表于 2011-6-20 13:35:31 | 显示全部楼层
9# haiwanxue  

还需要请教一下,由选择确认导致的重传,与超时导致的重传,在TCP的后续处理上应该有很大的不同吧。
比如涉及到的TCP的慢启动等导致的TCP窗口变化,从而影响TCP传输性能。
希望hai工能给予详细 ...
long_323 发表于 2011-6-20 10:06


SACK和超时重传主要的区别在于前者改进了工作效率和资源利用。

早期的TCP版本没有设计SACK这个TCP选项
但后来的实际经验发现,如果使用SACK方式工作,与传统的超时、快速重传等方式比较,具有明显的实用性

举个例子,假设在协商的窗口范围,服务器端连续向客户端发生了10个数据包
由于网络或网络设备原因,导致第4个数据包丢失
客户端收到了其他的9个报文

早期的处理方式,一般是客户端连续发生3个重复确认(快速重传)
服务器端在收到数据包后,则开始从第4个报文重新发送
当然包括后面的第5——10个都要重传

使用SACK方式,客户端则会将接收到的9个报文保存在对应缓冲区
(其向应用层只能提交前3个报文)
这时 客户端向服务器端发送SACK
该报文告诉服务器,除了第4个数据包外,其他的都已经接收到了
这时 Server只需将第4个报文重传即可
之后Server如果接收到Client对第10个报文的Ack
则其TCBs(Transmission Control Blocks)进行新的控制信息

Client与Server需要要支持SACK,需在连接建立时协商

关于滑动窗口可能引发的TCP重传等现象中
慢启动一般是不会引发性能问题,因为Client每次宣告的窗口都在不断增大
Server也会根据对方的接收窗口发送数据

但在数据平稳传输过程中
如果接收方由于性能等问题,Window Size突然变小
而Server端尚未得知,却又按照之前的窗口大小发送了报文
这会带来一定的问题,也算一个高级话题
如果有人感兴趣,大家可以一起讨论
回复

使用道具 举报

 楼主| 发表于 2011-6-20 15:31:16 | 显示全部楼层
12# haiwanxue
非常感谢。
很想讨论,不过对TCP了解不精,讨论的资本不够哇。
你们讨论,我来听
回复

使用道具 举报

发表于 2011-6-20 22:30:47 | 显示全部楼层
好贴啊,感谢楼主和万大侠
回复

使用道具 举报

发表于 2011-6-21 10:42:52 | 显示全部楼层
12# haiwanxue 大师  很想跟你学习哎
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表