MTU专题

PMTU(最小MTU)发现的基本原理

  • 源端发送长度等于自身出接口MTU的IP包,并设置该IP包不允许被分片;
  • 路径上收到该IP包的设备,如果其出口MTU小于该IP包,都会将其丢弃,并返回携带了自己MTU的ICMP报文(称为datagram-too-big消息)给源端;

  • 如果源端没收到datagram-too-big消息,则源端的出口MTU即为PMTU;如果源端收到datagram-too-big消息,则按这个消息里携带的MTU继续发送IP包;

  • 如果源端没有再收到datagram-too-big消息,则PMTU为最后一次收到的datagram-too-big消息携带的MTU;如果源端还收到datagram-too-big消息,则再次发送IP包,长度为这个datagram-too-big消息的MTU;
  • 如此反复,直到收到目的端的回应报文。

IPv4网络难以发现PMTU的原因

  • 某些运营商或网站考虑网络安全(如预防DDOS攻击)或其他需要,把ICMP报文过滤掉了;
  • PMTU需要主机和互联网上的各种网络设备(交换机、路由器、防火墙等)的配合,但它们的配置无法统一规范;
  • 有些网络设备不遵从RFC 1191协议。

MSS

MSS是指每次能够传输的最大数据分段,即TCP报文的最大净荷长度。TCP协议在建立连接的时候通常会协商MSS值。默认情况,双方将各自出接口MTU减40字节作为MSS初始值通告给对方,之后选择其中较小的MSS作为发送TCP数据段的最大长度。
TCP MSS = MTU-40

MTU与协议的关系

OSPF和IS-IS这两种路由协议,LDP和RSVP-TE这两种MPLS信令协议都会进行MTU协商。OSPF和IS-IS网络可能有几百上千台路由器,路由信息量大。因此,携带路由信息的协议报文可能很大,超出邻居接收能力而无法处理。因此,OSPF和IS-IS在建立邻居关系时会协商MTU,将自己的接收能力告诉对方。

MPLS信令协议为什么也要协商MTU?

MPLS并没有分片机制。MPLS首部才4个字节,每个比特位都被占用了,无法再用于携带分片信息。

MPLS信令协商MTU,是为了自动发现MPLS转发的PMTU值。这个PMTU其实是用于IP分片的。MPLS报文的二层帧头和IP头之间被添加了若干MPLS头,每个MPLS头长4字节。

假设标签个数为N,则,
MPLS PMTU = IP MTU+N*4字节,即,
IP PMTU = MPLS PMTU- N*4字节

IPv6 MTU

IPv6首部没有分片的字段,被放在IPv6扩展首部中。IPv6分片只发生在源端,中间节点不对IPv6报文进行分片。通常,只有源和目的节点需要解析IPv6扩展首部,如果IPv6报文长度超过中间节点的接口IPv6 MTU,中间节点会丢弃报文并反馈ICMPv6 packet-too-big消息。

IP MTU分片流程

涉及MTU分片的流程 分片位置 说明
始发IPv4报文 控制平面 始发IPv4报文是指本设备控制平面发送的协议报文,这些
IPv4协议报文的源地址是本设备;
BGP协议报文,ICMP差错控制报文,BFD探测报文等,
都属于协议报文;
在设备上进行ping操作,设备发送的是源地址为本设备的
ICMP请求报文。
始发IPv6报文 控制平面 始发IPv6报文是指本设备控制平面发送的IPv6协议报文,
这些IPv6协议报文的源地址是本设备;
在设备上进行ping ipv6操作,设备发送的是源地址为本设
备的ICMPv6请求报文。
转发IPv4报文 转发平面 只在报文发送时才检查MTU,从入接口接收报文时不检
查MTU。
在NE40E/80E/CX600/ME60/NE5000E产品上,接口下配置
的MTU(称为接口MTU)是指IP MTU,是一个三层概
念,因此一般情况下,接口MTU只作用于三层流量转
发,对二层流量转发没有影响。二层报文的IP首部+IP负
载总长超过MTU时通常不会被分片。

