我在机器 A 上有一个 java 进程通过 TCP 与机器 B 上的 Tomcat 通信。 TCP 连接(只是 syn-syn/ack 交换)始终需要 100 毫秒的数量级,而 ping 请求需要 1 毫秒(服务位于同一个 LAN 上)。
- 什么会导致建立 TCP 连接的延迟增加?
- 如何优化它?
注意:
- 这还不是 3 次握手,我只测量 syn/syn-ack 交换。
- 服务器是一台非常强大的机器,完全没有负载。
- 连接请求是针对 IP 而不是主机名,因此不涉及 DNS 查找。事实上,这无关紧要,因为我正在测量 SYN 离开机器 A 的时间。
最佳答案
看来问题不在客户端或服务器本身。我在客户端和服务器上进行了两次数据包转储:
- 客户端看到 SYN 和收到 SYN/ACK 之间有 100-150 毫秒的时间差。
- 服务器看到接收 SYN 和发送 SYN/ACK 之间只有 20 毫秒的时间差。
因此,问题一定出在某个中间层(路由器/防火墙/诸如此类)。
关于java - TCP 连接比 ping 花费 X100 更长的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1858519/