我们有一个在本地网络中 Tomcat 下运行的 Web 应用程序。我们的客户在使用此 Web 应用程序时遇到了奇怪的问题。假设 Tomcat 服务器在 host1 上运行,我们在 host2 上的浏览器中打开 webapp URL。
主机 2 上的任何浏览器都会开始打开页面,下载内容会“挂起”数小时。我们进行了大量实验,发现任何大于 2000 字节的内容都会导致浏览器请求挂起。在 Internet Explorer 8、Opera 12、Firefox 中进行了尝试。同时,如果用户从互联网打开网站,它会正常工作。从运行 Tomcat 的同一主机 1 打开 webapp 可以正常工作。本地网络由 D-Link DGS-3120-48TC 交换机组织。
附加信息。在实验过程中,我们注意到主机上安装了 XP Tweaker。该工具的网络设置如下:
- MTU 手动设置为 1500
- 回转轴承 = 14600
- 支持大于 64 KB 的 TCP 帧
- 生存时间 = 32
- SACK 已启用
答案1
这可能只是PMTU 发现路径1上的某个地方出现故障,因此您的服务器发送的数据包比能够到达客户主机的数据包大。尝试将 MTU 减小到 1300,看看是否有帮助。
您要更改哪一侧的 MTU 并不重要 - 在客户端减少 MTU 也应该会减少在建立 TCP 连接时报告给服务器的 MSS,因此它会发送较小的数据包。在服务器端减少 MTU 会立即将数据流分成较小的段。
如果你觉得这有帮助,千万不要就此止步,修复 PMTUD。
1最有可能的原因是因为你在防火墙配置中以错误的方式过滤了 ICMP,所以需要进行 ICMP 分段的消息将无法到达你服务器的 TCP 堆栈,从而严重破坏 PMTUD,导致数据包超出 MTU,而这些数据包根本无法通过 MTU 小于你服务器 MTU 的路由器。