我正在尝试理解我在发送UDP数据包的情况下看到的一些行为。
我有两个小程序:一个传输UDP数据包,另一个接收它们。我在两台通过一台交换机连接的计算机之间的网络上运行它们。
两个网络适配器上的MTU设置(由/ sbin / ifconfig报告)为1500。
我能够看到ping -s的类似行为。
ping -s 24258 hostA
有效,但
ping -s 24259 hostA
失败。
是否有人了解可能发生的事情,或者对我应该寻找的内容有所了解?
两台计算机都运行CentOS 5 64位。我使用的是1.6 JDK,但我并不认为这是一个编程问题,它是一个网络或操作系统问题。
答案 0 :(得分:10)
IP协议的实现不需要能够处理任意大的数据包。从理论上讲,最大可能的IP数据包大小为65,535个八位字节,但标准只要求实现支持至少576个八位字节。
看起来您的主机实现支持的最大大小远大于576,但仍远小于最大理论大小65,535。 (我不认为交换机应该是一个问题,因为它不需要进行任何碎片整理 - 它甚至不在IP层运行。)
IP标准进一步建议主机不发送大于576字节的数据包,除非他们确定接收主机可以处理更大的数据包大小。你应该考虑一下你的程序发送更小的数据包大小是否会更好。 24,529对我来说似乎非常大。我认为很多主机可能无法处理大的数据包。
请注意,这些数据包大小限制与MTU(数据链路层协议支持的最大帧大小)完全分开。
答案 1 :(得分:5)
我发现了以下可能感兴趣的内容:
Dan的回答非常有用,但请注意,在标题之后,您实际上限制为65507字节。