查看: 20112|回复: 12

[经验分享] 深入理解MTU/MRU

[复制链接]

32

主题

1264

帖子

3693

积分

高恪VIP内测组

Rank: 6Rank: 6

积分
3693

内测达人

发表于 2017-12-21 15:58:39 | 显示全部楼层 |阅读模式
高恪AK系列硬件AP隆重上市
本帖最后由 Matrix 于 2017-12-21 16:22 编辑

MTU(Maximum Transmission Unit,最大传输单元)。
MRU(Maximum Receive Unit,最大接收单元)。
MTU是以太网数据链路层概念,MRU是PPP链路数据链路层的概念.但是都是最大传输单元的意思
1.原理说明(这部分来自百度百科,也相当好理解)
因为协议数据单元的包头和包尾的长度是固定的,MTU越大,则一个协议数据单元的承载的有效数据就越长,通信效率也越高。MTU越大,传送相同的用户数据所需的数据包个数也越低。
MTU也不是越大越好,因为MTU越大, 传送一个数据包的延迟也越大;并且MTU越大,数据包中 bit位发生错误的概率也越大。
MTU越大,通信效率越高而传输延迟增大,所以要权衡通信效率和传输延迟选择合适的MTU。
以以太网传送IPv4报文为例。MTU表示的长度包含IP包头的长度,如果IP层以上的协议层发送的数据报文的长度超过了MTU,则在发送者的IP层将对数据报文进行分片,在接收者的IP层对接收到的分片进行重组。
这里举一个具体的例子说明IP包分片的原理。以太网的MTU值是1500 bytes,假设发送者的协议高层向IP层发送了长度为3008 bytes的数据报文,则该报文在添加20 bytes的IP包头后IP包的总长度是 3028 bytes,因为3028 > 1500,所以该数据报文将被分片,分片过程如下:
1. 首先计算最大的IP包中IP净荷的长度 =MTU-IP包头长度=1500-20= 1480 bytes。
2. 然后把3028 bytes按照1480 bytes的长度分片,将要分为3片,3028= 1480+1480+68。
3. 最后发送者将为3个分片分别添加IP包头,组成3个IP包后再发送,3个IP包的长度分别为1500 bytes、1500 bytes和 88 bytes。

在网络通讯中,需要尽量避免发生分片和重组,因为分片重组对网络性能影响较大。数据包发送时选择合适的MTU大小对提高通讯性能很有必要。MTU大小的选择有协议协商方式,通过全路径的MTU发现机制,找到整条路径的最小MTU(也就是路径MTU),然后报文发送式小于等于路径MTU,这就避免了数据传输过程中产生分片,从而提高数据转发性能。MTU的协议发现机制由于安全等方面的原因,并不能总是生效,这时候就需要根据网络的特性选择合理的MTU。如果在报文传送过程中分片是不可避免的,那么要想办法让重组尽量在终端进行,避免在转发路径中进行。
2.找出当前网络最佳MTU(以下以DHCP光纤为例)
运行cmd,执行以下PING命令(-l 是为了不拆分数据包)
ping -l 14xx -f www.qq.com   (14xx是要测试的包大小)
可以用半分的方法找到最佳值。
例如测试1460-1500区间。
1.先ping -l 1500  -f www.qq.com  提示:需要拆分数据包但是设置DF
2.再次ping -l 1460  -f www.qq.com ,这是发现ping有正常的ECHO。
3.然后测试区间递进为(1500-1460)/2=20,也就是测试ping -l 1480,发现依旧是需要拆分数据包但是设置DF。
4.说明值在1460-1480之间,然后我们可以测试ping -l 1470 -f www.qq.com,发现正常ECHO,说明数值在1470-1480之间。
然后同样道理,测试1475,发现需要拆分。说明数值在1470-1475之间。然后测试1473,发现需要拆分。
说明在1470-1473之间,接下来可以分别测试1470 1471 1472。发现最大不拆分的MTU值为1472。
TIM截图20171221154250.png
这个MTU就是最佳MTU?其实不是,也可以说是。为什么这么说?
说是的原因是,往往这个值就是最佳的MTU,只需要加上28字节的开销,也就是1472+28=1500。而PPPOE往往为1492。
但是有些情况下,这个只是能不拆分数据包最大通过的MTU,而不是网络性能最佳时候的MTU。
这时候需要在这个数值附近不断尝试,如果找到时延比这个更低的MTU,那个才是最佳的MTU。
3.深入理解MTU/MRU。(注:MSS(Max Segment Size),最大传输段,就是报文段的最大长度)
1      以太网最小包大小 = 512bit = 64 Byte
2        以太网最大包大小 = 1518 Byte
3        所以以太网IP的MTU = 1518 - 18 ( 6 SRCMAC+ 6 DSTMAC+ 2 TYPE+ 4 CRC) = 1500 B
4        所以TCP的MSS = 1500 - 40 ( 20 IP包头 + 20 TCP包头) = 1460 B
5        所以UDP协议的 MTU/MRU = 1500 - 28 ( 20 包头 + 8 UDP包头 ) = 1472 B
6        所以PPPoE MTU/MRU = 1500 - 8 ( 6 PPPoE会话开销 + 2 PPP包头 ) = 1492 B
7        所以经过PPPoE MSS的TCP MTU = 1492 ( PPPoE MTU/MRU ) - 40 ( 20 IP包头 + 20 TCP包头) = 1452
8        所以 PPTP MTU/MRU = 1500 - 56 ( 20 IP包头 + 20 TCP包头 + 12 GRE包头 + 4 PPP包头 ) = 1444 B
9        所以经过 PPTP MSS的TCP MTU = 1444 ( PPTP MTU/MRU ) - 40 ( 20 IP包头 + 20 TCP包头) = 1404
10        所以 L2TP MTU/MRU = 1500 - 40 ( 20 IP包头 +8 UDP包头 + 8 L2TP包头 + 4 PPP包头 ) = 1460 B
11        所以 TCP 经过 L2TP MSS = 1460 ( L2TP MTU/MRU ) - 40 ( 20 IP包头 + 20 TCP包头) = 1420 B
12        所以 PPTP 经过 PPPoE MTU/MRU = 1492 ( PPPoE MTU/MRU ) - 56 ( 20 IP包头 + 20 TCP包头 + 12 GRE包头 + 4 PPP包头 ) = 1436 B
13        所以 PPTP 经过 PPTP MTU/MRU = 1444 ( PPTP MTU/MRU ) - 56 ( 20 IP包头 + 20 TCP包头 + 12 GRE包头 + 4 PPP包头 ) = 1388 B
14        所以 PPTP 经过 L2TP MTU/MRU = 1460 ( L2TP MTU/MRU ) - 56 ( 20 IP包头 + 20 TCP包头 + 12 GRE包头 + 4 PPP包头 ) = 1404 B
15        所以 L2TP 经过 PPPoE MTU/MRU = 1492 ( PPPoE MTU/MRU ) - 40 ( 20 IP包头 +8 UDP包头 + 8 L2TP包头 + 4 PPP包头 ) = 1452 B
16        所以 L2TP 经过 PPTP MTU/MRU = 1444 ( PPTP MTU/MRU ) - 40 ( 20 IP包头 +8 UDP包头 + 8 L2TP包头 + 4 PPP包头 ) = 1404 B
17        所以 L2TP 经过 L2TP MTU/MRU = 1460 ( L2TP MTU/MRU ) - 40 ( 20 IP包头 +8 UDP包头 + 8 L2TP包头 + 4 PPP包头 ) = 1420 B


