【网络协议】【ICMP】精讲ICMP协议报文格式!图解超赞超详细!!!

目录

1. ICMP 协议详解

1.1 ICMP报文通用格式

1.2 ICMP报文协议栈结构

2. ICMP报文首部

3. ICMP协议报文的两个种类

3.1 差错报告报文

3.2 询问报文

4. ICMP协议的应用:Ping应用


1. ICMP 协议详解

  • 网际控制报文协议(Internet Control Message Protocol)

  • 该协议主要是用于辅助IP协议进行数据传输的

  • 可以报告错误信息或者异常情况

    它是 TCP/IP协议族的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

1.1 ICMP报文通用格式

    ICMP报文格式是ICMP协议的核心,它是一种用于在两台计算机之间传输控制消息的格式。ICMP报文封装在IP数据报中,其报文格式如下:

+0------7-------15---------------31
|  Type | Code  |    Checksum    |
+--------------------------------+
|          Message Body          |
|        (Variable length)       |
+--------------------------------+
  • Type(类型):1字节,标识ICMP报文的类型。常见的类型包括回显请求(8)、回显应答(0)、目的地不可达(3)、源抑制(4)、时间超过(11)等。
  • Code(代码):1字节,提供关于报文类型的进一步信息。例如,对于类型3(目的地不可达),代码可以进一步指明是网络不可达、主机不可达还是协议不可达等。
  • Checksum(校验和):2字节,用于校验整个ICMP报文的完整性。校验和的计算包括ICMP报文和IP头部的某些字段。
  • Data(数据):可变长度,根据ICMP报文的类型和代码不同而变化。通常包含导致ICMP报文生成的原始IP数据报的部分或全部信息。

ICMP消息类型代码

其中,最后一个字段的长度和内容,取决于消息的类型和代码。对应的列表如下:

表3-3 ICMP消息类型代码对应表

类型Type代码Code描述
00回显应答(ping应答)
30网络不可达
31主机不可达
32协议不可达
33端口不可达
34需要进行分片但设置不分片比特
35源站选路失败
36目的网络不认识
37目的主机不认识
38源主机被隔离(作废不用)
39目的网络被强制禁止
310目的主机被强制禁止
311由于TOS,网络不可达
312由于TOS,主机不可达
313由于过滤,通信被强制禁止
314主机越权
315优先权中止生效
40源端被关闭
50对网络重定向
51对主机重定向
52对服务类型和网络重定向
53对服务类型和主机重定向
80请求回显(ping请求)
90路由器通告
100路由器请求
110传输期间生存时间为0
111在数据报组装期间生存时间为0
120坏的IP首部
121缺少必须的选项
130时间戳请求(作废不用)
140时间戳应答(作废不用)
150信息请求(作废不用)
160信息应答(作废不用)
170地址掩码请求
180地址掩码应答

报文示例  图3-11 ICMP消息

Frame 1: 50 bytes on wire (400 bits), 50 bytes captured (400 bits)
    Arrival Time: Mar 17, 2015 14:04:15.071870000
    Epoch Time: 1426572255.071870000 seconds
    [Time delta from previous captured frame: 0.000000000 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
    [Time since reference or first frame: 0.000000000 seconds]
    Frame Number: 1
    Frame Length: 50 bytes (400 bits)
    Capture Length: 50 bytes (400 bits)
    [Frame is marked: False]
    [Frame is ignored: False]
    [Protocols in frame: eth:ip:icmp:data]
    [Coloring Rule Name: ICMP]
    [Coloring Rule String: icmp || icmpv6]
Ethernet II, Src: 40:f2:e9:2e:b2:5a (40:f2:e9:2e:b2:5a), Dst: PaloAlto_00:01:1a (00:1b:17:00:01:1a)
    Destination: PaloAlto_00:01:1a (00:1b:17:00:01:1a)
        Address: PaloAlto_00:01:1a (00:1b:17:00:01:1a)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    Source: 40:f2:e9:2e:b2:5a (40:f2:e9:2e:b2:5a)
        Address: 40:f2:e9:2e:b2:5a (40:f2:e9:2e:b2:5a)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    Type: IP (0x0800)
Internet Protocol Version 4, Src: 10.30.129.205 (10.30.129.205), Dst: 10.168.121.153 (10.168.121.153)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)
    Total Length: 36
    Identification: 0x3c81 (15489)
    Flags: 0x00
        0... .... = Reserved bit: Not set
        .0.. .... = Don't fragment: Not set
        ..0. .... = More fragments: Not set
    Fragment offset: 0
    Time to live: 128
    Protocol: ICMP (1)
    Header checksum: 0x0000 [incorrect, should be 0x962a (maybe caused by "IP checksum offload"?)]
        [Good: False]
        [Bad: True]
            [Expert Info (Error/Checksum): Bad checksum]
                [Message: Bad checksum]
                [Severity level: Error]
                [Group: Checksum]
    Source: 10.30.129.205 (10.30.129.205)
    Destination: 10.168.121.153 (10.168.121.153)
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0
    Checksum: 0xf3df [correct]
    Identifier (BE): 1056 (0x0420)
    Identifier (LE): 8196 (0x2004)
    Sequence number (BE): 0 (0x0000)
    Sequence number (LE): 0 (0x0000)
    Data (8 bytes)
      Data: 0000000000000000
      [Length: 8]

