ICMP

ICMP是一个网络层的协议,定义了网络层控制和传递消息的功能。ICMP是Internet控制报文协议,ICMP被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程,ICMP报文是在IP数据报内部被传输的。

ICMP包含几种不同的消息,其中ping程序借助于echo request消息,主机可通过它来测试网络的可达性,ICMP Echo Reply消息表示该节点是可达的。ICMP 还定义了源抑制(source quench)报文。当路由器的缓冲区满后,送人的报文被丢弃,此时路由器向发送报文的主机发送源抑制报文,要求降低发送速率。

差错报告是指产生错误时,ICMP只向数据报的源发端回送差错情况,源必须把差错交给一个应用程序或采取其他措施来纠正。

ICMP报文帧和报文格式如下图所示:

报文帧

报文格式

ICMP功能概括如下:

(1)检查目的站的可到达性与状态:主机或路由器向指定的站发送ICMPECHO请求报文,请求报文包含一个可选的数据区;收到ECHO报文的机器应立即回应一个ECHO应答报文,应答报文包含了请求报文中数据的副本,如ping。

(2) 目的端不可到达报告:向源发送一个目的端不可到达报文,并丢弃数据报。

(3)拥塞和数据流控制:高速的计算机与低速的网络处理能力不匹配;多个计算机要同时通过一个网络的路由器等,发生拥塞的路由器为每个丢弃的数据报发送一个源抑制报文。

(4)改变路由请求:假定路由器是知道正确路由的

(5)检测循环或过长的路由:一旦路由器因数据报的下一跳计数器为零或等待分段重组超时就向源发回一个ICMP超时报文,造成生存期到时还是超时等问题的主要原因是:出现循环路由;源和目的离得太远(超长)。

(6)报告其他问题:当路由或主机发现一个数据报的问题时(如不正确的数据报头),便向源发端发送-个参数问题的ICMP报文,指针标识数据报中产生问题的字节

(7)时钟同步和传送时间估计值:计算请求到目的地,被转换成为应答及返回所需的时间,计算网络传送时间估计远程和本地时钟的区别。

(8)获得子网地址的掩码:为了了解本地网络使用的子网掩码,主机可向路由器发出一个地址掩码请求(address mask request)报文,并可接收到一个地址掩码报文。

(9)用ICMP报文跟踪路由(traceroute工具):利用ICMP超时报文发现目的地的一条路径上有路由器列表,将目的列表等信号带回到源。

IGMP

Internet组管理协议,IGMP报文能够让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。正如ICMP一样,IGMP也被当作IP层的一部分。IGMP报文通过IP数据报进行传输,它有固定的报文长度,没有可选数据。当IP首部中协议字段值等于2时,即表明该IP数据报为IGMP报文。IGMP报文的具体格式如下图所示。

IGMP报文格式

(1)版本字段:取1。

(2)类型字段:当该字段为1时,表示该IGMP消息是一个主机从属关系查询消息,它使路由器能够查询网络上多播组的成员;当该值为2时,表明该消息是一个主机从属关系报表消息,它使主机能够显示组中成员的关系,是对主机关系查询的响应。

(3)组地址字段:指明多播组地址。当IGMP消息是主机从属关系查询消息时,该字段为0;当IGMP消息是主机从属关系报表消息时,该字段中保存的是IP多播地址。