ICMP协议

基本概念

基本定位

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

核心功能

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

关键细节

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

总结

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

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 字节,方便源端定位是哪个报文出了问题
相关推荐
默|笙14 分钟前
【Linux网络】传输层协议TCP(1)---TCP报文介绍
linux·网络·tcp/ip
相思难忘成疾17 分钟前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
PellyKoo21 分钟前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器
云飞云共享云桌面27 分钟前
1台SolidWorks服务器如何承载10个设计并发?
运维·服务器·网络·3d·制造
未来之窗软件服务1 小时前
WAF负载均衡+蜜罐混淆安全体系-东方仙盟
运维·安全·负载均衡·仙盟创梦ide·东方仙盟·阿雪技术观·网关开发
Linux-lucky1 小时前
46-Linux学习之旅之LVS负载均衡与keepalived高可用
linux·运维·学习·ubuntu·负载均衡·lvs
Jenni see1 小时前
服装厂裁剪自动化怎么搞?自动铺布+激光裁床+六轴机械手裁片分拣,省料省人的实战指南
运维·自动化
Escalating_xu2 小时前
【Linux 网络编程】NAT、代理服务与内网穿透:从一个公网 IP,到一条真正可达的连接
linux·网络·tcp/ip
阿标在干嘛2 小时前
容器编排的“场景适配”:我们为什么在部分服务中回归了Docker Compose?
运维·docker·容器