首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Ping报文理解mtu拆包依据

Ping报文理解mtu拆包依据

作者头像
mingjie
发布2022-05-12 09:46:10
发布2022-05-12 09:46:10
1.7K0
举报

ping报文理解mtu拆包依据

速查:

  • 不是ICMP的话从IP头算起(包括IP头20字节)后面的长度等于ip header中的length,也就是拆包依据
  • 是ICMP包的话IP+ICMP=20+ping -s n=20+n > MTU1500产生拆包,也就是说-s 1480以上就会拆
代码语言:javascript
复制
如果拆包了第二个包的IP标志位Flags中会看到  Fragment offset: xxx
如果拆包了第一个包的IP标志位Flags中会看到  More fragments: Set
如果强制客户端不允许拆包会看到            Don't fragment: Set

**拆包大小一般是1500字节:
  这个1500是只得IP头+ICMP报文的大小,所以ICMP报文超过1480就会拆包
  **不是ICMP的话从IP头算起(包括IP头20字节)后面的长度等于ip header中的length,也就是拆包依据

1 ICMP测试

源端机器:192.168.10.45

目标机器:192.168.10.46

三次测试两边抓包

  1. 默认大小:ping -c 3 192.168.10.46
  2. 1500允许拆包:ping -c 3 -s 1500 192.168.10.46
  3. 1500不允许拆包:ping -c 3 -s 1500 -M do 192.168.10.46

1.1 默认大小

注意这里 PING 192.168.10.46 (192.168.10.46) 56(84) bytes of data.

其中的84指的是ICMP报文内容+ 头=64+20=84

代码语言:javascript
复制
# 45上抓包 单网卡eth0
tcpdump -i eth0 -s 0 -w p100c.pcap host 192.168.10.46
# 46上抓包 单网卡eth0
# tcpdump -i eth0 -s 0 -w p100s.pcap host 192.168.10.45

# 45上ping
ping -c 3 192.168.10.46

PING 192.168.10.46 (192.168.10.46) 56(84) bytes of data.
64 bytes from 192.168.10.46: icmp_seq=1 ttl=64 time=0.249 ms
64 bytes from 192.168.10.46: icmp_seq=2 ttl=64 time=0.157 ms
64 bytes from 192.168.10.46: icmp_seq=3 ttl=64 time=0.165 ms

--- 192.168.10.46 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.157/0.190/0.249/0.043 ms

client端分析

IP头站20字节,注意这个Total Length是IP头+ICMP报文的长度,总长度还要加上前面

所以ping默认的64字节指的是ICMP实际报文长度64字节

1.2 1500允许拆包

PING 192.168.10.46 (192.168.10.46) 1500(1528) bytes of data.

实际1528=IP报文头+1500对齐后=20+1508=1528

代码语言:javascript
复制
# 45上抓包 单网卡eth0
tcpdump -i eth0 -s 0 -w p1500c.pcap host 192.168.10.46

ping -c 3 -s 1500 192.168.10.46
PING 192.168.10.46 (192.168.10.46) 1500(1528) bytes of data.
1508 bytes from 192.168.10.46: icmp_seq=1 ttl=64 time=0.293 ms
1508 bytes from 192.168.10.46: icmp_seq=2 ttl=64 time=0.193 ms
1508 bytes from 192.168.10.46: icmp_seq=3 ttl=64 time=0.185 ms

--- 192.168.10.46 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.185/0.223/0.293/0.052 ms

client端分析第一个包

第二个包:拆包大小一般是1500字节,这个1500是只得IP头+ICMP报文的大小,所以ICMP报文超过1480就会拆包

2 ICMP与telnet的区别

代码语言:javascript
复制
# 45上抓包 单网卡eth0
tcpdump -i eth0 -s 0 -w telnetc.pcap host 192.168.10.46

# 45上telnet 46
telnet 192.168.10.46 22

icmp报文没有tcp部分,所以IP头中的长度只算了ip头20+icmp长度。

这里的报文要ip头+tcp+ssh三部分等于总长度73

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • ping报文理解mtu拆包依据
    • 1 ICMP测试
      • 1.1 默认大小
      • 1.2 1500允许拆包
    • 2 ICMP与telnet的区别
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档