包含报头的 IP 数据包帧有多大?
一点背景知识。
我正在编写一个使用 UDP 的应用程序。该应用程序将在 LAN(而非互联网)上运行。 我一直假设如果我的 MTU 是 1500 那么 UDP 有效负载就可以有多大,但我 不确定 UDP 标头是否也适合其中。
我怀疑如果我发送一个 1500 字节负载的 UDP 数据包并且机器 MTU 为 1500 字节,它最终会发送两个数据包吗?
在互联网上搜索明确的答案似乎比应有的困难,我看到了相互矛盾的信息。
A bit of background.
I'm writing an application that uses UDP. The application will run on a LAN (not internet).
I've been assuming that if my MTU is 1500 then thats how big a UDP payload can be, but I'm
not sure if the UDP header is meant to fit within that too.
I'm suspecting that if I send a UDP packet with a 1500 byte payload and the machine MTU is 1500 bytes will it end up sending two packets?
Searching the internet for a clear answer here seems harder than it should be, I've seen conflicting information.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您的 MTU 为 1500,则您的数据有 1500-20-8 = 1472 字节。
If your MTU is 1500, you have 1500-20-8 = 1472 bytes for your data.
是的,你的例子不适合一个框架。
以太网数据有效负载为 1500 字节。 IPv4 的标头至少需要 20 个字节。或者 IPv6 至少需要 40 字节。 UDP 的标头需要 8 个字节。这为您的数据留下了 1472 字节 (ipv4) 或 1452 (ipv6)。
更多信息:
Yes your example would not fit in one frame.
The ethernet data payload is 1500 bytes. IPv4 requires a minimum of 20 bytes for its header. Alternatively IPv6 requires a minimum of 40 bytes. UDP requires 8 bytes for its header. That leaves 1472 bytes (ipv4) or 1452 (ipv6) for your data.
More information:
所以,这就是它的工作原理。即使您有 100 兆的粗管道,以太网也会将您的数据流限制为每帧 1500 字节。要真正使用线路速率,通过您的 UDP 应用程序,您将需要使用/移动到以太网巨型帧,该帧可能支持每帧最多 9000 字节。另外,如果您查看 netflix/youtube 和其他流媒体协议,他们会在开始流媒体之前测试您的链接。他们本质上所做的是,他们向您发送一些数据并在转储流之前计算/平均链接速度。它们本质上也使用 UDP,但数据包大小非常大。我猜肯定大于 1500 字节。
So, here is how it works. Ethernet restricts your data flow to 1500 bytes per frame even though you have a 100 meg fat pipe. To really use the line rate, through your UDP application, you will need to use/move to ethernet jumbo frames which may support upto 9000 bytes per frame. Also, if you look at netflix/youtube and other streaming protocols, they test your link before they start streaming. What essentially they do is, they send some data to you and calculate/average the link speed before they dump the stream. They essentially use UDP as well but with a very big packet size. I guess bigger than 1500 bytes for sure.