说明

       通常只有IPv6源节点和目的节点才会解析IPv6扩展首部,所以只有始发IPv6报文时才会进行IPv6 MTU分片,转发IPv6报文

时不进行IPv6 MTU分片。

控制平面分片流程

控制平面先进行IP分片,再封装MPLS、L2TP等隧道头(如果需要的话),最后发送到转发平面。控制平面的分片机制由软件实现,不存在硬件差异。

控制平面发送的协议报文,如果是非MPLS报文,且这些报文的IP首部+IP负载大于出接口的MTU值,

  • 如果IP首部的DF=0,对报文分片,每个分片的IP首部+IP负载都不大于出接口MTU。
  • 如果IP首部的DF=1,丢弃报文。
  • 如果IP首部的DF=1且使能强制分片,则对报文分片,分片后每个片的DF=0。(默认不使能强制分片。接口下配置了clear ip df命令表示使能对协议报文的强制分片)。

转发平面分片流程

  • 母版分片

  • 集成板分片

母板分片/集成板分片:

  1. 分片仅针对需要进行IPv4转发的流量生效。需要进行IPv4转发的流量,不仅包括进入设备的RawIPv4流量,还包括解封装后需要进行IPv4转发的流量。
  2. 对于只进行二层转发,或只进行MPLS转发的流量,不进行分片。
  3. 对于转发的IPv6报文,不进行分片。
  • 子卡分片

子卡分片与母板分片/集成板分片相比,区别在于:

由于子卡无法区分二层还是三层流量,因此对于同时转发二层和三层流量的VLANIF接口,其MTU会影响二层流量。当二层流量的IP首部+IP负载总长超过接口MTU时,二层报文也会被分片。每个分片的IP首部+IP负载总长度小于或等于接口MTU。

MPLS MTU 的定义

包含MPLS标签栈、IP首部、IP净荷的字段的长度。

IP报文入MPLS隧道时的分片方式

分片方式A:若IP包+Label > MPLS MTU,且IP首部的DF=0,则将IP报文分片,打上标签转发;如果IP首部的DF=1,则:

  • 未使能强制分片:直接打上标签后转发。
  • 使能强制分片:将IP报文分片,打上标签转发。

分片方式B:仅在IP报文入隧道时进行MPLS报文分片。不支持强制分片。若IP包+Label > MPLS MTU,且IP首部的DF=0,则首先将IP报文分片,然后打上标签转发;如果IP首部的DF=1,则丢弃报文,返回Datagram-too-big消息。

分片方式C:分片依据是隧道物理出接口MTU而不是MPLS MTU,且MPLS报文分片在PE节点和P节点都可能发生。由于单板先封装MPLS再进行分片,子卡无法区分MPLS报文在本设备是入隧道还是只进行MPLS转发,所以此类单板作为PE节点的NNI使能L3VPN分片时,如果同时作为P节点的NNI时,所有超过接口MTU的MPLS标签报文都会被分片。

OSPF协议的MTU协商

根据RFC2328的定义,OSPF通过DD报文(Database Description packet)的interface MTU字段来协商MTU值。RFC2328规定,如果设备收到的DD报文interface MTU字段值小于DD报文出接口的MTU,则邻居关系停留在Exchange start状态,无法达到FULL。不同厂商对于DD报文中的MTU协商处理原则不尽相同:

  • 有的厂商默认检查DD报文的MTU值。可以通过命令行调整为不检查。
  • 有的厂商默认不检查DD报文的MTU值。可以通过命令行调整为检查。
  • 还有的厂商设备检查MTU值,且不可调整。

IS-IS 的MTU 协商

根据ISO 10589的定义,用于建立与维持IS-IS邻接关系的Hello报文,不得小于路由器接口能够接收并处理的最大数据长度,如果小于,则进行填充。

NE40E/80E/NE5000E/CX600/ME60产品提供了用于设置接口发送Hello报文是否进行填充的功能。缺省情况下,上述产品发送Hello报文的规则如下:

  • P2P接口:P2P邻居建立之前,发送带有填充字段的标准Hello报文。P2P邻居建立之后,发送不带有填充字段的小型Hello报文。
  • 广播接口:发送带有填充字段的标准Hello报文。

