包含报头的 IP 数据包帧有多大?

发布于 2024-09-27 08:20:28 字数 238 浏览 1 评论 0原文

一点背景知识。

我正在编写一个使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

娇纵 2024-10-04 08:20:28
------------------------------------------------------------------------------
|Ethernet  | IPv4         |UDP    | Data                   |Ethernet checksum|
------------------------------------------------------------------------------
  14 bytes    20 bytes     8 bytes    x bytes                4 bytes
           \ (w/o options)                               /
            \___________________________________________/
                              |
                             MTU

如果您的 MTU 为 1500,则您的数据有 1500-20-8 = 1472 字节。

  • 如果超过这个值,数据包将被分段,即分成更多的数据包。
  • 可能涉及更多层,例如,如果您位于 vlan 以太网之上,则 4 字节的 vlan 标头。
  • 您和目的地之间的某些路由器可能会添加更多层。
------------------------------------------------------------------------------
|Ethernet  | IPv4         |UDP    | Data                   |Ethernet checksum|
------------------------------------------------------------------------------
  14 bytes    20 bytes     8 bytes    x bytes                4 bytes
           \ (w/o options)                               /
            \___________________________________________/
                              |
                             MTU

If your MTU is 1500, you have 1500-20-8 = 1472 bytes for your data.

  • If you exceed that, the packets will be fragmented ,i.e. split into more packets.
  • There might be more layers involved, e.g. 4 byte a vlan header if you're on top of a vlan ethernet.
  • Some routers inbetween you and the destination might add more layers.
因为看清所以看轻 2024-10-04 08:20:28

是的,你的例子不适合一个框架。

以太网数据有效负载为 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:

最笨的告白 2024-10-04 08:20:28

所以,这就是它的工作原理。即使您有 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文