一个空的UDP数据报的大小是多少?一个空的TCP数据包的大小呢?
我只能找到有关MTU的信息,但我想知道它们的“基本”大小,以便估算它们上面的协议的带宽消耗。
一个空的UDP数据报的大小是多少?一个空的TCP数据包的大小呢?
我只能找到有关MTU的信息,但我想知道它们的“基本”大小,以便估算它们上面的协议的带宽消耗。
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字节
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个字节
希望这能澄清一些问题。
进一步阅读:
如果您正在寻找一个软件视角(毕竟,Stack Overflow是用于软件问题的),那么该帧不包括FCS、填充和框架符号开销,答案是54:
这发生在TCP ack数据包的情况下,因为ack数据包没有L4选项。
至于硬件和中间路由器通常从主机软件隐藏的FCS、填充、框架符号、隧道等等... 软件实际上只关心附加开销,因为它们对吞吐量的影响。正如其他答案所指出的,FCS会向帧添加4个字节,使其成为58个字节的帧。因此需要6个字节的填充才能达到最小帧大小64个字节。以太网控制器添加了额外的20个字节的框架符号,这意味着一个数据包在电线上需要至少84个字节时间(或672个位时间)。因此,例如,1Gbps的链路可以每672ns发送一个数据包,相应的最大数据包速率约为1.5MHz。此外,中间路由器可以添加各种标记和隧道头,在网络内部的某些点上进一步增加最小TCP数据包大小(特别是在公共网络骨干中)。
然而,考虑到软件可能与其他软件共享带宽,因此可以合理地假设这个问题不是在问总线带宽,而是主机软件需要生成多少字节。主机依赖于以太网控制器(例如this 10Mbps one或this 100Gbps one)来添加FCS、填充和框架符号,并依赖于路由器来添加标签和隧道(虚拟化卸载控制器,例如第二个链接中的控制器,具有集成的隧道引擎。旧的控制器依赖于单独的路由器盒)。因此,由主机软件生成的最小TCP数据包为54字节。