使用Wireshark测量TCP数据包的往返时延(RTT)时间

7

我想计算TCP数据包的往返时延。

但是在wireshark中,我没有看到任何特定的字段来表示TCP数据包的RTT时间,就像RTP数据包那样。

wireshark确实会计算RTT图形,但我不知道它是如何计算的。

有人能帮我找到用于计算RTT的公式吗?


1
在TCP中,时间是隐含的(而RTP则明确涉及时间)。Wireshark计算RTT时会针对过去分段的ACK数据包进行计算,该计算方法为原始数据包的SEQ和当前ACK数据包的时间差。由于RTT是计算出来的,因此您可以在数据包的[SEQ/ACK分析]下看到它,并非一个字段。 - onon15
3个回答

7

TCP协议本身并没有提供往返时间(RTT)的信息。内核是通过侦测数据发送后接收到确认消息所需的时间来估算RTT的。它记录了给定序列号发出的时间戳,并将其与相应ACK的时间戳进行比较。初始的三次握手可以为此提供一个合理的起始值。

然而,这只是一个估计值,因为接收方可以自由地延迟ACK一段短时间,以便能够使用单个回复响应多个传入数据包。

由于网络条件的变化,RTT在会话期间经常发生变化。显然,这种影响在端点越远的情况下更加明显。


4

如果你想获取由wireshark/tshark计算的RTT值,以下方法可以帮助我将它们打印到stdout上:

tshark -r myfile.pcap -Y 'ip.addr == AA.BB.CC.DD' -T fields -e tcp.analysis.ack_rtt

(我在-Y之后使用显示过滤器,将分析限制为仅一个远程主机)

2
如果你正在使用wireshark,它会显示iRtt = 初始往返时间和每个发送数据包的往返时间,只需查看“在新窗口中显示数据包/序列号/确认号分析”。

顺便提一下,在Wireshark中查看iRTT,后者应该捕获TCP连接的启动(三次握手)-因为这是计算iRTT的时候。 - victorm1710

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接