wireshark实战之:MTU、MSS及计算方法

         MTU最大传输单元(Maximum Transmission Unit,MTU)是指以太网接口的数据链路层上所能通过的最大数据报大小(以字节为单位),它好比一条隧道的横截面的大小,限制了过往的物体的大小体积。数据链路层的MTU是个固定值为1500字节(不包含数据链路层报头),主要用来制约第三层网络层数据包的大小,一个IP数据包最大可以达到2^16字节,所以第三层收到大数据包时,要将数据包分片后再往下层传输,这就是IP分片原理。既然IP分片可以改变一个IP数据包的大小 ,那么IP分片怎么设置呢?这也是网上人们所谓的修改MTU值达到最佳网速的方法,而这里所说的修改“MTU”大小其实是IP分片的大小,并不是数据链路层MTU的大小,这点必须要注意分清,再次说明数据链路层MTU大小是固定的。因此IP分片(也可以称为第三层MTU)的大小依然受数据链路层MTU值1500制约,它的有效值范围为68~1500字节,后面会有说明及修改方法。

实验拓扑:


1、证明数据链路层MTU是固定不变的。如图R1接口E0/0的二层与三层MTU值默认是一样的。


1.1、现将路由器接口e0/0的第三层MTU改为1000,也就是分片的大小。

从修改的过程中就可以看出二层MTU无法更改,而三层MTU允许修改的范围在68~1500之间。

2、修改第三层MTU的影响。
2.1、对C1和C2网卡进行抓包,并在C1上ping 2.2.2.2 -l 3000 -n 1  即只ping一个大包。结果如下图

注:CI的IP为1.1.1.1,C2的IP为2.2.2.2。

    从图中可以看到C1到C2的ip分片都没有变化;而C2的回应包出现了变化,从C2刚出来时有3个IP分片,但到达C1却有5个IP分片,数据包传输过程被分片肯定发生在R1的e0/0接口上这没有疑问,但为什么C1发给C2的分片包没有被R1接口e0/0再二次分片?
   个人认为:一个IP包的最大可以达到2^16字节,而下层往上层数据包最大只能为1500字节,因此在路由机制中应该设定有下层往上层的数据包不能被分片,即不受第三层的MTU值影响,从而数据包直接被转发出去。这就是C1到C2的分片没有发生二次分片原因。C2回应C1的分片到达路由器R1接口E0/0时,此时的数据包属于上层往下层传输,第三层机制先检查第三层MTU值(分片大小),这个值已经要根据数据链路层MTU的大小范围设定的,即为有效值,而不像windows中通过注册表将三层MTU修改成5000,这种设定是无效的,所以当路由机制发现三层MTU(分片大小)有设定值后,就将C2发来且大于设定值的分片再次分片,这就是C1收到的回应包会出现5个分片的原因。备注:本地网卡的IP分片大小只受本地二层、三层MTU的制约,不受其他网卡的MTU影响。
    测试链路MTU大小方法:ping x.x.x.x -l xxx  -f   (其中f为禁止IP分片)



MSS

       TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,这就导致发送方与接收方的数据包的数量必须是1:1关系,也就是说TCP数据包在整个链路传输的过程中不能够在第三层被分片,如下图


可以看到TCP数据包默认在第三层设置为don't fragment:set,即禁止IP分片,如果是UDP那么将允许IP分片。
所以要想保证TCP数据包不能在第三层被分片,就必须在第四层TCP中就限制数据包的大小,术语叫MSS(Maximum Segment Size最大报文段长度),这个值是由TCP双方所在链路的最小MTU(由于第二层固定1500、第三层定义64~1500,由此直接以第三层MTU值为参考)决定。一个正常TCP传输如下图(为上面实验拓扑抓包图)


图中有几个数据计算公式:
1514=14+20+20+1460 其中14为二层帧头(DMAC目的地址MAC48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes,第一个20为IP包头长度,第二个20为TCP包头长度,1460为MSS的大小。
备注:
如果总长为1518=18+20+20+1460,那么18为二层帧头(DMAC目的地址MAC48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes(也叫做FCS),其余一样。

    知道计算MSS方法后,将上面的实验拓扑中路由器e0/0的三层MTU改为1000,所以必须从PC2上传文件到PC1才看效果,否则从pc1上传文件到PC2没有影响,原因看上面MTU生效条件。实验效果图如下
PC2



PC1

可以看到修改了链路中某处的三层MTU=1000后,TCP协议后MSS的大小变为了960=1000-20-20。


所以IP分片与TCP分段最主要的区别是IP分片仅受下层即数据链路层影响,不受整条链路的影响;而TCP分段以整条链路中最小MTU影响。









  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值