Wireshark抓包,前面发生TCP Retransmission,如何确认相应包ACK确认哪个?
问题看似简单,不过仔细想想,实际场景的答案还是有点复杂。 取巧的回答是在接收端本地抓包,响应是对哪一个的回复,自然一清二楚。这也是一直强调的,所谓抓包点的问题,哪怕就算同一条数据流,在不同的抓包点,它的现象都会是不一样的。所以提问人所描述的场景应该是针对发送端本地或是中间网络上所捕获的数据包跟踪文件。
想到的几个场景,简单描述如下:
一、SYN 重传
这个也许不是提问人的场景,但是在日常抓包中也是会看到的一种,第一个 SYN 没有响应,但在第二个或再之后的 SYN 重传后,收到了 SYN/ACK 响应,这个 SYN/ACK 是对应哪个 SYN 的?如果双方都支持 TCP OPT,则答案很明确,但如果不支持,实际答案也很明确,就认为是紧挨着的上一个 SYN,为什么?想想 SYN 超时重传的时间间隔有多大,再想想可能的 RTT。
二、数据分段重传
这个应该是问题描述的场景,稍微分下抓包点:
1. 发送端本地,如果第一个数据分段没得到响应,在产生重传后,得到了 ACK 确认。如果有 OPT ,则答案明确,如果没有,需结合 RTO 和 RTT 实际考虑,没有绝对的答案,一切皆有可能,但更倾向于响应的是后者。
2. 中间网络,如果第一个数据分段得到了 ACK 确认,但 ACK 在传给发送端的时候丢失了,发送端产生了重传。那么站在中间网络的角度上,是能看到并区分两次 ACK 的,第一次正常的 ACK,第二次针对虚假重传的 ACK。
3. 中间网络,如果第一个数据分段没得到响应,在产生重传后,得到了 ACK 确认。如果有 OPT ,则答案明确,如果没有,考虑到抓包点是完全中间还是更靠近发送端或者接收端,以及结合实际 RTO 和 RTT ,答案还是没那么绝对,但也仍是更倾向于响应的是后者。
嗯,怀疑主义的怀疑一切。
原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/49658.html