【发布时间】:2014-12-17 22:36:09
【问题描述】:
有一台服务器无法接收大于 1500 字节的 TCP 数据包,
但是这个服务器可以发送一个大于 1500 的 TCP 数据包。
我还尝试在此服务器中捕获数据包以供 WireShark 分析。
但是,WireShark 无法在此服务器上正常抓包。
(例如,某些接收到的数据包不会被 WireShark 捕获)
有人知道吗?非常感谢。
服务器信息。
操作系统:Windows 2008;
MTU:1500。
================================================ ====
让我更清楚地描述这个问题。
我有一个客户端/服务器程序,它在 2 个服务器之间创建 TCP 连接
情况如下
服务器_A ---- 服务器_B
---> pkt
---> pkt >1500 字节可以接收
1500 Byte 可以接收
此程序在其他服务器上运行良好,仅在server_B异常。
有人有这种经验吗?
【问题讨论】:
-
如果mtu为1500,那么服务器可以发送大于1500字节的TCP包,但是IP层会对包进行分片,使得得到的IP数据报不大于mtu
-
是的,在正常情况下,我的程序可以发送大于 1500 的数据包。但在这种情况下,特定服务器,我在 server_A 和 server_B 之间创建 TCP 连接。然后我向 server_B 发送一个数据包。当数据包大小小于1500时,我在server_B中的程序可以接收数据包。但如果大于 1500,则不能。
-
我认为此时如果您发布代码 sn-p 会有所帮助。在 Linux/Unix 中编写写入 TCP 套接字的代码时,我只是执行 write() 系统调用,给它一个指向缓冲区及其长度的指针。然后操作系统告诉我写了多少。如果操作系统没有写入整个缓冲区,我会再次调用 write() 并使用指向未发送字节的指针。
-
这可能是由 pMTU 黑洞造成的,因为有人认为 ICMP 是可选的,因此配置防火墙来阻止它是完全可以的。 ICMP 是 Internet 端点要求,阻止它会破坏 TCP 之类的东西。
标签: networking tcp wireshark mtu