我在100 Gb / s LAN上有两台机器,它们通过TCP彼此通信。
当我做一个tracert或从客户端到服务器的ping,即使是一个大的ping,我在1毫秒内得到答案。
但是,当我在客户端嗅探TCP数据包时,发现在发送三次握手的第一个消息的时间到从服务器接收到答复的时间之间传递了40ms 。
服务器专门用于这个客户端,并没有其他的处理。
这是合理的吗? 我希望它要快得多。
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部分可能会花费大量的时间(这是为什么很多服务器前叉)。 什么样的networkingstream量你看到长握手RTTs? 握手后RTT是否改善?
C。
当你说大平时,你是什么意思? 大包? 在任何情况下,ping都使用ICMP数据包 ,这些数据包通常很小且具有高优先级。 所以,一种情况是检查你的configuration。
另一件事是尝试一个非icmp平 ,就像tcpping 。 它使用TCP syn数据包,所以它将大致相同。
设置TCP_NODELAY,并将几个消息合并到一个消息中,这个消息太小了。