day16、3 - ICMP协议

一、ICMP协议

1.ICMP协议概述

  • ICMP协议同IP协议,ARP协议属于网络层的协议。IP协议封装的IP包头中的协议号值为1表示是同层的ICMP协议传给IP协议的;协议号值为6表示是上层TCP协议传给IP;协议号值为17表示是上层UDP协议传给IP

    image-20211105200803641
  • 误区: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,表示目标主机不可达

    • 值为11TTL超时(利用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.路由跟踪原理

  • 如图所示:

    image-20211106092128915
  • 说明:

    • 当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的主机上会显示以下四条记录

      image-20211106101007195
  • 出现错误:

    1. 当有一条记录显示三个星号:表示此设备设置了禁止跟踪,但是允许帧通过

    2. 如果前面显示了几条记录,但是后面一律不显示了:表示可能从不显示的设备这里开始出现了网络问题

      image-20211106101300227

3.跟踪路由结果显示

image-20211106094848139

三、路由跟踪抓包分析

  1. 在PC上安装抓包工具:这里使用科来软件来分析。设置好抓取进出PC上的某网卡的数据包

  2. 在PC的cmd上输入tracert 目标IP地址,然后去科来上查看抓取的包,进行分析

    image-20211106102806708
  3. 选取ICMP协议这几个帧进行分析

    屏幕截图 2021-11-06 102945
    • 可以看到ICMP协议没有对应的端口,因为是一个三层协议,直接生成报文最后封装成帧

    • 此帧由帧头、IP包头、ICMP报文、帧尾构成,所以是ICMP协议的封装格式

    • 选取第一个由本地发帧中的ICMP报文部分:类型为8表示是ping请求,代码为0,数据部分这里以全0填充

      image-20211106103518928
    • 再看此帧中的IP包头部分:协议值为1表示此IP协议是从同层的ICMP协议传入的。即此帧为一个ICMP协议生成的

      image-20211106104047063
    • 再选取第二个由对方发送的帧的ICMP报文部分:类型为0表示ping应答,代码为0,数据用全0填充

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值