TCP 握手延迟

TCP 握手延迟

我在 100 Gb/s LAN 上有 2 台机器,它们通过 TCP 相互通信。
当我从客户端到服务器执行 tracert 或 ping 时,即使是较大的 ping,我也会在不到1 毫秒
然而,当我在客户端嗅探 TCP 数据包时,我发现40毫秒从发送三次握手的第一条消息到收到服务器的答复,中间经过了一段时间。
服务器只为该客户端服务,不处理其他任何事情。

这合理吗?我希望它能快得多。

答案1

Ping 通常由 TCP 堆栈内部处理,但握手需要由应用程序处理。操作系统必须

1) wake up the application, 
2) wait for it to retrieve the packet, 
3) do any pre-processing required when starting a new connection then 
4) tell the OS to continue with the handshake. 

上面的第 3 部分可能需要花费大量时间(这就是很多服务器预先分叉的原因)。您看到哪种网络流量的握手 RTT 较长?握手后 RTT 是否有所改善?

C。

答案2

设置 TCP_NODELAY 并将几个消息合并为一个消息就可以了,但是消息太小了。

答案3

你说的 ping 很大是什么意思?大数据包?无论如何,ping 使用ICMP 数据包,通常较小且优先级较高。因此,一种情况是检查您的配置。

另一件事是尝试非 ICMP ping, 喜欢传输控制。它使用 TCP syn 数据包,因此大致相同。

相关内容