AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 740642
Accepted
Cory J
Cory J
Asked: 2015-12-04 12:15:35 +0800 CST2015-12-04 12:15:35 +0800 CST 2015-12-04 12:15:35 +0800 CST

为什么数据位于 Send-Q 中?TCP 会话冻结

  • 772

问题

我为 20-50 个用户运行 IRC 服务器。我们有时会遇到消息没有及时到达或根本没有到达的问题。在一些数据包捕获之后,我们确定消息位于服务器的“Send-Q”中。当消息未到达时,我将查看“netstat -ct”输出并看到如下内容:

Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 1756 ubuntu:ircd 10.8.1.7:63602 ESTABLISHED

有时,如果我等待几分钟,Send-Q 将变为 0 并且消息将被传递,有时客户端超时。我的问题是,为什么它不只是传递消息?是什么让他们在 Send-Q 中坐了这么久?

sshd 也表现出类似的行为,我的 ssh 会话有时会冻结,有时会回来,有时会超时。

背景

不确定这里的基础设施是否与问题有关,所以看起来是这样的:这些客户端在 Windows 7 上,并与 OpenVPN 连接。OpenVPN 服务器位于 PFSense 上,IRC 服务器位于连接到 PFSense 的本地(NAT'd)LAN 上。我有一个防火墙规则,允许客户端与服务器上的 6667 通信。

正在调查...

延迟/损失- 看起来足够好。不是最好的链接,但我认为这对于 IRC 和 SSH 来说会很好。这是从我的客户端到服务器的 ping,这是我的 IRC 和 SSH 间歇性挂起:

Ping statistics for 10.8.5.2:
    Packets: Sent = 4478, Received = 4460, Lost = 18 (0% loss)

以毫秒为单位的近似往返时间:最小值 = 17.2 毫秒,最大值 = 273.4 毫秒,平均值 = 32.3 毫秒

MSS/MTU 问题- MTU 似乎没问题。我客户端上的 OpenVPN mtu-test 说:

Thu Dec 03 12:41:21 2015 NOTE: Empirical MTU test completed [Tried,Actual] local->remote=[1589,1589] remote->local=[1589,1589]

...这是我的手动测试:

> ping -f -l 1472 10.8.5.2

Pinging 10.8.5.2 with 1472 bytes of data:
Reply from 10.8.5.2: bytes=1472 time=23ms TTL=63

> ping -f -l 1473 10.8.5.2

Pinging 10.8.5.2 with 1473 bytes of data:
Packet needs to be fragmented but DF set.

带宽/吞吐量- 进行了一些 iperf 测试以确保不存在吞吐量问题。再次,看起来足够体面:

iperf -c 10.8.5.2
------------------------------------------------------------
Client connecting to 10.8.5.2, TCP port 5001
TCP window size: 63.0 KByte (default)
------------------------------------------------------------
[  3] local 10.8.0.23 port 18587 connected with 10.8.5.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  26.0 MBytes  21.8 Mbits/sec

谢谢,任何帮助理解“Send-Q”或更具体的关于这个问题的想法将不胜感激。让我知道我是否可以在此处提供更多信息。

更新

发现我实际上有大量的数据包丢失。来自客户端-> VPN 的 Ping 没有显示这一点,但在使用来自 VPN-> 客户端的 fping 时非常明显。我注意到它只是 Windows 客户端,重新安装最新的 OpenVPN 客户端似乎已经修复了损失。它可能与通过磁盘映像安装的 OpenVPN TAP 适配器有关。每台机器手动安装似乎可以解决问题。

linux
  • 2 2 个回答
  • 20078 Views

2 个回答

  • Voted
  1. Best Answer
    David Schwartz
    2015-12-04T13:00:05+08:002015-12-04T13:00:05+08:00

    当应用程序将数据写入其本地内核 TCP 堆栈时,数据进入发送队列。当对方的 TCP 堆栈确认收到数据时,数据将从发送队列中删除。如果它们位于发送队列中,则意味着您的 IRC 服务器代码已将它们发送到您的内核,但连接的另一端尚未确认它们。这可能是因为它们尚未发送。这可能是由服务器带宽限制或服务器性能限制引起的,但最常见的原因是对方接收数据的速度不如服务器发送数据的速度快。

    • 9
  2. Leevi L
    2021-10-08T01:18:25+08:002021-10-08T01:18:25+08:00

    我有一个类似的问题:

    • ssh 连接保持已建立
    • 终端反复冻结和解冻
      • 终端冻结时,数据包在 SEND-Q 中可见
      • 冷冻时间约2-4分钟
      • 解冻约30秒

    原来我的路由器的固件已经过时了!

    • 修复了固件更新的问题
    • 0

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve