ICMP Internet控制报文协议
通常被认为是IP层的组成部分,一般被IP层或更高层(TCP、UDP)使用。
ICMP报文是在IP数据报内部被传输的。如图:
ICMP报文的格式如下:
报文的前4个字节都一样: 8bit类型,8bit代码,16bit检验和。
ICMP报文有不同的报文类型,不同类型由这个8bit的类型和8bit的代码共同决定。一个类型下可能有多个代码。
比如: 类型0表示回显应答(ping应答);类型1表示目的不可达,其中代码0表示网络不可达,代码1表示主机不可达,代码2表示协议不可达,代码3表示端口不可达等等...
报文也分为查询类型还是差错类型。因为有时要对差错报文进行特殊处理,比如对ICMP差错报文进行响应时就不会再生成一个ICMP差错报文...
当发生的是差错报文时,报文始终包含导致产生ICMP差错报文的原IP首部和数据部分的前8个字节(比如传输层的UDP或者TCP,这包含了端口号)。这里的原IP首部中的协议字段和前8个字节的端口号,可以判断出是哪个协议和哪个用户进程。
除了上述的ICMP差错报文不会再产生ICMP差错报文,一般目的地址是广播的数据报不会再产生ICMP差错报文了,这样防止广播风暴...
ICMP地址掩码请求与应答
ICMP时间戳请求与应答
ICMP端口不可达差错:
如果说报文发送到目的主机的未监听的端口,那么目的主机就会返回一个端口不可达的ICMP差错报文。traceroute就利用了这一点。
可以看出ICMP报文的数据部分,包含了原IP的首部和IP数据部分的前8个字节(这里就是UDP首部)。
时间: 2024-10-03 19:50:39