目录
1.抓取数据包
先用管理员权限打开WireShark应用,并在条件过滤栏输入“icmp”。打开cmd,输入:ping www.baidu.com。
这样我们在命令行中,得到如下的一个显示结果:
wireshark中显示如下的一个结果:
我们以35/36帧为例,来进行数据包的解析。比较这两帧的时间差,可以看到时间差为18.993ms,这个值跟cmd中显示的时间差19ms是可以对应起来的。
2.ping request数据包解析
我们按照TCP/IP四层模型自上而下的方式来分析ping request数据包,因为该数据就是从应用层开始,逐层添加报头来完成的数据包封包的。对端设备接收到后,又一层一层去掉报头,来获取里面的数据。这好像一个包包子和剥洋葱的过程,O(∩_∩)O哈哈~
2.1 ICMP
应用层是直接使用的icmp封包格式,如下图所示。可以看到整个数据包为40个字节。
icmp数据包的结构如下。
各字段的解释如下:
字段 |
解释 |
类型 |
占据一个字节,标识ICMP报文的类型。ICMP报文类型可以分为两大类,分别是取值在1~127之间的差错报文,另一类是取值大于128的信息报文 |
代码 |
占据一个字节,与类型字段一起共同标识ICMP报文的详细类型 |
校验和 |
是将整个ICMP数据包(包括数据部分)以16位为一个单位采用CRC校验,然后按位取反后的值 |
下面罗列一些常见的ICMP报文类型:
类型(十进制) |
解释 |
0 |
回显应答 |
3 |
目标不可达,代码字段值为0标识网络不可达,代码字段值为1标识主机不可达,代码字段值为2标识协议不可达 |
4 |
源点抑制,通知主机减少数据包流量 |
5 |
重定向或改变路由 |
8 |
回显请求 |
9 |
路由器公告 |
10 |
路由器请求 |
11 |
超时,代码字段值为0标识传输超时,代码字段值为1标识分段重组超时 |
17 |
地址子网请求 |
18 |
地址子网应答 |
可以看到利用wireshark抓取的icmp如下,跟上面的icmp数据包可以对应起来。
2.2 传输层
传输层是增加的IP报文头部,如下图所示,工20个字节。
我们先看一下IP数据包的格式,它包括IP手部和数据部分,数据部分在本例中就是ICMP数据包。
IP头部各字段的解释:
字段 |
解释 |
版本 |
占据4位,IP协议的版本,IPV4的版本为4 |
首部长度 |
占据4位,标识IP首部的长度,值范围为20~60 |
区分服务 |
占据一个字节 |
总长度 |
占据两个字节,标识的是首部和数据的总大小 |
标识 |
占据两个字节,当数据报由于长度超过网络的MTU而必须分 片时,这个标识字段的值就被复制到所有的数据报片的标识字段中,等到重组的时候,相同标识符的值的数据报就会被重新组装成一个数据报 |
标志 |
占据3位,一般有用的是前面两位,最低为叫做MF,MF=1表示后面还有若干个数据报,MF=0表示后面没有数据报了;中间为DF,DF表示是否可以进行分片,DF=1表示不能进行分片 |
片偏移 |
占13位,片偏移就是,在原来的数据报分片以后,该片在原分组中的相对位置,片偏移中的基本单位是8字节,所以,也就是说,只要是分片,每个分片的长度都是8字节的整数倍,最后一个分片不够八字节的一样是填充 |
生存时间 |
占据1个字节,标识该数据包最多可以经过多少个路由器 |
协议 |
占据1个字节,标识该数据报使用的是什么协议 |
首部校验和 |
占据2个字节,只对首部进行校验,因为数据部分由上层来完成校验 |
源地址 |
占据4个字节,源IP地址 |
目的地址 |
占据4个字节,目的IP地址 |
从上面的表格可以看出,上面的字段长度加起来正好是20个字节,也就是IP头部的最小长度大小。
如果有其他数据需要放到IP头部,则可以放到可选字段,填充字段是为了保证IP头部满足4字节整数倍的要求增加的字段。
我们再结合wireshark抓取的数据做一下分析:
2.3 以太帧
我们选中以太帧报文(红色方框圈中的地方),则下面有14个字节被选中了(绿色方框圈中的地方)。可以看到圈中的数据分别是:目的地址的mac地址,源地址的mac地址,还有一个值为0x8000的数据。
我们先看一下以太帧的数据报格式:
字段 |
解释 |
目的地址 |
占据6个字节,标识目标设备(路由器)的mac地址 |
源地址 |
占据6个字节,标识源设备的mac地址 |
类型 |
占据2个字节,标识上层协议的类型,常见的:0x8000标识IPV4,0x806标识ARP,0x0835标识RARP |
这个0x8000表示的就是上层协议类型为ipv4。
2.3 数据链路层
双击第35帧数据包,可以得到如下的显示结果。点击数据链路层报文(红色方框标注的地方),可以看到整个74字节的报文内容(绿色方框圈起来的地方)就被选中了,这说明ping request数据链路层报文一共有74个字节。
双击该行,可以展开看到里面更详细的内容:
3. ping reply数据包解析
reply数据包跟request包没有大的区别,在这里就不用再次分析了。
如有错误,请帮忙留言指出,感谢~