ICMP 协议
什么是 ICMP 协议?
因特网控制报文协议 ICMP(Internet Control Message Protocol)是一个差错报告机制,是 TCP/IP 协议簇中的一个重要子协议,通常被 IP 层或更高层协议(TCP 或 UDP)使用,属于网络层协议,主要用于在 IP 主机和路由器之间传递控制消息,用于报告主机是否可达、路由是否可用等,比如常用的 Ping 工具就是基于 ICMP 协议。这些控制消息虽然并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有至关重要的作用。
ICMP 头部
- ICMP 头部包含如下五个字段:
type ICMP struct {
Type uint8
Code uint8
Checksum uint16
Identifier uint16
SequenceNumber uint16
}
其中:
Type 字段表示 ICMP 消息的类型;
Code 字段表示 ICMP 消息类型细分的子类型;
Checksum 字段表示 ICMP 报文的校验和,Checksum 是一种防止数据包在传输过程中被篡改的算法。
Identifier(标识符) 字段用于区分不同的 ICMP 进程。
SequenceNumber(序列号) 用于判断 ICMP 报文是否发生乱序或丢包。这个值会随着发送 ICMP 报文的数量而增加,接收方在收到 ICMP 报文后,会将相同的序列号发送给请求方。
不同的 Type 和 Code 值表示不同的 ICMP 报文类型,对应了数据包处理过程中可能出现的不同错误情况,不同类型的 ICMP 报文又分为差错报文和查询报文两种,下表解释了所有的 ICMP 报文类型:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码