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 报文类型:


posted @ 2024-03-29 16:27  Désiré  阅读(80)  评论(0编辑  收藏  举报