关于MTU的合理解释

关于MTU的合理解释

dave的笔记文档:长期涉及底层网络数据的捕获,时常遇到切片数据包,所以有了这篇blog。

Maximum Transmission Unit,缩写MTU,中文名是:最大传输单元。 MTU限制的是数据链路层的payload,也就是上层协议的大小,例如IP,ICMP等。

先放结论

1518这个值是考虑到传输效率以及传输时间而折中选择的一个值并且由于目前网络链路中的节点
太多其中某个节点的MTU值如果和别的节点不一样就很容易带来拆包重组的问题甚至会导致无
法发送

其实一个标准的以太网数据帧大小是:1518,头信息有14字节,尾部校验和FCS占了4字节,所以真正留给上层协议传输数据的大小就是:1518 - 14 - 4 = 1500

一个IP数据包的大小是:65535 一个标准的以太网数据帧大小是:1518

MTU最小值被限制在64
为什么是64呢

这个其实和以太网帧在半双工下的碰撞有关

最早的以太网工作方式载波多路复用/冲突检测CSMA/CD),因为网络是共享的即任何一个节点
发送数据之前先要侦听线路上是否有数据在传输如果有需要等待如果线路可用才可以发送

假设A发出第一个bit位到达B而B也正在传输第一个bit位于是产生冲突冲突信号得让A在完
成最后一个bit位之前到达A这个一来一回的时间间隙slot time是57.6μs

在10Mbps的网络中在57.6μs的时间内能够传输576个bit所以要求以太网帧最小长度为
576个bits==从而让最极端的碰撞都能够被检测到==这个576bit换算一下就是72个字节
去掉8个字节的前导符和帧开始符所以以太网帧的最小长度为64字节
OSI中的层 功能 TCP/IP协议族
应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层 数据格式化,代码转换,数据加密 没有协议
会话层 解除或建立与别的接点的联系 没有协议
传输层 提供端对端的接口 TCP,UDP
网络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2

Windows 查看/设置 MTU

查看MTU

cmd命令提示符 ping -l 1472 -f www.baidu.com

请求将一个不允许分割的 1472 字节的数据包发送出去。

示例

C:\Windows\system32>ping -l 1472 -f www.baidu.com

正在 Ping www.a.shifen.com [39.156.66.18] 具有 1472 字节的数据:
来自 192.168.1.1 的回复: 需要拆分数据包但是设置 DF
需要拆分数据包但是设置 DF
需要拆分数据包但是设置 DF
需要拆分数据包但是设置 DF

39.156.66.18  Ping 统计信息:
    数据包: 已发送 = 4已接收 = 1丢失 = 3 (75% 丢失)

C:\Windows\system32>ping -l 1450 -f www.baidu.com

正在 Ping www.a.shifen.com [39.156.66.18] 具有 1450 字节的数据:
来自 39.156.66.18 的回复: 字节=1450 时间=43ms TTL=51
来自 39.156.66.18 的回复: 字节=1450 时间=44ms TTL=51
来自 39.156.66.18 的回复: 字节=1450 时间=44ms TTL=51
来自 39.156.66.18 的回复: 字节=1450 时间=43ms TTL=51

39.156.66.18  Ping 统计信息:
    数据包: 已发送 = 4已接收 = 4丢失 = 0 (0% 丢失)
往返行程的估计时间(以毫秒为单位):
    最短 = 43ms最长 = 44ms平均 = 43ms

上述例子得到本机MTU介于1450-1472

设置MTU