目录
1. ICMP 协议详解
1.1 ICMP报文通用格式
1.2 ICMP报文协议栈结构
2. ICMP报文首部
3. ICMP协议报文的两个种类
3.1 差错报告报文
3.2 询问报文
4. ICMP协议的应用:Ping应用
-
网际控制报文协议(Internet Control Message Protocol)
-
该协议主要是用于辅助IP协议进行数据传输的
-
可以报告错误信息或者异常情况
它是 TCP/IP协议族的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
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消息类型代码对应表
报文示例 图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]
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报文数据
-
「类型」:主要指的是ICMP报文的种类(主要有两大类,后边会进行说明)
-
「代码」:主要是指,不同的ICMP报文种类具体有哪些错误。
-
「校验和」:主要是校验报文在整个传输中,是否存在错误。
在前边介绍IP协议首部中,有一个8位协议,它表明的是IP数据所携带的具体数据是什么协议的。ICMP的字段值为1
如果IP协议传输的数据是ICMP数据的话,那么,将会在协议中写入1
-
ICMP报文主要有两大功能:查询报文和差错报文
-
「网络不可达」:IP地址可以表示一个网络,当主机号全为0时就表示的是某一个网络,如果整个网络不可达,就会报告一个类型为3,具体代码为0的ICMP协议报文。
-
「主机不可达」:如果计算机A要和计算机B进行通信,而计算机B是关机的状态,就会出现主机不可达的情况。
-
「网络重定向」:传输给某一个网络的数据,可能不能走该网络了,需要进行重定向
-
「主机重定向」:如果发送的报文,主机告知不能处理,请发送到另外一个主机。
-
「回送请求或应答」:主要是验证网络是否通。假设计算机A要和计算机B进行通信,A会发送一个空的数据给B,如果B收到,就给一个回应。
-
「时间戳请求或应答」:当需要进行时间同步时,会用到这个。
在前边的文章中有使用到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流量进行适当的限制和过滤,以防止滥用和保护网络资源。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/23976.html