wangbin2010jy 发表于 2017-6-7 12:54:24

求大神帮我理清下MTU的一些概念


大神们我现在以这么个图来举个栗子:D
A端的IP是192.168.2.252B端的地址为192.168.2.1 数据链路层是标准的以太网。l两端的MTU值都采用默认的值,用的系统是windows 现在用A端这个 ping -f -l 1472 192.168.2.1去ping B端的地址。出现的一些结果我有点迷惑
1、MTU分为 L2 MTU 与L3 MTU,那么在进行阈值管理的时候是以哪个为标准的?
2、MTU的最大传输单元值 (1500 byt)的限制是只是数据字段还是数据字段加首部字段
3、这里我以A端发送1472的数据到B端,按照数据通信的流转途径是不是,A端本身的网络层(L3 MTU阈值)就已经给规定好了?(A端自身对大于MTU值的数据进行分割,而不是一大段数据交给B段去分割,只有A段分割出的数据大于B段,B段才会再次分割)
4、我采用 ping -f -l 1472 192.168.2.1 貌似是按照L3 MTU来阈值规定的。这个1472+28=1500byt 。我了解了一下IP首部最小时20字节 1472+20=1492还没有达到1500byt啊?而且用ping -f -l 1473 192.168.2.1 1473的值就发现需要分割,不能发送出去 用 -f参数。这么这里的8字节是这么多出来的呢?
我特地抓了个包

5、L2 MTU是不是数据字段最大是1500,以太网V2标准首部加尾部是1518大小,那么以我这个例子A端从传输层的1472字节的数据到数据链路层生成的数据大小是不是 IP首部+1472=1500到了L2 帧首部+尾部+数据字段=1518大小啊?
希望大神按我5个问题回答下,谢谢谢,帮忙小弟纠错下。

abluesky 发表于 2017-6-7 12:54:25

MTU其实是很基础但是又比较烦的一个参数
需要你去查包头的大小 然后 计算出合理的值
通常在应用中是有一定规范的 以避免丢包等的问题
比如说设 system mtu 为1546 即可避免很多麻烦

MTU 1500 字节通常指的是 IP MTU
2层MTU是在IP MTU的外面进行2层封装 通常是 1518 或1522
在MPLS VPN的环境中 还会有 MPLS MTU 思科的推荐值是1524 也就是加上6个标签的大小
在GRE 等的VPN, PPPoE等各种环境中 也都会考虑包头的大小来计算合适MTU
比如在GRE VPN是会设成MTU 1400

4、我采用 ping -f -l 1472 192.168.2.1 貌似是按照L3 MTU来阈值规定的。这个1472+28=1500byt 。我了解了一下IP首部最小时20字节 1472+20=1492还没有达到1500byt啊?而且用ping -f -l 1473 192.168.2.1 1473的值就发现需要分割,不能发送出去 用 -f参数。这么这里的8字节是这么多出来的呢?

这8个字节是ping的 ICMP header
ping包 是这样的 1472 DATA + 8 ICMP header + 20 IP HEADER = 1500 IP MTU
外面在加上 18个字节的 Ethernet HeaderMTU 是1518 如果在vlan的环境下 会加上4个字节 也就是1522字节

wangbin2010jy 发表于 2017-6-14 08:19:00

谢谢IE大神,就喜欢这样的回答,透彻
页: [1]
查看完整版本: 求大神帮我理清下MTU的一些概念