LDP 的PMTU 协商

RFC3988定义了自动发现LDP LSP路径MTU的机制。LSR针对某个FEC,把所有下游设备通告的MTU和本机该FEC的出接口MTU做比较,计算出最小值通告给上游。LSP上不同节点,MTU取值不同:

  • 如果是Egress节点,MTU取值为65535。
  • 如果是倒数第2跳且收到一个隐式空标签,则设置LDP MTU为FEC的出接口MTU。
  • 其他情况,则比较FEC的出接口MTU和下游节点发给他的TLV中的MTU,取其中的较小值作为LDP MTU。如果收到的TLV没有指定MTU,则默认为65535。

LDP MTU通告方式为,把计算出来的MTU值放在Label Mapping消息的MTU TLV里,然后把Label Mapping消息发送给上游。

RSVP-TE 的PMTU 协商

RSVP-TE也支持MPLS MTU协商,用于自动发现TE LSP的PMTU。协商PMTU的过程如下:

  • 从TE隧道的Ingress节点发送Path消息,在Path消息中的Adspec对象携带MTU。该MTU取值为物理出接口下配置的接口MTU和MPLS MTU两者的较小值。
  • 隧道沿途各节点收到Path消息,将Adspec对象中的MTU值与本地隧道物理出接口下配置的接口MTU和MPLS MTU三者进行比较。如果本地的值小,则将Adspec对象中的MTU值改为本地的最小值。之后,将Path消息发送给下游。
  • 这样,Egress节点收到的Path消息中携带的MTU即为路径MTU最小值。Egress再通过Resv消息将协商好的MTU值带回Ingress节点。

L2VPN 的MTU 协商

L2VPN类型

MTU协商值配置

MTU协商值的取值规则

PWE3

方式1:通过mpls switch-l2vc命令行中指定mtu参数;

方式2:PW模板视图下配置mtu mtu-value命令。

生效次序:

通过命令行指定的MTU参数值;

PW模板的MTU配置值;

AC接口配置的接口MTU值;

如果以上3个参数都没配置,则MTU协商值缺省为1500字节。

Kompella方式 VLL

MPLS-L2VPN实例视图下配置mtu mtu-value命令

MPLS-L2VPN实例视图下配置的MTU参数值优先生效。

如果MPLS-L2VPN实例视图下没配MTU,则MTU协商值缺省为1500字节。

VPLS

VSI视图下配置mtu mtu-value命令。

VSI视图下配置的MTU参数值优先生效。

如果VSI视图下没配MTU,则MTU协商值缺省为1500字节。

常用接口的MTU默认值

接口类型 MTU默认值(字节) 取值范围(字节) 说明
Ethernet接口
Ethernet子接口
1500 46~1500

Ethernet接口/子接口的MTU值只影响三层流
量,不影响二层流量。

说明:
缺省情况下,Ethernet接口/子接口是三层接口,只转发三层流量。如果Ethernet接口/子接口配置了portswitch命令,则变为二层接口,只转发二层流量。

Ethernet-Trunk接口
Ethernet-Trunk子接口
1500 46~9600

Eth-Trunk接口/子接口的MTU值只影响三层流量,不影响二层流量。
修改Eth-Trunk接口/子接口MTU值时,请直接在对应的Eth-Trunk接口/子接口视图下修改,不要在成员口上修改。当成员接口加入Eth-Trunk时,Eth-Trunk的MTU值会自动同步到成员接口,当Eth-Trunk的MTU变更时,成员接口的MTU也会自动同步更新。

修改Eth-Trunk接口/子接口的MTU,请同时修改对端Eth-Trunk接口的MTU,确保两端设备的MTU匹配。否则,可能导致业务中断。
如果Eth-Trunk接口/子接口上同时运行IPv6,当设置的接口MTU小于1280字节时,会使IPv6在该接口上工作不正常。为避免发生此类错误,当Eth-Trunk接口/子接口上同时运行IPv6时,请设置接口MTU大于等于1280。

说明:
缺省情况下,Eth-Trunk接口/子接口是三层接口,只转发三层流量。如果Eth-Trunk接口/子接口配置了portswitch命令,则变为二层接口,只转发二层流量。

GE接口

GE子接口

1500 Type-C 单板:161~9600。
其他单板:46~9600
GE接口/子接口的MTU只影响三层流量,不影响二层流量。
说明
缺省情况下,GE接口/子接口是三层接口,只转发三层流量。如果GE接口/子接口配置portswitch命令,则变为二层接口,只转发二层流量。
POS接口 4470 46~9600 对于Type-C单板,建议配置MTU大于160字节。
POS接口MTU对于LPUF-20/21/10、BSUF-20/21/10和MSUF-20/21/100单板不生效,这些单板POS接口不对报文分片。
Tunnel接口 1500 46~9600 通常只作用于LDP over TE场景。
VLANIF接口 1500 46~9600 对于在子卡分片的单板,VLANIF接口的MTU值可能会影响二层流量。
对于母板和集成板分片的单板,VLANIF接口的MTU只影响三层IP流量。
Virtual-Ethernet接口 1500 960~1518 VE接口的MTU只影响三层流量,不影响二层流量。
缺省情况下,VE接口是三层接口,只转发三层流量。如果VE接口配置了portswitch命令,则变为二层接口,只转发二层流量。
Virtual-Template接口 1500 328~9600 此接口配置的MTU是在LCP阶段设备发送给PPP用户用来协商双方的MTU值,并非对应PPP用户的实际MTU值。

MPLS MTU 的设置

  • 请关注NE40E/80E/NE5000E/CX600/ME60产品上对MPLS MTU的分片机制。接口MPLS MTU只可能影响IP入MPLS时的流量转发,而且不同单板类型,处理方式不同。
  • 不建议将接口MPLS MTU值设置过小,否则容易导致因IP分片影响性能,严重时甚至出现丢包现象。
  • 如果将MPLS MTU配置比接口MTU大,MPLS MTU实际取值为接口MTU。
  • NNI端口的MTU值应该大于UNI端口的MTU值,用来保证可以满足UNI端口的所有标签的应用。
  • MPLS MTU的值不应该大于接口MTU的值。最好的方法就是通过更改接口MTU的值来增加MPLS MTU生效值,避免IP核心层设备不能支持更多的标签类型问题的出现。

MTU 问题处理通用思路

  • 首先分析数据转发路径。
  • 检查数据包传递的全路径上各设备的出接口MTU值,站点间传输设备的MTU值也需要检查。
  • 逐段ping大包测试。大包长度分别为大于、小于、等于接口MTU值。如果ping长度大于接口MTU时不通,小于等于接口MTU时能通,可初步认为是MTU问题。
  • 分析报文头格式,各类报文的格式可查阅相关的“速查表”。
  • 根据出问题的报文的最大长度修改MTU。在修改MTU值时,需要注意华为路由器不同单板的MTU分片机制,并注意不同厂商设备MTU值的定义。
  • 再次ping大包测试。

路由器硬件基础知识--MTU相关推荐

  1. 《SAP入门经典(第4版•修订版)》——3.2 SAP硬件基础知识

    本节书摘来自异步社区<SAP入门经典(第4版•修订版)>一书中的第3章,第3.2节,作者:[美]George Anderson著,更多章节内容可以访问云栖社区"异步社区" ...

  2. 路由器设置服务器用什么协议,路由器配置基础知识

    路由器配置基础知识 一般来说,可以用5种方式来设置路由器,下面跟YJBYS小编一起来学习一下吧! 一.简单介绍 1.Console口接终端或运行终端仿真软件的微机; 2.AUX口接MODEM,通过电话 ...

  3. Linux设备驱动开发详解【二】_设备驱动相关硬件基础知识

    本文简介 本文讲解底层驱动工程师必备的硬件基础,给出了嵌入式系统硬件原理及分析方法的全景视图.         2.1 节讲解微控制器.微处理器.数字信号处理器以及应用于特定领域的处理器各自的特点. ...

  4. 计算机硬件基础知识微盘,第1章 电脑硬件基础知识.pdf

    第1章 电脑硬件基础知识 企业级的 DIY与个人用户有所不同:它要求专业人员对硬件的了解更多,在 DIY过程中, 应该知晓每一种硬件的技术参数在实际工作中的应用价值:本章重点介绍电脑主机设备的主流 和 ...

  5. 嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>

    嵌入式硬件基础 1,存储器 1.1 概念 1.2,存储器结构模型 1.3,存储器性能指标 1.4,嵌入式存储器类型 1.4.1,只读存储器 1.4.2,随机存储器 1.4.3,双端口RAM 1.4.4 ...

  6. 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(一)计算机系统构成及硬件基础知识...

    全国计算机技术与软件专业技术资格(水平)考试 软件评测师--考试内容总结       By林雨辰2014.11.08 1.计算机系统构成及硬件基础知识 1.1计算机系统的构成 1.1.1设计电子数字计 ...

  7. 硬件基础知识---如何设计一个三极管放大电路

    硬件基础知识---如何设计一个三极管放大电路 设计步骤 1) 分析设计要求 电压增益可以用于计算电压放大倍数:最大输出电压可以用于设置电源电压 输出功率可以用于计算发射极电流:在选择晶体管时需要注意频 ...

  8. 计算机软件硬件基础知识,计算机软硬件基础知识

    计算机软硬件基础知识 ▲电脑硬件基础知识 ★1.了解电脑的基本组成 一般我们看到的电脑都是由:主机(主要部分).输出设备(显示器).输入设备(键盘和鼠标)三大件组成.而主机是 电脑的主体,在主机箱中有 ...

  9. 计算机硬件和软件的基础知识,计算机软件和硬件基础知识

    计算机软件使人们能够在日常活动中完成所需的工作.对计算机软件的更复杂定义是:软件是使计算机能够执行特定任务的程序,与系统的物理组件相反.系统的物理组件是我在上一篇文章中讨论的内容,即人们可以物理触摸的 ...

  10. 单片机——硬件基础知识

    单片机--硬件基础知识 宗旨:技术的学习是有限的,分享的精神是无限的. 1.单片机内部资源 STC89C52:8KFLASH.512字节RAM.32个IO口.3个定时器.1个UART.8个中断源 (1 ...

最新文章

  1. 多数大数据项目都以失败而告终的原因
  2. 第十一篇: Ajax Control Toolkit 控件包--下载与安装
  3. java多线程notify_Java多线程 wait notify
  4. 表单提交对chrome记住密码的影响
  5. r语言error in match.fun(fun) :_Go语言200行写区块链源代码分析
  6. 一个API接口的例子,包括单元测试
  7. proteus仿真micropython_基于micropython的滑动平均滤波器
  8. stm32单片机例程下载链接
  9. 【狂神css笔记】美化网页元素
  10. vue-admin-study1学习总结
  11. tomcat日志打印乱码
  12. oracle optimizer_index_cost_adj,OPTIMIZER_INDEX_COST_ADJ与成本计算
  13. dns服务器怎么优化,SmartDNS 高性能本地DNS服务器,优化网速
  14. 计算机键盘在线识别,电脑的外接键盘无法识别怎么办?
  15. 移动互联网时代的创业机会
  16. Python 将拼音转换成汉字
  17. “交通·未来”第5期:面向交通数据的多情景空间选址优化及强化学习实践
  18. 美国招聘巨头完成收购中华英才网
  19. Tableau Prep使用
  20. 剑指offer面试题(21-30)——java实现

热门文章

  1. python-skimage.io,filters,transform
  2. Kettle【实践 04】Java环境实现KJB和KTR脚本文件执行v9版本9.0.0.0-423相关依赖说明(云资源分享:依赖包+kjb+ktr+测试源码)
  3. 笔记———计算机网络原理(三)
  4. 工业机器人视觉实训平台
  5. 基于32feet.net对Broadcom(Widcomm)
  6. 1867. 最大数量高于平均水平的订单
  7. 火龙果(redpitaya)开发板常用接口C语言开发指南(一)——环境配置(持续更新中)
  8. C语言tolower和toupper的用法
  9. excel删除无尽空白行_史上最简单的Excel工资条制作方法,实用收藏!
  10. UE 在场景或UMG中播放视频