LAN 内的设备向互联网的 TCP 重传率非常高

LAN 内的设备向互联网的 TCP 重传率非常高

作为一名开发人员,我经常使用 Linux 系统,并且具有中等水平的网络知识,但以下情况却是一个真正令人困惑的谜:

我在 Linux 主机上的 kvm 虚拟机上运行 pfSense 2.4.3(最新版本)。我打算将其用于我的 Internet 路由、NAT 和防火墙。VM 有一个基于 macvtap 的接口,使其基本上可以通过调制解调器以太网所连接的主机上的物理接口直接访问我的有线调制解调器。它还有另一个虚拟接口,它是 Linux 主机上网络桥的成员,用于在 Linux 主机本身上以及 LAN 上的其他设备上提供 Internet 连接的 LAN 端。LAN 网络是 192.168.123.0/24;pfSense 的 LAN 地址静态分配给 192.168.123.2。

这种设置在前四五天似乎运行良好,但后来我注意到 LAN 上的机器的吞吐量非常低,无论是上传还是下载,对于发往互联网的 TCP 流量:大约 1mbps。数据包捕获显示 TCP 重传率约为 16%。

我还观察到了以下几点:

  • LAN 上的所有机器都能够相互通信,没有明显的问题。特别是,如果我将托管在 pfSense 实例上的文件传输到 LAN 上的机器,传输会很快进行(200+ mbps),数据包捕获显示在 77k 个数据包中有 1 次重新传输。
  • 在 pfSense 实例上运行 curl 或 wget 等程序时,TCP 到互联网的吞吐量以我的互联网连接的额定速度运行,大约为 60 mbps。我已经多次重现了这种情况。
  • 无论使用 NATted IPv4 还是 IPv6,性能都同样不佳。
  • 我的交换机报告 Linux 主机/pfSense 桥接器所连接的端口上的接收错误率约为 1.2%。我没有在任何主机上看到高丢弃或错误的以太网帧统计信息。
  • pfSense 和 LAN 上的机器捕获的数据包显示,当重新传输数据包时,会收到具有相同序列号的早期数据包,并且在少数情况下我发现,数据包包含相同的 TCP 段有效负载,这似乎表明不需要重新传输?

然后,我还注意到 pfSense 的 Linux 主机已经完全失去了打开出站 TCP 连接的能力,但是:

  • 它仍能顺利地在互联网上 ping 出内容。
  • pfSense 防火墙日志显示我的出站连接尝试没有被某些错误规则阻止。
  • 看似完美的 LAN 连接包括 pfSense VM 的 Linux 主机和 pfSense VM 之间的连接——Linux 可以打开到其默认 192.168.123.2 网关的 TCP 会话并快速地与其传输内容。
  • pfSense 对其 WAN 接口进行的数据包捕获显示,当 Linux 主机尝试建立出站连接时,TCP SYN 数据包会按照预期发送到 macvtap 接口。它们从未被确认。

线索?我可以尝试什么?全凭猜测?

答案1

我追踪两个都我的问题是由于错误计算了 TCP 段校验和。对于来自运行 pfSense VM 的 Linux 主机的流量,它们总是被错误计算,并且对于其他流量,它们会间歇性地被错误计算。

这似乎是因为 pfSense 默认不计算这些校验和,而是将其卸载到网络驱动程序/硬件上。您可以在软件中设置 pfSense 来计算它们:系统/高级/网络,禁用硬件校验和卸载

相关内容