空的UDP和TCP数据包的大小?

35

一个空的UDP数据报的大小是多少?一个空的TCP数据包的大小呢?

我只能找到有关MTU的信息,但我想知道它们的“基本”大小,以便估算它们上面的协议的带宽消耗。


7
维基百科可以为您提供此案例中所需的一切信息。 - Artelius
Artelius和halfdan都是正确的,但你漏掉了一些东西:UDP和TCP都运行在某种物理传输之上。 例如,如果你正在使用以太网上的UDP,则还应包括以太网帧的大小。 - Useless
当然,如果你想要它被路由,那么还有IP帧。 - halfdan
1
哪个服务器层?UDP在IP上可以运行在许多服务器层之上,其中一个是以太网,但也有MPLS、PBT、帧中继、ATM、POS等。 - jldupont
不存在所谓的“IP帧”:您可能想要引用的是“IP数据包”。 - jldupont
5个回答

85

TCP:

Ethernet帧的大小 - 24字节
IPv4头部的大小(不包括任何选项)- 20字节
TCP头部的大小(不包括任何选项)- 20字节

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

UDP:

Ethernet帧的大小 - 24字节
IPv4头部的大小(不包括任何选项)- 20字节
UDP头部的大小 - 8字节

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


2
这(可能有错误)确实是我一直在寻找的最终结果! - puccio
8
我认为以太网帧的最小长度为64字节(有效载荷必须填充至少46字节)。 - Useless
2
并非所有的TCP和UDP都是在以太网之上传输的,事实上同一个数据包可能会在其通过各种网络的传输过程中被多个不同的物理层所承载。 - caf
3
你假设IP服务器层建立在以太网之上,这是针对局域网的合理假设,但对于广域网来说可能性较低。 - jldupont
3
以太网帧为什么有24个字节?如果我考虑MAC地址和协议,它们的总和是14个字节,那么这种假设有什么问题? - Johnny Willer
显示剩余3条评论

20

Himanshu的回答是完全正确的。

当查看以太网帧的结构时 [参见进一步阅读], 可能会产生误导的是,在没有有效负载的情况下,以太网帧的最小大小将为18个字节:目标MAC(6) + 源MAC(6) + 长度(2) + FCS(4),加上IPv4(20)和TCP(20)的最小大小,总共需要58个字节。

还未提到的是,以太网帧的最小有效负载为46个字节,因此IPv4和TCP的20+20字节不足以作为有效负载!这意味着必须填充6个字节,这就是64个字节的总数来自的地方。

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

希望这能澄清一些问题。

进一步阅读:


3
这是否意味着以下内容?18(最小以太网“标头”字段)+ 18(填充)+ 20(IPv4)+ 8(UDP)= 64字节?总共为IP + UDP有效载荷的46字节。 - Ali
4
没问题!这里的20+8(=28)不足以满足以太网数据包的最小负载要求,因此需要添加18个字节的填充(20+8+18=46)。 - Felix
如果你想知道如何区分以太网上没有负载的TCP数据包和带有1-6字节负载的TCP数据包,可以使用IP头中的“总长度”字段来完成。 - Karsten Spang

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数据包大小(特别是在公共网络骨干中)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接