ICMP协议

基本概念

基本定位

  • 所属层级网络层协议(虽然基于 IP 封装,但功能是辅助 IP 层,而非传输层)
  • 诞生背景 :IP 协议本身是不可靠、无连接的,丢包时无法通知上层原因,ICMP 就是为了弥补这个缺陷而设计的。

核心功能

  • 确认可达性验证 IP 报文是否成功送达目标地址 (比如 ping 命令就是基于 ICMP 的 Echo 请求/应答)。
  • 差错通知 :当 IP 报文被丢弃时,向源主机发送差错报文,告知丢包原因(比如目标不可达、超时、需要分片但 DF=1 等)。
  • 辅助 IP 层 :为 IP 协议提供控制、诊断、差错报告能力,不参与数据传输。

关键细节

  • 依赖关系 :ICMP 报文封装在 IP 数据报中传输,所以它是基于 IP 协议工作的。
  • 层级归属 :因为它是为 IP 层服务的控制协议,而非为应用层提供端到端传输,所以归类为网络层,而非传输层。

总结

ICMP 是 IPv4 网络层的控制与诊断协议 ,核心作用是报告 IP 传输的可达性与丢包原因 (ICMP允许距离事故发生地最近的主机返回应答),弥补了 IP 协议不可靠的缺陷,是 pingtraceroute 等网络诊断工具的底层基础。

ICMP报文格式

ICMP 报文封装在 IP 数据报 中,整体分为 首部(固定 8 字节)数据部分

报文整体结构

字段 长度(字节) 说明
类型(Type) 1 定义报文功能(如 Echo 请求、目标不可达等)
代码(Code) 1 同一类型下的细分原因(如目标不可达分网络不可达/主机不可达)
校验和(Checksum) 2 对整个 ICMP 报文做差错校验
内容(可变) 4 随类型不同而变化(如 Echo 报文里是标识符+序列号)
数据部分 可变 差错报文会携带出错 IP 数据报的首部 + 前 8 字节数据

关键字段详解
(1)类型(Type)

常见类型值:

  • 0:Echo 应答(ping 响应)
  • 8:Echo 请求(ping 探测)
  • 3:目标不可达
  • 11:超时(TTL 耗尽)
  • 5:重定向

(2)代码(Code)

对类型的进一步细分,例如:

  • 类型 3(目标不可达):
    • 0:网络不可达
    • 1:主机不可达
    • 2:协议不可达
    • 3:端口不可达
    • 4:需要分片但 DF=1

(3)校验和(Checksum)

  • 覆盖整个 ICMP 报文(首部 + 数据)
  • 用于检测传输过程中的比特错误

两种典型报文格式

(1)Echo 请求/应答(ping 用)

  • 类型:请求为 8,应答为 0
  • 代码:固定为 0
  • 数据:通常填充任意字节(如 ASCII 字符)

(2)目标不可达/超时等差错报文

  • 数据部分:携带触发差错的原始 IP 数据报首部 + 前 8 字节,方便源端定位是哪个报文出了问题
相关推荐
浅念-22 分钟前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
日常筹谋记26 分钟前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯
updayday85434 分钟前
离职域账号状态变更与Ping64操作记录核对
大数据·网络·数据库·安全·智能路由器
Shadow(⊙o⊙)1 小时前
Linux进阶知识1.0
linux·运维·服务器
安易算力2 小时前
PUE优化工程实践:从1.5到1.2的制冷架构与气流组织改造路径
网络·python·容器·架构·kubernetes
闲云自留地2 小时前
告别命令恐惧症,openEuler 基础操作 + 文本 + 网络管理实战
linux·运维·云计算
剑指offer.2 小时前
ARM裸机开发-点亮LED灯
linux·服务器·嵌入式硬件
Wang's Blog2 小时前
Java 接入Redis: 使用Jedis操作Redis
java·服务器·redis
Ivanqhz3 小时前
数据搬运是性能关键
java·服务器·网络·人工智能·深度学习
其实防守也摸鱼3 小时前
常见安全架构中 Shiro 的认证确认机制解析
运维·服务器·数据库·windows·github