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

什么是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.xdnf.cn/news/16345.html

相关文章:

  • Android Data Binding 深度解析与实践指南
  • easy-llm-cli的安装和使用
  • 【web应用】基于Vue3和Spring Boot的课程管理前后端数据交互过程
  • Vue 3 与 Element Plus 中的 /deep/ 选择器问题
  • 论文阅读-RaftStereo
  • haproxy配置详解
  • QT核心————信号槽
  • 外带服务的温度:藏在包装里的“生活共情力”
  • [RPA] 日期时间练习案例
  • 二维数组相关学习
  • FastAPI入门:demo、路径参数、查询参数
  • 【图像理解进阶】如何在自己的数据集上释放segment anything模型方案的潜力?
  • 【GaussDB】构建一个GaussDB的Docker镜像
  • MySQL数据库本地迁移到云端完整教程
  • 20250726-4-Kubernetes 网络-Service DNS名称解析_笔记
  • 虚拟直线阈值告警人员计数算法暑期应用
  • MySQL性能优化配置终极指南
  • 【深基12.例1】部分背包问题 Java
  • 二分查找-268.丢失的数字-力扣(LeetCode)
  • ABP VNext + Razor 邮件模板:动态、多租户隔离、可版本化的邮件与通知系统
  • java面试题1
  • IOPaint 图像修复工具,学习笔记
  • openmv识别数字
  • 质数、因数、最大公约数经典问题整理
  • KNN 算法进阶:从基础到优化的深度解析
  • lesson24:Python的logging模块
  • 将文件移入回收站而不是直接删除
  • 7月25号打卡
  • 太极生两仪,两仪生四象,四象生八卦
  • 13.使用C连接mysql