计算 3 路 TCP 握手持续时间

网络工程 通讯协议 线鲨
2021-07-10 11:37:21

我想计算服务器和客户端之间通过wireshark 3次TCP握手占用的时间。

我得到类似的东西:

Time        Source        Destination        Info
0.00       x.x.x.x        y.y.y.y            SYN
0.020003   y.y.y.y        x.x.x.x            SYN,ACK
0.000077    x.x.x.x        y.y.y.y           ACK 
0.000223    x.x.x.x        y.y.y.y           GET
  1. 为了计算握手的持续时间,我必须计算从发送 SYN 到服务器接收到 ACK 的持续时间。服务器什么时候收到ACK?我们可以从客户端看到这一点吗?

  2. 我的另一个问题是关于各个步骤的时间。0.02 听起来是一个合理的时间,也是我对服务器和客户端之间的 RTT 的期望。但为什么其余的都这么低?0.000077?0.000223?它们代表什么?

1个回答

它被称为3次握手,所以它被传输了三次:SYN -> SYN/ACK -> ACK。所需的最短时间是 往返时间 (RTT) 的 1.5 倍。

(每一方看到握手发生的 1x RTT 延迟,而服务器是一个传输延迟/客户端后面的 0.5 RTT - 假设两个方向的传输延迟相等。)

在您的捕获中,唯一的传输时间是在 SYN 和 SYN/ACK 之间。连续的 ACK 是对接收到的 SYN/ACK 的反应。套接字在这一侧建立,本地节点用 GET 触发。

在客户端,序列是

  1. SYN 发送
  2. 更长的延迟(RTT + 远程堆栈开销)- 0.020003
  3. 收到 SYN/ACK
  4. 非常小的延迟(本地堆栈开销)- 0.000077
  5. 发送最终 ACK,套接字已打开
  6. 非常小的延迟(本地堆栈和应用程序开销)- 0.000223
  7. 获取发送

在侦听器(服务器)端,这看起来像

  1. SYN 收到
  2. 非常小的延迟(本地堆栈开销)
  3. SYN/ACK 已发送
  4. 更长的延迟(RTT + 远程堆栈开销)
  5. 收到最终 ACK,套接字已打开
  6. 非常小的延迟(远程堆栈和应用程序开销)
  7. 收到 GET