今天和大家聊聊ICMP协议相关的知识,感兴趣的可以一起了解一下!
一、简介
图片
ICMP(Internet Control Message Protocol,互联网控制消息协议)是TCP/IP协议族中的一个重要子协议,该协议位于网络层。主要用于在IP主机和路由器之间传递控制消息,报告网络通信中的各种问题。虽然这些控制消息虽然不传输实际的用户数据,但对于数据的准确、可靠传递起着重要作用。ICMP协议的主要目的是提高IP数据报的成功传输率,确保数据通信的稳定性和可靠性。
二、为什么要有ICMP协议?
因为IP协议本身并不提供可靠的传输机制,也不具备差错报告和控制功能。所以当数据包在网络传输过程中出现问题时,IP协议无法及时通知发送方。为了解决这个问题,ICMP协议应运而生。ICMP协议的主要作用包括:
图片
差错报告:当数据包在网络传输过程中遇到问题时,ICMP协议可以向发送方报告错误信息,帮助发送方采取相应的措施。
网络诊断:提供了多种查询报文,用于诊断网络连接和路径信息,最常用的工具有ping和traceroute。
流量控制:可以通过源抑制报文通知发送方降低数据发送速率,以缓解网络拥塞。
路由重定向:可以通知主机或路由器更优的路由路径,提高网络传输效率。
三、ICMP协议报文格式
ICMP报文封装在IP数据报中,IP报头在ICMP报文的最前面。ICMP报文的基本格式如下:
图片
● Type:1字节,表示ICMP报文的类型。
● Code:1字节,表示ICMP报文的代码,对类型进行进一步说明。
● Checksum:2字节,用于校验整个ICMP报文的完整性。
● Data:可变长度,包含具体的控制信息或数据。
四、ICMP报文的类型
ICMP报文主要分为两大类:差错报文和查询报文。
图片
4.1 差错报文
差错报文用于报告网络通信中的错误情况,常见的差错报文类型包括:
● 目的地不可达(Type 3):当数据包无法到达目标设备时,发送端会收到目的地不可达报文。具体代码如下:
● 0:网络不可达
● 1:主机不可达
● 2:协议不可达
● 3:端口不可达
● 4:需要分片但设置了不分片标志
● 5:源路由失败
● 6:目的网络未知
● 7:目的主机未知
● 9:目的网络被禁止
● 10:目的主机被禁止
● 11:由于TOS网络不可达
● 12:由于TOS主机不可达
● 13:由于过滤通信被禁止
● 14:主机越权
● 15:优先级截止生效
● 超时(Type 11):当数据包的TTL值为0时,路由器会丢弃该数据包并发送超时报文。具体代码如下:
● 0:生存时间超时
● 1:数据报重组超时
● 参数问题(Type 12):当数据包的IP头字段值不正确时,接收方会发送参数问题报文。具体代码如下:
● 0:IP头字段值错误
● 1:必需的选项缺失
● 2:不支持的长度
● 源抑制(Type 4):当路由器或主机因网络拥塞而丢弃数据包时,会发送源抑制报文,请求发送方降低发送速率。
● 重定向(Type 5):当路由器发现更优的路由路径时,会发送重定向报文,通知发送方使用新的路由。具体代码如下:
● 0:网络重定向
● 1:主机重定向
● 2:TOS和网络重定向
● 3:TOS和主机重定向
4.2 查询报文
查询报文用于在不同网络设备之间传递控制信息,常用的查询报文类型包括:
● 回显请求和应答(Type 8和Type 0):用于测试网络连通性,常见的工具是ping。发送方发送回显请求报文(Type 8),接收方收到后回复回显应答报文(Type 0)。
● 时间戳请求和应答(Type 13和Type 14):用于测量网络延迟,发送方发送时间戳请求报文(Type 13),接收方收到后回复时间戳应答报文(Type 14)。
● 地址掩码请求和应答(Type 17和Type 18):用于获取子网掩码信息,主机启动时可以使用这些报文来确定自身的子网掩码。
● 路由器请求和通告(Type 9和Type 10):用于发现和选择路由器,主机可以发送路由器请求报文(Type 9),路由器收到后回复路由器通告报文(Type 10)。
五、ICMP报文的实际案例
5.1 Ping命令
Ping命令是基于ICMP协议的常用网络诊断工具,用于测试网络连通性。以下是Ping命令的工作流程:
1. 发送回显请求报文:发送方主机构造一个ICMP回显请求报文(Type 8),并将其封装在IP数据报中发送给目标主机。
2. 接收回显应答报文:目标主机收到回显请求报文后,构造一个ICMP回显应答报文(Type 0),并将其封装在IP数据报中发送回发送方主机。
3. 显示结果:发送方主机收到回显应答报文后,显示目标主机的IP地址、数据大小和往返时间。
示例:
ping 192.168.2.17
输出:
图片
5.2 Traceroute命令
Traceroute命令用于显示数据包从源主机到目标主机的路径信息,常用于诊断网络连接问题。以下是Traceroute命令的工作流程:
1. 发送ICMP报文:发送方主机发送一个带有TTL值为1的ICMP报文(通常是回显请求报文),当该报文到达第一个路由器时,TTL值减为0,路由器丢弃该报文并发送一个超时报文(Type 11)回给发送方。
2. 记录路径信息:发送方记录第一个路由器的IP地址,然后发送一个带有TTL值为2的ICMP报文,重复上述过程,直到数据包到达目标主机或达到最大TTL值。
3. 显示结果:发送方主机显示从源主机到目标主机的每一步路径信息,包括每个路由器的IP地址和响应时间。
示例:
traceroute 8.8.8.8
输出:
图片
总结
以上内容就是Internet控制消息协议相关的知识介绍,希望对大家理解ICMP协议提供一些帮助!