![在网络跟踪中,SYN/ACK 是否有可能不立即由 SYN 继续执行](https://linux22.com/image/677781/%E5%9C%A8%E7%BD%91%E7%BB%9C%E8%B7%9F%E8%B8%AA%E4%B8%AD%EF%BC%8CSYN%2FACK%20%E6%98%AF%E5%90%A6%E6%9C%89%E5%8F%AF%E8%83%BD%E4%B8%8D%E7%AB%8B%E5%8D%B3%E7%94%B1%20SYN%20%E7%BB%A7%E7%BB%AD%E6%89%A7%E8%A1%8C.png)
我正在编写一个简单的程序来计算我使用 Wireshark 进行的网络捕获的初始 RTT。为此,我想计算 SYN 和 SYN/ACK 之间的时间差。我不太了解如何在我的跟踪中定位它们,我打算解析在下一行立即有 SYN/ACK 的 SYN。但是我想知道是否有可能其他 TCP 数据在下一行,从而破坏我的计划?如果是这样,我如何找到与 SYN 对应的 SYN/ACK? 谢谢你的帮助。
答案1
我认为其他 TCP 数据可能位于下一行。例如:
如果网络设备打开两个并发连接,则 SYN 后面的行可能会显示来自另一个流的 TCP 数据包。
如果网络路径中的拥塞路由器丢弃了初始 SYN 数据包,则捕获文件可能会出现两个或多个与同一连接相关的连续 SYN 数据包。
我建议采用以下算法:
P2
查找设置了 SYN 和 ACK 标志的TCP 数据包。P2.ack
,P2.dst
和P2.src
分别为确认号、目标端口和源端口。向后搜索一个 TCP 数据包
P1
,其:2.1. 源端口匹配
P2.dst
AND2.2. 目标端口匹配
P2.src
AND2.3. 序列号匹配
P2.ack - 1
AND2.4. SYN 标志已设置并且
2.5. 未设置 ACK 标志
P1
RTT 是数据包和之间的时间P2
。
还请考虑比较 IP 标头数据。P1
的源地址必须与P2
的目标地址匹配,并且反之亦然。