TCP 连接花费的时间比 ping 长 X100

发布于 2024-08-13 06:40:49 字数 362 浏览 4 评论 0原文

我在机器 A 上有一个 java 进程,通过 TCP 与机器 B 上的 Tomcat 进行通信。 TCP 连接(仅 syn-syn/ack 交换)始终需要 100 毫秒左右,而 ping 请求则需要 1 毫秒(服务器位于同一 LAN 上)。

  1. 什么可能导致建立 TCP 连接的延迟增加?
  2. 我该如何优化它?

请注意:

  • 这还不是 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).

  1. What could cause the increased delay in establishing a TCP connection?
  2. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空城缀染半城烟沙 2024-08-20 06:40:49

看来问题不在于客户端或服务器本身。我在客户端和服务器上进行了两次数据包转储:

  1. 客户端发现看到 SYN 和接收 SYN/ACK 之间有 100-150 毫秒的时间差。
  2. 服务器在接收 SYN 和发送 SYN/ACK 之间仅存在 20 毫秒的时间差。

因此,问题一定出在某个中间层(路由器/防火墙/诸如此类)。

It seems the problem is not in the client or server themselves. I took two packet dumps on the client and server:

  1. The client sees a 100-150 ms time difference between seeing the SYN and receiving the SYN/ACK.
  2. The server sees only a 20 ms time difference between receiving the SYN and sending the SYN/ACK.

Ergo, the problem must be in some intermediate layer (router/firewall/whatnot).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文