为什么MTU普遍值是1500?
原文地址:https://developer.aliyun.com/article/222535
什么是MTU
Maximum Transmission Unit,缩写MTU,中文名是:最大传输单元。
这是哪一层网络的概念?
从下面这个表格中可以看到,在7层网络协议中,MTU是数据链路层的概念。MTU限制的是数据链路层的payload,也就是上层协议的大小,例如IP,ICMP等。
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 |
MTU有什么用?
举一个最简单的场景,你在家用自己的笔记本上网,用的是路由器,路由器连接电信网络,然后访问了www.baidu.com
,从你的笔记本出发的一个以太网数据帧总共经过了以下路径:
笔记本 -> 路由器 -> 电信机房 -> 服务器
其中,每个节点都有一个MTU值,如下:
1500 1500 1500
笔记本 -> 路由器 -> 电信机房 -> 服务器
假设现在我把笔记本的MTU最大值设置成了1700,然后发送了一个超大的ip数据包(2000),这时候在以外网传输的时候会被拆成2个包,一个1700,一个300,然后加上头信息进行传输。
1700 1500 1500
笔记本 -> 路由器 -> 电信机房 -> 服务器
路由器接收到了一个1700的帧,发现大于自己设置的最大值:1500,如果IP包DF标志位为1,也就是不允许分包,那么路由器直接就把这个包丢弃了,根本就不会到达电信机房,也就到不了服务器了,所以,到这里我们就会发现,MTU其实就是在每一个节点的管控值,只要是大于这个值的数据帧,要么选择分片,要么直接丢弃。
为什么是1500?
其实一个标准的以太网数据帧大小是:1518
,头信息有14字节,尾部校验和FCS占了4字节,所以真正留给上层协议传输数据的大小就是:1518 - 14 - 4 = 1500,那么,1518这个值又是从哪里来的呢?
假设取一个更大的值
假设MTU值和IP数据包大小一致,一个IP数据包的大小是:65535,那么加上以太网帧头和为,一个以太网帧的大小就是:65535 + 14 + 4 = 65553
,看起来似乎很完美,发送方也不需要拆包,接收方也不需要重组。
那么假设我们现在的带宽是:100Mbps
,因为以太网帧是传输中的最小可识别单元,再往下就是0101所对应的光信号了,所以我们的一条带宽同时只能发送一个以太网帧。如果同时发送多个,那么对端就无法重组成一个以太网帧了,在100Mbps
的带宽中(假设中间没有损耗),我们计算一下发送这一帧需要的时间:
( 65553 * 8 ) / ( 100 * 1024 * 1024 ) ≈ 0.005(s)
在100M网络下传输一帧就需要5ms,也就是说这5ms其他进程发送不了任何数据。如果是早先的电话拨号,网速只有2M的情况下:
( 65553 * 8 ) / ( 2 * 1024 * 1024 ) ≈ 0.100(s)
100ms,这简直是噩梦。其实这就像红绿灯,时间要设置合理,交替通行,不然同一个方向如果一直是绿灯,那么另一个方向就要堵成翔了。
既然大了不行,那设置小一点可以么?
假设MTU值设置为100,那么单个帧传输的时间,在2Mbps带宽下需要:
( 100 * 8 ) / ( 2 * 1024 * 1024 ) * 1000 ≈ 5(ms)
时间上已经能接受了,问题在于,不管MTU设置为多少,以太网头帧尾大小是固定的,都是14 + 4,所以在MTU为100的时候,一个以太网帧的传输效率为:
( 100 - 14 - 4 ) / 100 = 82%
写成公式就是:( T - 14 - 4 ) / T
,当T趋于无穷大的时候,效率接近100%
,也就是MTU的值越大,传输效率最高,但是基于上一点传输时间的问题,来个折中的选择吧,既然头加尾是18,那就凑个整来个1500,总大小就是1518,传输效率:
1500 / 1518 = 98.8%
100Mbps传输时间:
( 1518 * 8 ) / ( 100 * 1024 * 1024 ) * 1000 = 0.11(ms)
2Mbps传输时间:
( 1518 * 8 ) / ( 2 * 1024 * 1024 ) * 1000 = 5.79(ms)
总体上时间都还能接受
最小值被限制在64
为什么是64呢?
这个其实和以太网帧在半双工下的碰撞有关,感兴趣的同学可以自行去搜索。
在我玩游戏的时候,为什么把MTU改成1480就不卡了?
路由器默认值大多都是1500,理论上是没有问题的,那为什么我玩游戏的时候改成1480才能流畅呢?原因在于当时我使用的是ADSL上网的方式,ADSL使用的PPPoE协议。
PPPoE
PPPoE协议介于以太网和IP之间,协议分为两部分,PPP( Point to Point Protocol )和oE( over Ethernet ),也就是以太网上的PPP协议,而PPPoE协议头信息为:
| VER(4bit) | TYPE(4bit) | CODE(8bit) | SESSION-ID(16bit) | LENGTH(16bit) |
这里总共是48位,也就是6个字节,那么另外2个字节是什么呢?答案是PPP协议的ID号,占用两个字节,所以在PPPoE环境下,最佳MTU值应该是:1500 - 6 - 2 = 1492。
我的上网方式
当时我的上网路径如下:
PC -> 路由器 -> 电信
我在路由器进行拨号,然后PC连接路由器进行上网。
最根本原因
问题就出在路由器拨号,如果是PC拨号,那么PC会进行PPPoE的封装,会按照MTU:1492来进行以太网帧的封装,即使通过路由器,路由器这时候也只是转发而已,不会进行拆包。
而当用路由器拨号时,PC并不知道路由器的通信方式,会以网卡的设置,默认1500的MTU来进行以太网帧的封装,到达路由器时,由于路由器需要进行PPPoE协议的封装,加上8字节的头信息,这样一来,就必须进行拆包,路由器把这一帧的内容拆成两帧发送,一帧是1492,一帧是8,然后分别加上PPPoE的头进行发送。
平时玩游戏不卡,是因为数据量路由器还处理得过来,而当进行群怪AOE的时候,由于短时间数据量过大,路由器处理不过来,就会发生丢包卡顿的情况,也就掉线了。
帖子里面提到的1480,猜测可能是尽量设小一点,避免二次拨号带来的又一次PPPoE的封装,因为时间久远,没办法回到当时的场景再去抓包了。
结论
1518这个值是考虑到传输效率以及传输时间而折中选择的一个值,并且由于目前网络链路中的节点太多,其中某个节点的MTU值如果和别的节点不一样,就很容易带来拆包重组的问题,甚至会导致无法发送。
为什么MTU普遍值是1500?相关推荐
- MTU 取值1500
假设网速100Mbps即每秒100M(100*1024*1024)比特位,注意不是字节是比特位,1字节=8比特位 那么MTU为1500(字节)传输所需要的时间为:(公式:总比特位/每秒比特位 *100 ...
- 在MTU为1500,不分片的条件下,ping包长最大为1472B的理解
环境: os:CentOS Linux 7 1. 背景 使用vmware创建了一个centos7的虚机,端口ens33的mtu值默认为1500,如图 使用命令ping <ip> -M do ...
- 33 | 关于 Linux 网络,你必须知道这些(上)
前几节,我们一起学习了文件系统和磁盘 I/O 的工作原理,以及相应的性能分析和优化方法.接下来,我们将进入下一个重要模块-- Linux 的网络子系统. 由于网络处理的流程最复杂,跟我们前面讲到的进程 ...
- SRT协议在电视直播中的应用
本文来自安徽广播电视台 直播技术工程师 张博力在LiveVideoStackCon 2020 线上峰会的演讲,详细介绍了SRT协议在信号传输.远程制作等方面的应用,以及实际工作中遇到的相关技术问题. ...
- linux 丢包排查思路简述(tcp+rdma)
linux 丢包排查思路简述 概述 网络包接收流程 网络包发送流程 丢包排查的思路 tcp排查方法 rdma排查方法 网络工具汇总 参考链接 概述 我们首先以tcp网络为例,谈谈linux系统如何收发 ...
- 计算机网络:P4.3-网络层(下)
本系列文章为湖南科技大学高军老师的计算机网络微课堂学习笔记,前面的系列文章链接如下: 计算机网络:P1-概述 计算机网络:P2-物理层 计算机网络:P3.1-数据链路层(上) 计算机网络:P3.2-数 ...
- deepin QQ/TIM显示不了图片的解决方法
腾讯貌似从19年10月底启用了ipv6技术,接收图片和显示头像需要连接到ipv6地址,然而某些地区运营商的ipv6服务不稳定,这就导致在deepin上QQ和TIM加载不了图片和头像. 下面提供三种方法 ...
- 从零开始的计网学习——网络层(计算机网络重点!)
在学习协议时要记得协议的英语缩写,在各种场合用的基本都是英语缩写,不会用中文全称! 文章目录 4.1 网络层概述 4.2 网络层提供的两种服务 面向连接的虚电路服务 无连接的数据报服务 4.3 IPv ...
- 网络工程师必懂的网络基础
网络工程师必懂的网络基础 目录 1 ip地址 1.1 ip 地址的作用?ip 地址分类? 1.2. 子网掩码的作用?默认 A B C 类子网掩码? 1.3. 网关的作用? 1.4. 公有地址与私有地址 ...
最新文章
- Active Directory管理之十一:升级Active Directory(上)
- ASM_PREFERRED_READ_FAILURE_GROUPS
- 为什么会有这么多python?其实python并不是编程语言!
- android 布局设置背景的透明度
- while循环打印*菱形
- ​分布式数据库技术基础:数据分布介绍
- 金明的预算方案(洛谷-P1064)
- 放回采样最终不同样本数量
- oracle+solaris+密码,Oracle Solaris 10回滚补丁文件密码哈希泄露漏洞
- 微软服务器离线补丁工具包,wsus offline update
- 高斯公式,斯克托斯公式
- 14张图+年终秀完整版视频:给错过的和想温故知新的你
- python基础教程十进制_Python基础教程(四)
- 如何通过注册表修改默认程序
- 一周信创舆情观察(11.15~11.21)
- 卷积神经网络通道剪枝算法小结
- [OfficeExcel] Word+Excel邮件合并 生成多个文档
- Linux学习 高级网络配置
- LB10S-ASEMI整流桥LB10S
- 单词记忆分类系统化--000
热门文章
- 《赢在中国》vs《梦想中国》vs自考
- 次世代游戏建模师工作怎么样?美术基础要过硬吗?小白入门前须知
- HTML表格table和列表ul、ol、dl标签
- 存储NAB 2019: Infortrend赢得Video Edge颁发的Future最佳表现奖
- mysql修改字段的默认值
- 键盘侠Linux干货| 使用Nginx搭建一个私人网盘
- 名额不多!2022年安徽省商标品牌示范企业申报时间条件及奖励补助
- ubuntu bond
- Mysql价格降低20%应该怎么写_mysql优化建议20条
- 【十】【vlc-anroid】视频图像display展示层模块源码分析-SurfaceView交互渲染