我发现停滞的 TCP 连接问题。当我尝试从我的家庭网络从远程系统 scp 东西时,问题就出现了。我的家庭网络通过 PPPoE (ADSL+) 连接到互联网,一旦通过我的家庭网络工作,一切都会完美运行。ADSL 路由器的 MTU 设置为 1492,但这样设置远程系统的 scp 不起作用 - 停止!当我将路由器上的 MTU 更改为 1500 时,该 scp 工作正常,但是对于大多数 www 站点(甚至本地站点)来说,从我的家庭网络访问互联网的速度非常慢。只是想知道问题出在哪里——我的 ISP 阻止了 ICMP 等?谢谢!
PPPoE 需要 8 字节的封装/报头数据,这就是为什么您只能在以太网上使用 1492 字节的 MTU 进行操作。但是通常情况下,这种事情是通过路径 MTU 协商来解决的。
如果有人阻止了 ICMP,那么路径 MTU 协商将不起作用。
您的选择是摆脱 PPPoE 或更改远程系统上的 MTU 以处理您的半断连接。是的,我意识到两者都不理想。
一些网络服务器,尤其是一些常见的 CDN,如 Akamai、Amazon 等,似乎默认阻止了 ICMP 流量(这显然是一个非常糟糕的主意)。
我首先怀疑我的提供商配置错误,但我已经检查过了(我从互联网主机向我的 DSL 路由器发送了一些大数据包,并且在 DSL 链接之前从路由器收到“需要 ICMP 分段”数据包。
显然,我的 DSL 提供商曾经为所有客户在他们的接入路由器上进行 MSS 钳制,但似乎他们已经停止了。
我已经通过在我的 DSL 路由器上实施 MSS 钳制解决了这个问题,这样它现在就可以以限制下行链路最大分段大小的方式重写传出的 SYN 数据包。启用它的命令是:
如果您的家庭路由器不支持 iptables,您可以通过将 FORWARD 更改为 OUTPUT 来修改它以处理本地主机上的传出数据包,但我从未尝试过。