故而,在PPPOE线路上的准确MTU值是 1436,L2TP的准确MTU是1452。
如果你用 ADSL 上网,然后用 PPTP FQ,那么,你实际上是 PPP 协议跑在 TCP 协议上再跑在 IP 协议上再跑在 PPP 协议上再跑在 IP 协议上再跑在以太网上。1518 字节的以太网最大包大小,减来减去,就剩下 1436。同理L2TP跑在PPP链路上,减来减去也就只剩1452B了,如果网络异常,可能是把数据包全丢掉了。
如果明白了以上的表,那么考虑你用PPTP连公司的VPN,公司又PPPOE拨号(ADSL账号),然后你再 PPTP 來FQ,那么,你的 MTU 只能设为 1518-18-8-56-56=1380 字节。






回复

使用道具 举报

372

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
38715
发表于 2017-12-21 16:11:55 | 显示全部楼层
高恪AK系列硬件AP隆重上市
非常专业的科普。  赞。
回复 支持 反对

使用道具 举报

23

主题

847

帖子

2789

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2789

内测达人

发表于 2017-12-21 21:13:31 | 显示全部楼层
非常的专业,版主发帖,必须支持!!!
回复 支持 反对

使用道具 举报

21

主题

304

帖子

1414

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1414
发表于 2017-12-21 21:32:55 | 显示全部楼层
版主发帖,必须支持!!!
回复 支持 反对

使用道具 举报

101

主题

4332

帖子

4912

积分

高恪技术支持

Rank: 4

积分
4912

活跃会员热心达人推广达人内测达人方案之王突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2017-12-21 22:01:53 | 显示全部楼层
厉害厉害 ,非常专业。
回复 支持 反对

使用道具 举报

72

主题

681

帖子

918

积分

高恪VIP内测组

Rank: 6Rank: 6

积分
918

内测达人

发表于 2017-12-22 11:02:46 | 显示全部楼层
请教,一直有一个想法,如果无线限速,上下行设定值,按1492的比例来设置,会比较科学吗?
回复 支持 反对

使用道具 举报

32

主题

1264

帖子

3693

积分

高恪VIP内测组

Rank: 6Rank: 6

积分
3693

内测达人

 楼主| 发表于 2017-12-22 15:57:52 | 显示全部楼层
gaoke 发表于 2017-12-22 11:02
请教,一直有一个想法,如果无线限速,上下行设定值,按1492的比例来设置,会比较科学吗?  ...

?无法理解你的意思。无线的话,如果是无线局域网,默认就是1500(也是以太网的IP)
回复 支持 反对

使用道具 举报

2

主题

24

帖子

18

积分

初级玩家

Rank: 1

积分
18
发表于 2019-6-18 11:51:38 | 显示全部楼层
想请教下,关于华硕padavan固件,wan自动获取ip时,他会隐藏掉MTU MRU选项,用户无法手动调节。请问他是用缺省参数还是自动找到最佳数值~
回复 支持 反对

使用道具 举报

5

主题

102

帖子

63

积分

中级玩家

Rank: 2

积分
63
发表于 2019-9-17 21:19:00 | 显示全部楼层
厉害!立马修改了MTU
回复 支持 反对

使用道具 举报

5

主题

102

帖子

63

积分

中级玩家

Rank: 2

积分
63
发表于 2019-9-28 00:11:17 | 显示全部楼层
nizxx 发表于 2019-9-17 21:19
厉害!立马修改了MTU

貌似网速稳定了些,不知道是不是心里作用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表