在MTU为1500,不分片的条件下,ping包长最大为1472B的理解

环境:
os:CentOS Linux 7

1. 背景

使用vmware创建了一个centos7的虚机,端口ens33的mtu值默认为1500,如图
在这里插入图片描述

使用命令ping <ip> -M do -s <packagesize> -c 5来验证不分片时最大的传输包长,有如下结果
在这里插入图片描述

  • -M do:表示ping包不分片
  • -s:指定icmp报文中数据部分的大小(单位:字节/B)
  • -c:指定发送ping包的个数

图上可以看出当-s 1472可以正常ping通,当-s 1473时显示message超过mtu限定值

今天就这个1472怎么来的,展开分析

2. MTU

最大传输单元MTU(Maximum Transmission Unit,MTU),是指网络能够传输的最大数据包大小,以字节为单位。MTU的大小决定了发送端一次能够发送报文的最大字节数。如果MTU超过了接收端所能够承受的最大值,或者是超过了发送路径上途经的某台设备所能够承受的最大值,就会造成报文分片甚至丢弃,加重网络传输的负担。如果太小,那实际传送的数据量就会过小,影响传输效率
在这里插入图片描述
如图,通常情况下MTU用以指示整个IP报文的最大长度(IP头+三层Payload),换句话说MTU是一个三层的定义。此外IP报文头固定20字节,所以当MTU为1500时,数据载荷可以封装1480字节(如果是发送ping包,这里的1480就是指ICMP报文的长度)

3. ICMP报文

Ping程序是最常见的用于检测IPv4和IPv6网络设备是否可达的调试手段,它使用ICMP的echo信息来确定。当ICMP报文的type字段为0时,代表Echo响应;当ICMP报文的type字段为8时,代表Echo请求。
在这里插入图片描述

  • Type:Type字段表明消息的类型,1B
  • Code:Code字段表示此消息类型细分的类型,1B
  • Checksum:表示ICMP报文的校验和,2B
  • Identifier:2B
  • Sequence number:2B
  • Optional data:数据部分,对应命令ping <ip> -M do -s <packagesize> -c 5-s的大小

所以当ICMP报文类型为0或8时,其固定的报文头长度为8B

4. wireshark抓包

下图是执行ping 172.16.16.1 -M do -s 1472 -c 5时的抓包结果
在这里插入图片描述

5. 总结

  • MTU默认值为1500,一般指IP报文长度为1500B;由于IP头默认20B,所以ICMP报文为1480B
  • ICMP报文头为8B,所以ICMP载荷为1472B,对应ping命令的-s参数大小
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田土豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值