1.2 ICMP报文协议栈结构

    ICMP 层区分不是很明显,一般划分在 IP层中通过 IP 包来封装ICMP数据 ,在实际传输中数据包的格式一般都是 IP 包 + ICMP包的格式,具体格式如下:

IP 首部(20字节) + 8 位类型 + 8 位代码 + 16 位校验和 + ICMP 首部其他部分( 7 个字节) + 数据。

ICMP消息封装在IP报文中,格式如下:

   +-------------------------------+
   |          ICMP message         |
   +-------------------------------+
   | IP header (Protocol = 0x01)   |
   +-------------------------------+
   |            L2 header          |
   +-------------------------------+

如果用图表的形式展现出来就是下面的这张图了

图片

ICMP的报文数据是通过封装在IP数据报中进行数据传输的

ICMP的报文分为两个部分:ICMP报文首部和ICMP报文数据

图片

2. ICMP报文首部

图片

  • 「类型」:主要指的是ICMP报文的种类(主要有两大类,后边会进行说明)

  • 「代码」:主要是指,不同的ICMP报文种类具体有哪些错误。

  • 「校验和」:主要是校验报文在整个传输中,是否存在错误。

在前边介绍IP协议首部中,有一个8位协议,它表明的是IP数据所携带的具体数据是什么协议的。ICMP的字段值为1

图片

如果IP协议传输的数据是ICMP数据的话,那么,将会在协议中写入1

图片

3. ICMP协议报文的两个种类

  • ICMP报文主要有两大功能:查询报文和差错报文

3.1 差错报告报文

图片

  • 「网络不可达」:IP地址可以表示一个网络,当主机号全为0时就表示的是某一个网络,如果整个网络不可达,就会报告一个类型为3,具体代码为0的ICMP协议报文。

  • 「主机不可达」:如果计算机A要和计算机B进行通信,而计算机B是关机的状态,就会出现主机不可达的情况。

  • 「网络重定向」:传输给某一个网络的数据,可能不能走该网络了,需要进行重定向

  • 「主机重定向」:如果发送的报文,主机告知不能处理,请发送到另外一个主机。

3.2 询问报文

图片

  • 「回送请求或应答」:主要是验证网络是否通。假设计算机A要和计算机B进行通信,A会发送一个空的数据给B,如果B收到,就给一个回应。

  • 「时间戳请求或应答」:当需要进行时间同步时,会用到这个。

4. ICMP协议的应用:Ping应用

    在前边的文章中有使用到ping命令来查看网络的响应时间和TTL。这部分主要是介绍ping的原理是什么。

    ping应用主要是使用ICMP的「询问报文」,它会发送「回送请求或应答」类型的报文。当使用ping命令的时候,它首先会组装一个IP协议的报文,然后在IP的数据报中组装ICMP的询问报文,然后通过数据链路层发送出去,这个就是ping应用的原理。

图片

    通常我们会使用ping命令来查看本地的网络是否通,或者网络质量是怎么样的。平时在家中,如何出现网络故障,我们也会使用ping命令来进行排查:

  • 第一步会先ping本地回环地址127.0.0.1(如果没有返回,说明协议栈有问题,这个时候可能需要重装系统,或重新安装协议栈)

  • 如果上一步正常返回,则ping网关地址(也就是路由器地址)。如果计算机是处于内网的话,一般就是ping 192.168.0.1或者ping 192.168.1.1。如果上一步ping网关也是通的,说明本机到路由器是通的,如果不通,说明网线或者wifi是有问题的。

  • 如果ping网关是通的,则ping远端地址(比如百度)。如果不通,则说明在你家到ISP之间网络是故障的,这个时候就需要联系电信或移动或联通。

1、ICMP报文类型和代码的组合定义了报文的具体含义。例如,当一个IP数据报无法到达目的地时,路由器或目的主机会发送类型为3的ICMP报文,代码字段会进一步指明不可达的原因。

2、ICMP协议的应用包括网络诊断工具如Ping和Traceroute,它们利用ICMP报文来检测网络连通性和路径信息。此外,ICMP还用于路由器发现、地址掩码请求等网络配置和诊断任务。

3、在网络安全方面,ICMP报文也可能被用于攻击,如ICMP洪水攻击。因此,网络设备通常需要对ICMP流量进行适当的限制和过滤,以防止滥用和保护网络资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风云说通信

支持小编为您创造更多干货,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值