广州网站建设优化公司,做网站需要什么开发语言,wordpress分页 标题,项目网络图最早开始时间基本概念 以太网的链路层对数据帧的长度会有一个限制#xff0c;其最大值默认是1500字节#xff0c;链路层的这个特性称为MTU#xff0c;即最大传输单元 Maximum Transmission Unit#xff0c;最大传输单元#xff0c;指的是数据链路层的最大payload#xff0c;由硬件网…基本概念 以太网的链路层对数据帧的长度会有一个限制其最大值默认是1500字节链路层的这个特性称为MTU即最大传输单元 Maximum Transmission Unit最大传输单元指的是数据链路层的最大payload由硬件网卡设置MTU是一个硬性限制 以太网报文结构图
由图所示数据链路层的有效数据最小46byte最大一般1500byte这里的最大就是MTUMTU表示网络层必须将发给网卡API的包 1500byte否则会被丢弃。
问题理解 MTU是链路层对网络层的限制以太网链路的MTU默认是1500byte意思是以太网数据链路层的有效数据payload的最大字节数不能超过1500那这1500字节包含链路层的头部和尾部吗 答当然不包含 有的以太网网卡配置了VLAN tag通过此网卡的数据帧会携带VLAN tagVLAN 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的接口设置MTU1504或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包(UDPHeaderData)在网络层不用分片直接封装上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个字节通信