我正在编写一个简单的程序来计算我使用 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
的目标地址匹配,并且反之亦然。