什么是MTU
MTU(Maximum Transmission Unit,最大传输单元)是网络中能够传输的单个数据包的最大字节数。
如果MTU超过了发送/接收端所能接受的最大值,就会造成报文分片甚至丢弃,加重网络传输的负担。如果太小,那实际传送的数据量就会过小,影响传输效率。
MTU的大小取决于物理网络的类型和配置,通常在以太网中默认的MTU值为1500字节,这意味着一个数据包的最大传输大小为1500字节,超出这个限制的数据需要分片传输。
为什么需要MTU
网络传输的核心是传输信息,如何使得单次传输效率最高,是关键问题。
MTU的存在是为了保证网络传输的效率和稳定性。合理的MTU值可以帮助:
- 减少网络传输的开销:如果传输的每个数据包都非常小,传输会消耗大量的处理和网络资源,而较大的MTU可以一次性传输更多数据,从而减少不必要的网络负载。
- 提高传输速度:较大的MTU允许网络一次发送更多数据,从而减少发送端和接收端处理包头的开销,提升整体传输速度。
- 减少网络拥塞:当数据传输流畅时,使用合理的MTU可以减少分片带来的重复传输,降低重传风险,从而改善网络的可靠性和响应时间。
然而,MTU的设置需要权衡,如果MTU过大而网络设备不支持,会导致丢包或需要频繁的分片。
MTU是数据链路层的概念,指数据链路层对数据帧长度的限制。不同链路介质类型的网络有不同的默认MTU值,以下是一些常见网络|
链路介质类型 | 物理介质 | 传输方式 | 传输速率 | 信号调制 | 默认MTU(字节) | 适用场景 |
---|---|---|---|---|---|---|
以太网(Ethernet) | 双绞线、光纤 | 基带传输 | 10Mbps - 400Gbps | 曼彻斯特编码、PAM4 | 1500 | 局域网中的主要标准 |
Wi-Fi(无线局域网) | 无线电波 | 射频信号 | 54Mbps - 数千Mbps | OFDM、QAM | 2272 | 无线网络,受环境干扰影响较大 |
FDDI(光纤分布式数据接口) | 光纤、铜缆 | 光脉冲传输 | 100Mbps | 光信号调制 | 4352 | 高带宽、长距离局域网或城域网 |
PPP(点对点协议) | 电话线、DSL、光纤 | 基于串行链路传输 | 取决于链路类型,数十Mbps | FDM、其他调制方法 | 1492 | 点对点连接,如宽带和VPN |
ATM(异步传输模式) | 光纤、铜缆 | 固定53字节信元传输 | 几百Kbps - 数Gbps | TDM、信元交换 | 48(信元) | 低延迟需求场景,适合语音/视频 |
MPLS(多协议标签交换) | 光纤、高速以太网 | 标签转发 | 数Gbps | 依赖底层物理层 | 1500 | 企业骨干网,高速转发 |
VLAN(虚拟局域网) | 以太网(铜缆、光纤) | 虚拟化以太网链路 | 10Mbps - 400Gbps | 依赖底层以太网物理层 | 1500(或1504含VLAN标记) | 逻辑隔离局域网 |
Jumbo帧 | 高速以太网(铜缆、光纤) | 扩展以太网帧传输 | 通常千兆及以上速率 | 依赖底层以太网物理层 | 9000 - 9216 | 数据密集型应用,如数据中心或高性能计算 |
常见的MTU为什么是1500
在以太网中,1500字节的MTU被广泛应用,是以太网的标准传输单元大小。以太网最大的数据帧是1518字节,这样刨去帧头14字节和帧尾CRC校验部分4字节,那么剩下承载上层IP报文的地方最大就只有1500字节,这个值就是以太网的默认MTU值。
- 兼容性:早期的以太网使用共享链路的工作方式,为了保证CSMA/CD(载波多路复用/冲突检测)机制,所以规定了以太帧长度最小为64字节,最大为1518字节。最小64字节是为了保证最极端的冲突能被检测到,64字节是能被检测到的最小值;最大不超过1518字节是为了防止过长的帧传输时间过长而占用共享链路太长时间导致其他业务阻塞。所以规定以太网帧大小为64~1518字节,虽然技术不断发展,但协议一直没有更改。以太网在互联网中的广泛使用促成了1500字节MTU的普及,设定为1500字节能够在不同网络设备之间保证兼容性。
- 设备硬件限制:早期的网络硬件资源有限,1500字节的MTU在实现性能与稳定性之间取得了平衡。
- 传输效率:1500字节的MTU既足够大,可以传输有效数据,又不会过大以至于造成设备负担,是网络开销与性能之间的合理选择。
超过1500字节报文如何分片,由谁分片
以太网的默认MTU为1500字节,这限制了IP层的发送能力。当需要发送的IP数据包小于或等于1500字节时,可以直接发送一个IP包;而对于超过1500字节的数据,则需要进行分片处理。以发送一个2000字节的报文为例,首先IP头部占20字节,因此总报文长度为2020字节。由于其超过MTU,需进行分片。
第一片报文包含20字节的IP头和1480字节的数据载荷。第二片报文也复制20字节的IP头,携带剩余的520字节载荷。若最后一片报文不足46字节,则会进行填充。
在目的主机,所有分片将被重组。重组时,IP标志位中的MF字段用于判断是否为最后一个分片,而片偏移字段则帮助确定每个分片在原数据报中的位置。通过这些信息,可以准确无误地恢复原始报文。
Jumbo帧与MTU
Jumbo帧是指超出标准1500字节的以太网帧,通常可以达到9000字节以上。使用Jumbo帧的优势在于,它允许在数据密集型应用中传输更大的数据块,例如在数据中心、视频流传输和高性能计算中。Jumbo帧可以减少网络拥塞,提高吞吐量,但并非所有网络设备和路径都支持Jumbo帧。
在使用Jumbo帧时,需要确保网络中所有设备(如交换机、路由器、服务器)都支持相同的MTU,否则容易出现传输错误或丢包情况。此外,不同设备支持的Jumbo帧大小可能有所不同,因此网络配置时需要特别注意一致性。
TCP MSS与MTU
MSS(Maximum Segment Size,最大分段大小)是TCP层的概念,用于指定单次传输的最大数据段大小。MSS通常比MTU小,因为它不包括IP和TCP头的大小。例如,以太网的MTU是1500字节,而IP头通常为20字节,TCP头也为20字节,那么TCP的MSS大小会设置为1460字节(1500-20-20),以确保在不分片的情况下传输整个数据段。
MSS的正确设置可以提高传输效率,减少分片。TCP在建立连接时会协商MSS大小,确保双方使用的MSS一致,从而减少分片发生。
如何设置MTU
在不同的操作系统和设备上,可以手动设置MTU来优化网络性能。设置MTU的方法如下:
- 在Linux系统上
使用命令 ifconfig 或 ip link 来查看当前的MTU值,例如:
ip link show eth0
替换 eth0 为具体的网卡接口名。
通过以下命令调整MTU:
sudo ip link set dev eth0 mtu 1400
其中1400是新的MTU值,可以根据需要调整。
- 在Windows系统上
打开 命令提示符 并运行以下命令查看当前的MTU值:
netsh interface ipv4 show subinterfaces
使用以下命令设置新的MTU值:
netsh interface ipv4 set subinterface "Ethernet" mtu=1400 store=persistent
将 Ethernet 替换为实际的网络接口名,1400为需要的MTU值。
- 在路由器上
许多路由器支持通过其管理界面手动配置MTU值。可以登录到路由器的管理界面,在 网络设置 或 高级设置 中找到MTU配置选项,输入合适的MTU值并保存。
总结
MTU是网络传输的关键参数,它控制了单个数据包的最大大小。在网络配置中,合理设置MTU可以提升效率,减少传输延迟。而在数据密集型应用中,Jumbo帧和MSS的调整也有助于优化传输性能。在设置MTU时,需要根据网络环境和应用需求选择合适的值,并确保网络设备的一致性,以确保传输的顺畅和稳定。
参考:https://info.support.huawei.com/info-finder/encyclopedia/zh/MTU.html