一、        简介

ICMP(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议。

协议号为1

ICMP报文在IP报文内部

一、        ICMP类型:

ICMP报文主要有两个功能:查询报文和差错报文

二、        ICMP报文头:

//定义ICMP首部
typedef struct _icmphdr{
  unsigned char i_type; //8位类型
  unsigned char i_code; //8位代码
  unsigned short i_cksum; //16位校验和, 从TYPE开始,直到最后一位用户数据,如果为字节数为奇数则补充一位
  unsigned short i_id ; //识别号(一般用进程号作为识别号), 用于匹配ECHO和ECHO REPLY包
  unsigned short i_seq ; //报文序列号, 用于标记ECHO报文顺序
  unsigned int timestamp; //时间戳
}ICMP_HEADER;

一、        ICMP报文的各种状态:

目的不可达报文(Destination Unreachable Message)

找不到目的IP传递路径

       code:

              0 = net unreachable

              1 = host unreachable

              2 = protocol unreachable

              3 = port unreachable

              4 = fragmentation needed and DF set

              5 = source route failed

源端口抑制报文(Source Quench Message)

路由器在处理报文时会有一个缓存队列。如果超过了最大缓存队列,将无法处理,从而丢弃报文,并向源发送一个ICMP源冷却报文(Type为4),告诉对方不在接收报文了。

报文格式:

超时报文(Time Exceeded Message)

网络传输IP数据报的过程中,如果IP数据报的TTL值逐渐递减为0时,需要丢弃数据报,这时候路由器需要向源发送方发送ICMP超时报文(Type为11),code为0,表示传输过程中超时了。

参数错误报文(Parameter Problem Message)

当路由器或主机处理数据报文时,发现因为报文头的参数错误而不得不丢弃报文时,需要向源发送方发送参数错误报文(Type为12).当错误为0时,报文中的Pointer指出错误的字节位置。

改变路由重定向(Redirect Message)

当路由收到IP数据报,发现数据报的目的地址在路由表中没有,他就会发ICMP重定向报文(Type为5)个源发送方,告诉它发送的地址不在

回送请求和回答(Echo or Echo Reply Message)

Type为8是请求回显报文(Echo);Type(0)是回显应答报文(Echo Reply

)。请求回显包或回显应答报文属于查询报文,Ping就是用这种报文进行查询和应答的。

时间戳请求和回答(Timestamp or timestamp Reply Message)

时间戳报文时用来记录收发以及传输时间的报文Originate Timestamp记录的是发送方发送报文的时刻。Receive Timestamp记录的是接收方收到的报文的时刻;Transmit Timestamp表示回显这最后发送报文的时刻。

02-13 03:37