【问题标题】:TCP-Connection Establishment = How to measure time based on Ping RRT?TCP-Connection建立=如何基于Ping RRT测量时间?
【发布时间】:2010-05-21 17:36:27
【问题描述】:

如果我有 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)还没有携带任何有效载荷(我的数据),而仅用于建立连接。(由此得出结论,第四次数据包将成为第一个拥有任何有效载荷的packt....)

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

非常感谢

汤姆

【问题讨论】:

  • 如果你可以测量到主机的 ping 时间,为什么不测量连接呢?基本上,您需要做的就是在代码中为 connect 调用计时。

标签: sockets


【解决方案1】:

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

【讨论】:

  • +1。一般来说,互联网上的路由很少是对称的。在企业内部,情况就不同了。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 2021-05-20
    • 1970-01-01
    • 2020-05-21
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多