当前位置:  开发笔记 > 运维 > 正文

UDP IP分段和MTU

如何解决《UDPIP分段和MTU》经验,为你挑选了2个好方法。

我试图理解我在发送UDP数据包的上下文中看到的一些行为.

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

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

如果我发送大小<1500的数据包,我会收到它们.预期.

如果我发送1500

如果我发送大小> 24258的数据包,它们就会丢失.不期望.当我在接收端运行wireshark时,我看不到任何这些数据包.

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

ping -s 24258 hostA 工作,但

ping -s 24259 hostA 失败.

有没有人理解可能发生的事情,或者对我应该寻找什么有所了解?

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



1> Dan Moulding..:

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

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

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

请注意,这些数据包大小限制完全独立于MTU(数据链路层协议支持的最大帧大小).



2> Kaleb Peders..:

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

确定Linux上UDP数据报包的最大大小

在IP报头中设置DF位并发送连续较大的数据包,以确定根据路径MTU发现在何时将数据包分段.然后,分组碎片应该产生ICMP类型3分组,其中代码4指示分组太大而不能被分段地发送.

Dan的答案很有用,但请注意,在标题之后,你真的限制在65507字节.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有