网络概念-MTU

参考链接:https://blog.csdn.net/wjz110201/article/details/115282059

一、MTU基本概念

  1. 以太网的链路层对数据帧的长度会有一个限制,其最大值默认是1500字节,链路层的这个特性称为MTU,即最大传输单元

  2. Maximum Transmission Unit,最大传输单元,指的是数据链路层的最大payload,由硬件网卡设置MTU,是一个硬性限制

在这里插入图片描述

由图所示,数据链路层的有效数据,最小46byte,最大一般1500byte,这里的最大就是MTU,MTU表示网络层必须将发给网卡API的包 <= 1500byte,否则会被丢弃。

二、问题理解

MTU是链路层对网络层的限制,以太网链路的MTU默认是1500byte,意思是以太网数据链路层的有效数据payload的最大字节数不能超过1500,那这1500字节包含链路层的头部和尾部吗?

答:不包含

有的以太网网卡配置了VLAN tag,通过此网卡的数据帧会携带VLAN tag,VLAN tag要算在链路层的payload里吗?或者可以说MTU = 1500里包含802.1Q的头部VLAN tag吗?

答:不包含

当网卡配置VLAN tag时,VLAN tag + Data <= MTU,有时VLAN tag不只有一个,可能是双标签,那这个VLAN tag就是8个字节。这时候的MTU如果还是1500,链路层的payload就不可能是1500了,怎么办?

答:可以把添加802.1Q的接口设置MTU=1504或1508

为什么要有MTU?
以太网最初对报文长度没有限制,网络层最大可以接收65535个字节,但是以太网对于长报文无法可靠地传输,而且丢失后重传也会占用大量的网络资源,而将报文限制在一定的长度,以太网可以将报文大概率传输到目的地,于是就有了MTU

合理的MTU会让我们获得更快的网速,MTU怎么设置更合理呢?

1、本地MTU值大于网络MTU值时,本地传输的数据包过大导致网络会拆包后传输,不但产生额外的数据包,而且消耗了“拆包、组包”的时间

2、本地MTU值小于网络MTU值时,本地传输的数据包可以直接传输,但是未能完全利用网络给予的数据包传输尺寸的上限值,传输能力未完全发挥

3、这样我们就知道,所谓合理的设置MTU值,就是让本地的MTU值与网络的MTU值一致,既能完整发挥传输性能,又不让数据包拆分。

三、IP分片

链路层的payload有MTU限制,意味着网络层下发到链路层的数据不能超过MTU,如果超过了,就需要在网络层分片,切成<=MTU的IP数据包。

网络层如果发现链路层的MTU小于IP包的大小(网络层可以调用函数获取链路层信息),也并不会立刻开始分片,还需要看IP包的是否允许分片位DF(Don’t Fragment),如果允许分片,就会分成多个ID一样的IP包

主机的网络层可以分片,路由器的网络层也可以分片,也就是说路由器的网络接口也有MTU限制,就像木桶理论一样,木桶能装多少水取决于最短的那块,网络通信的路径上决定IP包大小的,取决于源主机、目的主机、路由器中MTU最小的那个

对于UDP包,如果MTU = 1500,那么udp payload最大值是多少,才可以不用分片?

答:MTU(1500) = IPHeader(20) + UDPHeader(8) + Data Data = 1500 -20 - 8 = 1472,如果UDP包的Data <= 1472个字节,UDP包(UDPHeader+Data)在网络层不用分片,直接封装上IPHeader发往链路层

如果UDP包的payload > 1472,那么UDP包(UDPHeader + Data)在网络层需要分片,如何分片?

答:网络层并不会在每个分片里复制一次UDP头,它是把完整的UDP包切开,加上IP头发送出去,除了第一个分片有UDP头,后面的分片都不包含UDP头

目的主机的网络层接收到多个UDP分片包后,网络层必须重组才能交给上层,为什么?

答:因为多个分片包只有第一个是有UDP头的,它可以根据UDP头里的端口号通知相应的应用取走,但是后面的分片包由于没有UDP头,传输层无法把分片包交给正确的应用程序。所以UDP分片包必须在网络层重组成一个完整的UDP包,交给传输层处理

网络层根据什么重组呢?还记得上面说的,分片的时候会分成多个ID一样的IP包吗?

答:如果某些分片包没有被目的主机的网络层接收到,造成UDP包重组失败,接收方会丢弃整个数据包,这是UDP不可靠传输的一个表现。而TCP发生组包错误时,该包会被重传,保证可靠传输

对于UDP来说,一般选择576个字节通信

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值