TCP连接建立=如何根据Ping RRT测量时间?

时间:2010-05-21 17:36:28

标签: sockets

我很乐意提供帮助,了解在我使用Ping RoundTripTip时建立TCP连接所需的时间:

根据维基百科,TCP连接将分三步建立:

1.SYN-SENT (=>CLIENT TO SERVER)
2.SYN/ACK-RECEIVED (=>SERVER TO CLIENT)
3.ACK-SENT (=>CLIENT TO SERVER)

我的问题:

  1. 是否正确,第三次传输(ACK-SENT)尚未携带任何有效载荷(我的数据),但仅用于连接建立。(这导致结论,第四个包将是第一个装有任何有效载荷的包装......)

  2. 假设我的Ping RoundTripTime为20毫秒,在上面给出的示例中,TCP连接建立至少需要30毫秒,才能在客户端和服务器之间传输任何数据

  3. 非常感谢

    汤姆

2 个答案:

答案 0 :(得分:4)

这些事情基本上是正确的,尽管#2假设往返时间是对称的。

答案 1 :(得分:0)

要测量这一点,称为“时间同步/确认”(这不是建立连接的时间 - 在该状态下连接只是半开,你需要第3个数据包,确认企业考虑它已建立),您通常需要包含自己的TCP堆栈的专业工具,从而实现这种测量。最常用的一个称为Spirent Avalanche,但您也有Ixia's IxLoad或BreakingPoint Systems框(BPS现已被Ixia btw收购)。

请注意,是的,第3个数据包不会有任何数据,前两个数据包也是如此。它们仅标记Syn和Syn + Ack(这些是TCP标志),并且不包含应用程序数据。这种称为三次握手的初始交换因此会产生一些开销,这就是为什么TCP通常不用于实时应用(语音,实时视频等)。

同样如上所述,您不能假设Latency = RTT / 2。实际上,测量第3层(IP)之上的单向延迟非常复杂 - 而且您已经在第4层(TCP)。这篇博文详细介绍了这一挑战:http://synsynack.wordpress.com/2012/04/09/realistic-latency-measurement-in-the-application-layers/