UDP IP分段和MTU

时间:2010-09-14 19:19:13

标签: linux networking udp

我正在尝试理解我在发送UDP数据包的情况下看到的一些行为。

我有两个小程序:一个传输UDP数据包,另一个接收它们。我在两台通过一台交换机连接的计算机之间的网络上运行它们。

两个网络适配器上的MTU设置(由/ sbin / ifconfig报告)为1500。

  • 如果我发送大小
  • 如果我发送1500<尺寸< 24258我收到了他们。预期。我已通过wireshark确认IP层正在将它们分段。
  • 如果我发送大小>的数据包24258,他们迷路了。 未预期。当我在接收方运行wireshark时,我看不到任何这些数据包。

我能够看到ping -s的类似行为。

ping -s 24258 hostA有效,但

ping -s 24259 hostA失败。

是否有人了解可能发生的事情,或者对我应该寻找的内容有所了解?

两台计算机都运行CentOS 5 64位。我使用的是1.6 JDK,但我并不认为这是一个编程问题,它是一个网络或操作系统问题。

2 个答案:

答案 0 :(得分:10)

IP协议的实现不需要能够处理任意大的数据包。从理论上讲,最大可能的IP数据包大小为65,535个八位字节,但标准只要求实现支持至少576个八位字节。

看起来您的主机实现支持的最大大小远大于576,但仍远小于最大理论大小65,535。 (我不认为交换机应该是一个问题,因为它不需要进行任何碎片整理 - 它甚至不在IP层运行。)

IP标准进一步建议主机不发送大于576字节的数据包,除非他们确定接收主机可以处理更大的数据包大小。你应该考虑一下你的程序发送更小的数据包大小是否会更好。 24,529对我来说似乎非常大。我认为很多主机可能无法处理大的数据包。

请注意,这些数据包大小限制与MTU(数据链路层协议支持的最大帧大小)完全分开。

答案 1 :(得分:5)

我发现了以下可能感兴趣的内容:

Dan的回答非常有用,但请注意,在标题之后,您实际上限制为65507字节。