当前位置: 首页 > news >正文

网络流量传输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个字节通信

http://www.lryc.cn/news/2179.html

相关文章:

  • 30个HTML+CSS前端开发案例(四)
  • 《TPM原理及应用指南》学习 —— TPM执行环境3
  • 实验名称:经典同步问题:生成者与消费者问题
  • EasyCVR视频云存储的架构解析与Sharelist云存挂载方法介绍
  • 电机参数中力矩单位kgf.cm,Nm,mNm表示的含义
  • 使用scikit-learn为PyTorch 模型进行超参数网格搜索
  • Windeployqt 打包,缺少dll 的解决方法
  • 第四章:搭建Windows server AD域和树域
  • 【解决方案】老旧小区升级改造,视频智能化能力如何提升居民安全感?
  • 【遇见青山】项目难点:缓存穿透的解决方案
  • 单一职责原则|SOLID as a rock
  • 使用百度地图官方WEB API,提示 “ APP 服务被禁用“ 问题的解决方法
  • nodejs如何实现Digest摘要认证?
  • 【C#项目】图书馆管理系统-WinForm+MySQL
  • RNN循环神经网络原理理解
  • 一句话设计模式1: 单例模式
  • 新版国家标准GB/T 28181—2022将于2023年7月1日正式实施,与GB/T 28181—2016差别有哪些?
  • 剑指 Offer 41. 数据流中的中位数
  • 分布式架构下,Session共享有什么方案?
  • 瀚博半导体载天VA1 加速卡安装过程
  • 服务降级和熔断机制
  • 史上最全最详细的Instagram 欢迎消息引流及示例
  • MDB 5 UI-KIT Bootstrap 5 最新版放送
  • 做专家型服务者,尚博信助力企业数字化转型跑出“加速度” | 爱分析调研
  • CSS 重新认识 !important 肯定有你不知道的
  • android 12添加系统字体并且设置为默认字体
  • LeetCode刷题系列 -- 1094. 拼车
  • 二叉查找树的应用 —— K模型和KV模型
  • 深度学习实战(11):使用多层感知器分类器对手写数字进行分类
  • ThingsBoard-警报