国际控制报文协议ICMP

本文深入解析ICMP协议,涵盖其在网络通信中的角色、报文格式、类型与代码字段的含义,以及通过抓包实例演示ICMP差错报告报文的生成过程。同时,介绍了如何利用ping和pathping命令进行网络故障诊断。

国际控制报文协议ICMP

ICMP简介

  • ICMP 用于主机或路由器报告差错情况和提供有关异常情况的报告(检测网络错误)。
  • ICMP 不是高层协议,而是 IP 层的协议。

**ICMP 报文的格式 **

image-20200123084514046

ICMP 报文的类型

  • ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型代码检验和。接着的 4 个字节的内容与 ICMP 的类型有关。

  • ICMP报文可分为两大类:一、有关信息采集和配置的ICMP报文(称为查询报文(query)或者信息类报文(information message)),二、有关IP数据报传递的ICMP报文(称为差错报文(error message)).

  • ICMP 差错报告报文有许多种比如 :

    • 终点不可达;比如传输数据过程中,中间某一路由器不知道到目标地址怎么走,该路由器就会发回该报文。
    • 源点抑制(Source quench); 即反馈发包速度过快;
    • 时间超过 ;
    • 参数问题 ;
    • 改变路由(重定向)(Redirect) ;

    image-20200123085723392

    如图三个网段:1,2,3,可以把网段1的网关设置在A处,那么PC0访问PC2时,PC0把数据发送到网关A,经Router0转发到达PC2;如果是PC0访问PC1那么PC0同样也会先把数据发送到网关A,Router再中转到Router1再到PC1,而重定向就是,当PC0发数据给网关A时,Router0给PC0返回一个ICMP差错报告报文,告诉PC0直接发到Router1处更快到达PC1。

  • 报文类型字段(Type)及代码字段(Code)含义对照:

类型TYPE代码CODE用途|描述 Description查询类Query差错类Error
00Echo Reply——回显应答(Ping应答)
30Network Unreachable——网络不可达
31Host Unreachable——主机不可达
32Protocol Unreachable——协议不可达
33Port Unreachable——端口不可达
34Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特
35Source routing failed——源站选路失败
36Destination network unknown——目的网络未知
37Destination host unknown——目的主机未知
38Source host isolated (obsolete)——源主机被隔离(作废不用)
39Destination network administratively prohibited——目的网络被强制禁止
310Destination host administratively prohibited——目的主机被强制禁止
311Network unreachable for TOS——由于服务类型TOS,网络不可达
312Host unreachable for TOS——由于服务类型TOS,主机不可达
313Communication administratively prohibited by filtering——由于过滤,通信被强制禁止
314Host precedence violation——主机越权
315Precedence cutoff in effect——优先中止生效
40Source quench——源端被关闭(基本流控制)
50Redirect for network——对网络重定向
51Redirect for host——对主机重定向
52Redirect for TOS and network——对服务类型和网络重定向
53Redirect for TOS and host——对服务类型和主机重定向
80Echo request——回显请求(Ping请求)
90Router advertisement——路由器通告
100Route solicitation——路由器请求
110TTL equals 0 during transit——传输期间生存时间为0
111TTL equals 0 during reassembly——在数据报组装期间生存时间为0
120IP header bad (catchall error)——坏的IP首部(包括各种差错)
121Required options missing——缺少必需的选项
130Timestamp request (obsolete)——时间戳请求(作废不用)
14Timestamp reply (obsolete)——时间戳应答(作废不用)
150Information request (obsolete)——信息请求(作废不用)
160Information reply (obsolete)——信息应答(作废不用)
170Address mask request——地址掩码请求
180Address mask reply——地址掩码应答

**ICMP 差错报告报文的数据字段的内容 **

image-20200123090716797

如果网络设备1与网络设备2通信,图中A表示网络设备2收到的来自网络设备1的数据报,该数据报并无有用数据,仅起询问是否能通信作用;B表示该设备返回的数据报,图中演示的是A-->B的过程。首先保留A的首部和数据字段中的前8字节,在IP数据报前面添加ICMP的前8字节形成ICMP差错报告报文,再在ICMP差错报告报文前面添加网络层地址形成B数据报;

抓包演示

image-20200123093048459

我们尝试与两个地址建立通信并抓取通信过程中的数据报,其中一个不能通信的地址:207.226.141.205;另一个为能够通信的地址:202.99.160.68 。抓包总览如下图所示:

image-20200123095329276

不能通信:

  • 172.26.105.78(本计算机IP地址)——>207.226.141.205时:

image-20200123100104739

Internet Control Message Protocol即表示网际控制报文协议ICMP

可以看到该ICMP报文的类型(Type)为8,对应代码(Code)为0,表示Echo request——回显请求(Ping请求),属于查询报文。

可以以看到后面还有检验和等字段,检验了上面讨论的ICMP报文字段结构。

  • 207.226.141.205 ——> 172.26.105.78时:

image-20200123100713588

可以看到该ICMP报文的类型(Type)为11,对应代码(Code)为0,表示Time-to-live exceeded——传输期间生存时间TTL为0,属于差错报告报文。

能够通信:

  • 172.26.105.78(本计算机IP地址)——>202.99.160.68时:

image-20200123101151435

可以看到该ICMP报文的类型(Type)为8,对应代码(Code)为0,表示Echo request——回显请求(Ping请求),属于查询报文。

  • 202.99.160.68 ——> 172.26.105.78时:

image-20200123101327796

可以看到该ICMP报文的类型(Type)为0,对应代码(Code)为0,表示Echo Reply——回显应答(Ping应答),属于查询报文。

ping命令诊断网络故障

  • PING(Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。

  • ping指的是端对端连通,通常用来作为可用性的检查,但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致系统变慢,网速变慢。严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。

  • 如果你打开IE浏览器访问网站失败,你可以通过ping命令测试到Internet的网络连通,可以为你排除网络故障提供线索,下面展示ping命令返回的信息以及分析其原因。

    • 目标主机不可到达

      image-20200123103812303

    • 目标网络不可到达

      image-20200123104545575

    • 请求超时

      image-20200123104121166

      说明丢包了。

    • 通过延迟评估网络带宽

      image-20200123103759734

      可以看到最小延迟为54ms,最大延迟57ms,平均延迟55ms。

      当 ping 本计算机网关的时候延迟小,速度快:

      image-20200123104426513

    • 总结:ping命令只能检测两端口通或不通。

pathping命令跟踪数据包路径

image-20200123105829902

当PC0 ping PC1时不通,可能是1~4处某一处或多处断了,也可能是PC1没有开机。而使用PC0 pathping PC1时,从PC0到PC1,每经过一个路由器都会通过该路由器给PC0发回一个数据包说明PC0到该路由器的路径是通的。即Router1给PC0发回一个数据包则表示1、 2通;Router2给PC0发回一个数据包表示1、 2、 3通。在网络排错中具有很强的实用意义。

  • 另一种情况

image-20200123110842189

PC0 pathping PC1时,数据包可以通过Router0,但是Router0设置了进入的数据包无法追踪该路由器,则Router0不会给PC0返回一个数据包。

  • 演示

    输入命令:

    pathping www.bilibili.com

    表示从本计算机访问“www.bilibili.com”该网站的服务器,并追踪途经的各个中转路由器。

image-20200123111530338

同时pathping命令还会统计通信方到每个中转路由器的丢包率,由此可以看出从哪到哪丢包严重,网络延迟大,据此可以优化网络。

相同类型的有trace route命令,该命令较为简略不会统计丢包率,这里不做讨论。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值