一、ICMP协议
1.ICMP协议概述
-
ICMP协议同IP协议,ARP协议属于网络层的协议。IP协议封装的IP包头中的协议号值为1表示是同层的ICMP协议传给IP协议的;协议号值为6表示是上层TCP协议传给IP;协议号值为17表示是上层UDP协议传给IP
-
误区:ICMP协议属于三层协议,故没有对应的端口号。只有五层协议才有对应的端口号
2.ICMP的作用
- 可以利用ICMP的网络探测和回馈机制,来实现①网络探测,②路由跟踪,③错误反馈
3.ICMP协议的封装格式
- ICMP协议生成的ICMP报文组成部分:ICMP头,数据
4.数据与ICMP头
1)数据
- 数据字段没有任何意义,一般会填充一些字符,比如0000…或者abcdefg…,只表示有内容
2)ICMP头
-
ICMP头的组成:ICMP类型字段,代码
-
作用:ICMP头会标识此ICMP报文使用哪一种探测类型或者哪一种回馈类型
-
代码:代码一般跟前面ICMP类型字段的值一致–无意义;但是如果ICMP类型字段值为3,那么代码则有意义----会告诉你不可达的种类(原因),比如为1或者3或者0等
-
ICMP类型字段:
-
值为8:表示此ICMP报文类型为ping请求(利用ICMP探测机制)
比如当我们输入ping命令时,则ICMP类型字段为8,表示此ICMP报文用于ping请求
-
值为0:表示此ICMP报文的类型为ping应答(利用ICMP回馈机制)
比如当我们ping对方,对方在线回应请求时,对方发送的ICMP报文中ICMP类型字段为0,表示此报文是一个ping应答报文,即对方成功应答
-
值为3:表示此ICMP报文的类型为目标主机不可达(利用ICMP回馈机制)
ICMP类型字段为3的原因有很多种:
情况一:当帧到达路由表,由于路由器缺少路由表(不完整),无法路由,则会将此帧丢弃,并且回馈给我一个ICMP报文,此报文的ICMP头中类型字段为3,代码也为3表示目标主机不可达
情况二:PC去ping一个不同网段的IP,则PC会先请求网关,但是如果PC没有配置网关,那么屏幕上就会弹出一句话,目标主机不可达
情况三:整个网络中的路由器的路由表都配置完整,且也指网关了,但是现在某个路由器上配置了一个安全过滤策略,相当于一个防火墙,比如会过滤我的IP,那么路由器不会路由我的帧,则此时也会回馈一个ICMP报问,类型字段为3
情况四:我发的帧已经成功到达对方电脑,但是对方电脑拒收:即拒绝ping对方主机。比如我现在想去ping服务器上的80端口,对方电脑可以收到我的帧,但是解封装到四层时,对方电脑四层上有一个防火墙,设置策略----禁止我访问80端口,则会将我的信息丢弃。也会回馈3,表示目标主机不可达
…
-
值为11:TTL超时(利用ICMP回馈机制)
比如我去ping一台主机,但是网络中出现了回路,一个帧会有TTL值,经过一个路由器就会减一,最后减为0,路由器就会将帧丢弃,这台路由器就要回馈ICMP报文,类型值为11
-
5.启用ICMP协议误区
- ICMP协议不是只有ping对方,发送与回馈需要使用ICMP协议,ping只是其中能启用ICMP协议的一种方式
- ICMP适用于任何协议,只要帧在网络传输过程中,在某个三层及三层以上的设备处发生错误,这个设备就有义务启用ICMP协议给发送方回馈一个ICMP报文
二、路由跟踪
1.路由跟踪命令
1)windows上的命令
tracert IP地址
2)linux或路由器上的命令
traceroute IP地址
2.路由跟踪原理
-
如图所示:
-
说明:
- 当PC1在cmd输入
tracert 40.1.1.1
时,PC会启用ICMP协议生成ICMP报文:ICMP类型字段值为8(即表示ping请求)、代码、数据为一堆填充数据比如abc。然后再经过IP协议,封装IP包头:源IP、目标IP、TTL值先设为1。在传入第四层封装帧头帧尾(ARP过程省略)。最后将帧发送出去 - 当经过r1时,r1会解封装,最后将IP包头中的TTL值改为减一,即为0,那么r1路由器会将此帧丢弃;然后启用ICMP协议,生成ICMP报文:ICMP类型字段值为11(表示TTL超时)、代码、数据。同样通过IP协议封装IP包头:源IP为r1网关IP,目标IP为发送方10.1.1.1。通过四层封装帧头帧尾再将帧回馈给PC1
- PC1收到后再启用ICMP协议生成ICMP报文:ICMP类型字段为8…。再通过IP协议封装IP包头:TTL值改为2…。再发送
- 经过r1将TTL值减一,则TTL值=1。再经过r2,r2将TTL减一变为0。那么r2也会通过ICMP报文:类型值为11。封住成帧后回馈给PC1。
- PC2收到后再启用ICMP,TTL值改为3…
经过不断的发送ping请求ICMP报文,TTL值不断加一,最后收到了来自目标IP40.1.1.1的TTL超时ICMP报文,则结束追踪命令
-
此时PC1的主机上会显示以下四条记录
- 当PC1在cmd输入
-
出现错误:
-
当有一条记录显示三个星号:表示此设备设置了禁止跟踪,但是允许帧通过
-
如果前面显示了几条记录,但是后面一律不显示了:表示可能从不显示的设备这里开始出现了网络问题
-
3.跟踪路由结果显示
三、路由跟踪抓包分析
-
在PC上安装抓包工具:这里使用科来软件来分析。设置好抓取进出PC上的某网卡的数据包
-
在PC的cmd上输入
tracert 目标IP地址
,然后去科来上查看抓取的包,进行分析 -
选取ICMP协议这几个帧进行分析
-
可以看到ICMP协议没有对应的端口,因为是一个三层协议,直接生成报文最后封装成帧
-
此帧由帧头、IP包头、ICMP报文、帧尾构成,所以是ICMP协议的封装格式
-
选取第一个由本地发帧中的ICMP报文部分:类型为8表示是ping请求,代码为0,数据部分这里以全0填充
-
再看此帧中的IP包头部分:协议值为1表示此IP协议是从同层的ICMP协议传入的。即此帧为一个ICMP协议生成的
-
再选取第二个由对方发送的帧的ICMP报文部分:类型为0表示ping应答,代码为0,数据用全0填充
-