在Linux NAT主机上,延迟复制段会导致连接重置

https://www.cloudshark.org/captures/6f185eb12e97

  • 172.30.5.1带有桥接networking的Linux虚拟机,运行在另一台服务器上,虚拟机只有RFC1918地址
  • 144.76.103.194具有一个接口的Linux主机,连接到互联网和RFC1918广播域,充当VM的NAT网关
  • 86.59.21.20 Linux HTTP Server

端口29909上的TCP数据stream遇到RTS从144.76.103.194延迟,已经重新传输,从86.59.21.20到达。

  • 帧#581 – 发起序列522729重新发送
  • 帧#615-序列522729已被重发
  • 帧#1727 – 原始序列522729到达,延迟~600毫秒
  • 帧#1728 – NAT主机将RST发送回HTTP服务器

直接从NAT主机启动的连接正常工作。

这似乎与Linux conntrack代码对“长”延迟段不满意,因意外数据而中止连接有关。

行为可以通过将netfilter/nf_conntrack_tcp_be_liberal设置为1来缓解。

内核文档: https : //www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt