数据链路层的MTU
- [1. 什么是MTU](#1. 什么是MTU)
-
- [1.2 MTU 的组成](#1.2 MTU 的组成)
- [2. 为什么需要 MTU](#2. 为什么需要 MTU)
-
- [2.1 常见的 MTU 的值为1500,为什么是1500](#2.1 常见的 MTU 的值为1500,为什么是1500)
- [3. MTU 分片](#3. MTU 分片)
- [4. 遇到的问题](#4. 遇到的问题)
1. 什么是MTU
MTU,Maximum Transmission Unit,最大传输单元 ,是指网络能够在数据链路层传输的最大数据包的大小,数据包的单位为字节(Byte)。MTU 的大小决定了数据包在传输过程中的最大字节数:
- 如果数据包的大小超过了MTU,将会被分片,甚至被丢弃;
- 如果数据包的大小太小,将会影响数据的传输效率。
1.2 MTU 的组成
MTU = MSS + IP +TCP/UDP
MTU 属于数据链路层的概念;
MSS:Maximum Segment Size ,最大报文段长度;是纯业务数据;属于传输层的概念(不包含TCP/DUP、IP 头)。
IP:IPv4 的大小一般为 20 Byte,IPv6 的大小一般为 40 Byte;
TCP/UDP:TCP 的大小为 20 Byte,UDP 的大小为 8 Byte。
| OSI 模型 | 功能 | 协议 |
|---|---|---|
| 应用层 | 面向用户/业务程序提供网络服务 | SIP、SDP、RTP/RTCP、HTTP、DNS、XCAP |
| 表示层 | 数据格式转换,加/解密,编码 | NA |
| 会话层 | 建立、管理、断开通信会话 | NA |
| 传输层 | 端到端,区分应用端口,可靠性/流量控制 | TCP、UDP、SCTP( IMS 核心网 SIP 信令使用) |
| 网络层 | 跨网段路由寻址,IP 分片,IP 数据包(分片、重组) | IP、ICMP、IGMP |
| 数据链路层 | 相邻节点之间传输数据帧,检错,MAC 寻址,把比特封装成数据帧 | NA |
| 物理层 | 传输比特流,0/1 电信号,射频信号 | NA |
Tips:应用层、表示层、会话层、传输层都是以报文形式传输数据;网络层以数据包的形式传输数据;数据链路层以数据帧的形式传输数据;物理层则传输 0/1 比特流。
2. 为什么需要 MTU
以太网最初对报文的长度没有限制,网络层最大可接收65535字节,但以太网对于长报文不能可靠传输,且报文太大,出错概率也就越高,丢失的报文太大,将丢失大量数据,重传也将会占用大量网络资源;若报文太小,则一次能传输的数据量很小,也将奖励网络资源的利用率。限制 MTU 的大小后,可以高效利用网络资源。
2.1 常见的 MTU 的值为1500,为什么是1500
早期的以太网使用共享链路的工作方式,为了保证CSMA/CO(载波多路复用/冲突检测)机制,所以规定了以太帧长度最小为64 Byte,最大为1518 Byte,是为了防止过长的帧传输时间太长而占用共享链路太长时间导致其他业务阻塞。以太网最大数据帧的大小为1518 Byte,去掉帧头14 Byte和帧尾4 Byte CRC 校验部分,剩下最大值为1500 Byte,即默认 MTU 值为1500。
3. MTU 分片
前文中提到,如果传输的数据包超过了 MTU 的值,将会分片甚至丢弃处理。丢弃很容易理解,分片就如下图所示:

4. 遇到的问题
某运营商需求,要将每一个支持的 APN 的 MTU 的值都设置为指定值(非1500)。
Tips: IPv4 的头和 IPv6 的头的大小是不一样的,所以可以针对 IPv4 和 IPv6 单独配置对应的MTU。
因为每一个 APN 都会建立一条数据连接,所以 UE 针对每一个 APN 都有对应的一个 MTU 值;
- UE 侧如果没有针对某一个 APN 有特定配置,一般默认 MTU 的值为1500;
- 网络侧如果在响应 UE 的 PDN 请求时,返回的Active Default EPS Bearer Contex Request 中 PCO IE 中,指定了IPv4 Link MTU,或在ICMPv6 RA(Router Advertisement,路由器通告)中规定了 IPv6 的 MTU,UE 一般会优先使用网络指定的 MTU 值。
- 如果网络侧没有配置 MTU,则使用 UE 配置对应 APN 的 MTU。