一、 简介
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表示回显这最后发送报文的时刻。