TCP 连接花费的时间比 ping 长 X100
我在机器 A 上有一个 java 进程,通过 TCP 与机器 B 上的 Tomcat 进行通信。 TCP 连接(仅 syn-syn/ack 交换)始终需要 100 毫秒左右,而 ping 请求则需要 1 毫秒(服务器位于同一 LAN 上)。
- 什么可能导致建立 TCP 连接的延迟增加?
- 我该如何优化它?
请注意:
- 这还不是 3 次握手,我仅测量 syn/syn-ack 交换。
- 服务器是一台非常强大的机器,根本没有负载。
- 连接请求针对的是 IP,而不是主机名,因此不涉及 DNS 查找。事实上,这并不相关,因为我正在测量 SYN 离开机器 A 的正弦时间。
I have a java process on machine A communicating with a Tomcat on machine B via TCP. The TCP connect (just the syn-syn/ack exchange) takes on the order of 100 ms consistently, while a ping request takes 1 ms (the serves are on the same LAN).
- What could cause the increased delay in establishing a TCP connection?
- How do I optimize it?
Note that:
- This is not yet a 3-way-handshake, I'm measuring only the syn/syn-ack exchange.
- The server is a very strong machine and not under load at all.
- The connect request is to an IP, not a hostname, so no DNS lookup is involved. In fact, this is not relevant since I'm measuring the time sine the SYN left machine A.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看来问题不在于客户端或服务器本身。我在客户端和服务器上进行了两次数据包转储:
因此,问题一定出在某个中间层(路由器/防火墙/诸如此类)。
It seems the problem is not in the client or server themselves. I took two packet dumps on the client and server:
Ergo, the problem must be in some intermediate layer (router/firewall/whatnot).