空UDP和TCP数据包的大小?

问题描述 投票:0回答:5

空 UDP 数据报的大小是多少?那么空 TCP 数据包呢?

我只能找到有关 MTU 的信息,但我想知道这些信息的“基本”大小是多少,以便估计其上的协议的带宽消耗。

tcp udp size
5个回答
85
投票

TCP:

以太网帧的大小 - 24 字节
IPv4 标头的大小(无任何选项)- 20 字节
TCP 标头的大小(无任何选项)- 20 字节

携带带有空 TCP 段的 IP 数据包的以太网帧的总大小 - 24 + 20 + 20 = 64 字节

UDP:

以太网帧的大小 - 24 字节
IPv4 标头的大小(无任何选项)- 20 字节
UDP 标头大小 - 8 字节

携带 IP 数据包和空 UDP 数据报的以太网帧的总大小 - 24 + 20 + 8 = 52 字节

编辑:上面错误地将以太网帧字节指定为 24B。相反,它是 18(或 VLAN 标记以太网为 22)。 8B 前导码不是最小 64B 帧的一部分。所以最小的IPv4+TCP数据包是18+20+20=58字节,最小的IPv4+UDP数据包是18+20+8=46字节。在这些情况下,需要以太网填充来填充高达 64B 的帧(TCP 示例为 6B 填充,UDP 示例为 18B)

https://superuser.com/a/394413同意此编辑


20
投票

Himanshus 的回答是完全正确的。

查看以太网帧的结构时可能会产生误导[请参阅进一步阅读],如果没有有效负载,以太网帧的最小大小将为 18 字节:Dst Mac(6) + Src Mac(6) + Length ( 2) + Fcs(4),添加 IPv4 (20) 和 TCP (20) 的最小大小,总共为 58 个字节。

还没有提到的是,以太网帧的最小有效负载是 46 字节,因此 IPv4 和 TCP 的 20+20 字节是不够的有效负载!这意味着必须填充 6 个字节,这就是总共 64 个字节的来源。

18(最小以太网“标头”字段)+ 6(填充)+ 20(IPv4)+ 20(TCP)= 64 字节

希望这能让事情变得更清楚。

进一步阅读


9
投票

请参阅用户数据报协议。 UDP 标头的长度为 8 字节(64 位)。

裸 TCP 标头的最小大小为 5 个字(32 位字),而 TCP 标头的最大大小为 15 个字。

最美好的祝愿, 法比安


1
投票

如果您打算计算带宽消耗并将其与网络的最大速率(例如 1Gb/s 或 10Gb/s)相关联,则有必要(如 Useless 所指出的)在层添加 以太网帧开销1为Felix等人计算出的数字,即

  • 7 字节前导码
  • 1 字节帧起始分隔符
  • 12 字节数据包间隙

即每个数据包总共消耗了 20 个字节。


0
投票

如果你正在寻找软件的视角(毕竟,Stack Overflow 是针对软件问题的),那么框架不包括 FCS、填充和帧符号开销,答案是 54:

  • 14 字节 L2 标头
  • 20 字节 L3 标头
  • 20 字节 L4 标头

这种情况发生在 TCP ack 数据包的情况下,因为 ack 数据包没有 L4 选项。

至于硬件和中间路由器通常对主机软件隐藏的FCS、填充、成帧符号、隧道等......软件实际上只关心额外的开销,因为它们对吞吐量的影响。正如其他答案所指出的,FCS 在帧中添加了 4 个字节,使其成为 58 个字节的帧。因此,需要 6 字节的填充才能达到 64 字节的最小帧大小。以太网控制器添加了额外的 20 字节帧符号,这意味着数据包在线路上至少占用 84 字节时间(或 672 比特时间)。例如,1Gbps 链路可以每 672ns 发送一个数据包,相当于大约 1.5MHz 的最大数据包速率。此外,中间路由器可以添加各种标签和隧道标头,进一步增加网络内部点(尤其是公共网络骨干网)的最小 TCP 数据包大小。

但是,考虑到软件可能与其他软件共享带宽,可以合理地假设这个问题不是询问总线路带宽,而是询问主机软件需要生成多少字节。主机依靠以太网控制器(例如这个 10Mbps 一个这个 100Gbps 一个)来添加 FCS、填充和帧符号,并依靠路由器来添加标签和隧道(虚拟化卸载控制器,例如在第二个链路中,有一个集成的隧道引擎,旧的控制器依赖于单独的路由器盒)。因此,主机软件生成的最小 TCP 数据包为 54 字节。

© www.soinside.com 2019 - 2024. All rights reserved.