每日一个计算机小知识:ICMP

每日分享一个有趣的计算机小知识,今日话题:ICMP

ICMP是Internet Control Message Protocol 的缩写,互联网控制消息协议 。它是TCP/IP协议族的一个子协议,用于在IP主机和路由器之间传递差错报告、网络拥塞控制和诊断信息。

1981年4月,美国人乔恩·波斯特尔Jon Postel(互联网发展初期的关键人物之一,编写了大量的RFC文档,在互联网协议的制定和标准化方面发挥了至关重要的作用),编写了ICMP的第一个标准草案RFC 777,初步提出了ICMP的基本概念和功能框架。同年9月,由Jon Postel编写的RFC 792正式发布,对ICMP协议的基本框架进行了定义,确立了其作为TCP/IP协议族中网络层控制协议的地位。

1983年,美国人迈克尔·穆伊斯Mike Muuss开发了基于ICMP协议的网络诊断工具Ping,用于测试网络连接和测量网络延迟。我们在开发中经常会用Ping命令来检查网络通不通(Linux和Windows中均支持),这个Ping的过程实际上就是ICMP协议的工作过程(除了Ping还有跟踪路由的Tracert命令也是基于ICMP协议的)。

Ping命令的核心原理就是利用ICMP协议的Echo Request(请求)和Echo Reply(应答)报文,通过"发送请求-接收应答"的简单交互,测试两台主机间的网络连通性、延迟和丢包率。其执行过程可分为如下6步:

1. 输入ping命令

用户在终端输入ping 目的设备的IP地址,操作系统接触发ICMP协议模块工作。

2. 构造Echo Request报文

ICMP模块生成Echo Request报文,报文中会包含两个关键字段:请求标识符和序列号。

3. 封装成IP数据包

ICMP请求报文本身无法直接传输,需被封装到IP数据包中。IP数据包的源IP设为当前用户的IP,目标IP设为目的设备的IP,且会将IP首部的协议字段设为1(表示该IP包承载的是ICMP协议数据)。

4. 网络层转发

发送Echo Request报文的数量可以设置,缺省时默认发送5个,封装好的IP数据包通过网关(如家用路由器)进入网络,路由器根据目标IP查询路由表,逐层转发数据包,最终送达目的设备。

5. 回复Echo Reply报文

目的设备的IP层收到数据包后,根据协议字段为1识别为ICMP协议,ICMP模块根据Echo Request请求生成对应的Echo Reply应答报文,再将应答报文封装成IP数据包,按原路径反向回复给用户。

6. 用户端接收应答

用户电脑收到Echo Reply数据包后交给ICMP模块,计算请求发送到应答接收的时间(即延迟),同时统计成功收到的应答数与发送的请求数,得出丢包率,然后终端会显示每一次请求的延迟、TTL(生存时间)等信息。如果网络不通(如路由故障、目的设备禁用ICMP等)用户电脑会超时未收到应答,终端就会显示Request timed out请求超时。

ICMP属于网络层协议,是同属网络层的IP协议的重要辅助协议,它有自己独立的协议规范和功能,只是借助IP协议的传输能力来实现自身功能(ICMP报文需要封装在IP数据报中传输),其协议逻辑和功能实现是独立的。它和传输层的UDP协议一样是无连接协议,无确认和重传机制,所以是不可靠的,不过ICMP并不用于传输数据。

IP协议的核心作用是在不同网络之间路由数据包,实现端到端的数据包传输,但是IP协议并不提供可靠传输,如果IP数据包因目标不可达、超时等原因丢失,IP协议并不能通知源主机是否丢包以及丢包的原因,也无法探测网络连通性、无法调节网络拥塞、无法引导路由优化...这些问题就需要ICMP协议来解决。

形象点比喻:IP是负责送货的快递员,只负责把包裹送出去,ICMP则是客服+导航,负责通知送货结果(丢件/送不到)、确认收货方是否在家,以及指引更优送货路线。

相关推荐
汤愈韬25 分钟前
ACL概述、ACL原理、基本ACL应用及配置
网络·网络协议·网络安全
haluhalu.7 小时前
Linux网络编程------网络基础
网络·网络协议
坐怀不乱杯魂7 小时前
Linux网络 - HTTP协议
网络·网络协议·http
野犬寒鸦7 小时前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端·学习
我爱娃哈哈7 小时前
SpringBoot + Flowable + 自定义节点:可视化工作流引擎,支持请假、报销、审批全场景
java·spring boot·后端
ipooipoo11888 小时前
动态住宅IP的定义、核心优势与技术场景应用
网络·网络协议·tcp/ip
李梨同学丶9 小时前
0201好虫子周刊
后端
思想在飞肢体在追9 小时前
Springboot项目配置Nacos
java·spring boot·后端·nacos
pythonchashaoyou11 小时前
静态住宅ip是什么,静态住宅IP选型全解
网络·网络协议·tcp/ip
Loo国昌11 小时前
【垂类模型数据工程】第四阶段:高性能 Embedding 实战:从双编码器架构到 InfoNCE 损失函数详解
人工智能·后端·深度学习·自然语言处理·架构·transformer·embedding