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

如何找到我可以发送的最大UDP数据包而不会分段?

如何解决《如何找到我可以发送的最大UDP数据包而不会分段?》经验,为你挑选了2个好方法。

我需要知道我可以发送到另一台计算机的最大UDP数据包没有碎片.

该大小通常称为MTU(最大传输单元).据推测,在两台计算机之间,将有许多可能具有不同MTU的路由器和调制解调器.

我读到Windows中的TCP实现自动找到路径中的最大MTU.

我也在试验,我发现从我的电脑到服务器的最大MTU是57712字节+标题.上面的任何东西都被丢弃了.我的电脑在局域网上,不是MTU应该在1500字节左右吗?



1> ChrisW..:

以下内容并未直接回答您的问题,但您可能会发现它很有趣; 它说,IP数据包可以拆卸/重新组装,因此比下属媒体上的限制更大(如1500字节的以太网):与GRE和IPSEC解决IP分段,MTU,MSS和PMTUD问题


更多关于这个主题:

Re:UDP碎片说你应该使用ICMP而不是UDP来发现MTU

路径MTU发现说TCP连接可能包括通过ICMP进行的隐式MTU协商

我不知道通过在Windows的API产生ICMP:一次这样的API提出,并且是有争议的,因为人们认为这将可以很容易地编写出产生的洪水实施拒绝服务功能的软件ICMP消息.

不,它看起来像它实现:例如见的Winsock编程的常见问题的例子:中国平安:原始套接字方法.

因此,要发现MTU,请使用'do not fragment'标志生成ping数据包.

也许有一个比这更简单的API,我不知道; 但我希望我已经让你了解基础协议[s].


你是怎么在这里提出160和64的?AFAIK IP头= 20,UDP头= 8,TCP头= 20.
@Nikolai:他一定是在考虑比特,而不是字节.因此,对于1500字节的数据包,开销差异<1%

2> Nikolai Feti..:

除了之前的所有答案,引用经典:

IPv4和IPv6定义了最小重组缓冲区大小,这是我们保证任何实现必须支持的最小数据报大小.对于IPv4,这是576个字节.IPv6将此值提高到1,280字节.


这几乎意味着,如果您在公共互联网上工作并且您只控制交换机的一侧 - 这就是大多数标准的基于UDP的协议所做的事情,那么您希望将数据报大小限制在576以下.

另请注意,PMTU是路径的动态属性.这是TCP为您处理的事情之一.除非您准备重新实现大量的排序,定时和重传逻辑,否则请将TCP用于任何关键网络.基准测试,测试,配置文件,即证明 TCP是你的瓶颈,只考虑UDP.


我只是说TCP已经实现了RFC 1191/1981等等,以及内核也是如此.如果您有理由在UDP中工作 - 很好 - 请继续前进,只需确保原因有效.
它的粗糙呢!建议是学习这两种协议,并推断适用性.你正在脱离语境.
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有