当前位置: 首页 > news >正文

什么是ICMP报文?有什么用?

一、ICMP报文基础概念

ICMP(Internet Control Message Protocol,互联网控制报文协议)​是TCP/IP协议族的核心协议之一,主要用于在IP主机和路由器之间传递控制消息。这些消息虽然不传输用户数据,但对网络诊断、错误报告和路由控制至关重要。

关键特性​:

  • 工作在网络层(OSI第三层)
  • 作为IP协议的附属协议(IPv4中协议号1,IPv6中Next Header值58)
  • 不提供可靠传输机制(不保证报文到达)

二、ICMP报文的核心作用

功能类别具体用途
网络诊断Ping测试、路径追踪(traceroute)
错误报告目标不可达、超时、参数错误等通知
路由控制重定向最佳路由、MTU发现
邻居发现IPv6中的地址解析、路由器发现(NDP协议)
网络管理时间戳请求、路由器通告等(部分功能已逐渐被替代)

三、常见ICMP报文类型示例

1. 网络诊断类

类型名称用途典型工具
Type=0Echo Replyping响应ping
Type=8Echo Requestping请求ping
Type=11Time ExceededTTL超时(traceroute核心机制)traceroute

2. 错误报告类

类型名称触发场景
Type=3Destination Unreachable目标主机/端口不可达
Type=5Redirect发现更优路由时通知发送方
Type=12Parameter ProblemIP头部字段错误

3. 路由控制类

类型名称功能
Type=9Router Advertisement路由器定期通告网络信息
Type=10Router Solicitation主机主动请求路由器信息
Type=4Source Quench请求降低发送速率(已弃用)

4. 补充说明

常用ICMPv6类型示例
类型名称用途
Type=133Router Solicitation主机请求路由器通告
Type=134Router Advertisement路由器通告网络配置
Type=135Neighbor Solicitation地址解析/重复地址检测
Type=136Neighbor Advertisement响应NS报文

四、ICMP报文基础结构

ICMP报文是封装在IP数据包中的控制消息,其基本格式如下:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                         Message Body                            +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段说明​:

​Type​:8位,标识报文类型(如0=Echo Reply,3=Destination Unreachable)
​Code​:8位,子类型(含义取决于Type值)
​Checksum​:16位,校验和(覆盖整个ICMP报文)
​Message Body​:可变长度,具体内容因类型而异

协议设计哲学​
ICMP本质上是一个"网络层的管理协议",它通过简单的报文交互实现了复杂的网络诊断和错误报告功能,是TCP/IP协议族中"轻量级控制"的典范设计。

http://www.lryc.cn/news/600740.html

相关文章:

  • Matlab学习笔记:自定义函数
  • java基础(day16)set-map
  • DAY24 元组和OS模块
  • 【安全漏洞】网络守门员:深入理解与应用iptables,守护Linux服务器安全
  • Java基础-文件操作
  • spring Could 高频面试题
  • 面试问题总结——关于OpenCV(二)
  • 详解力扣高频SQL50题之619. 只出现一次的最大数字【简单】
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——6. 传统算法实战:用OpenCV测量螺丝尺寸
  • 人工智能之数学基础:概率论之韦恩图的应用
  • Java 镜像减肥记:Docker 多阶段构建全攻略
  • 统计学08:概率分布
  • 【SSM】第二章 网上蛋糕项目商城-首页
  • lottie 动画使用
  • MySQL数据库本地迁移到云端完整教程
  • 《每日AI-人工智能-编程日报》--2025年7月26日
  • 使用Netty搭建一个网络聊天室
  • Java面试题及详细答案120道之(041-060)
  • 图片查重从设计到实现(5)Milvus可视化工具
  • 力扣872. 叶子相似的树
  • 如何在 Ubuntu 24.04 或 22.04 中创建自定义 Bash 命令
  • Sklearn 机器学习 数值指标 entropy熵函数
  • 认识泛型、泛型类和泛型接口
  • 好的编程语言设计是用简洁清晰的原语组合复杂功能
  • 消息缓存系统
  • JavaEE初阶第十一期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(九)
  • 《计算机组成原理与汇编语言程序设计》实验报告二 基本数字逻辑及汉字显示
  • 告别配置混乱!Spring Boot 中 Properties 与 YAML 的深度解析与最佳实践
  • 非定长滑动窗口(持续更新)
  • Netty中AbstractChannelHandlerContext源码分析