为了更有效地转发IP数据报和提高交付成功的机会,在网络层使用了ICMP协议.ICMP允许主机或路由器报告差错情况和提供有关异常的报告.
ICMP报文是装在IP数据报中,作为其中的数据部分
ICMP数据报分为两类,即ICMP差错报告报文和ICMP询问报文
ICMP差错报告报文有以下几种:
终点不可达:当路由器或主机不能交付数据报是就向源点发送终点不可达报文.
源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应该把数据报的发送速率放慢.
时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文,当终点在预定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文
参数问题:当路由器或目的主机都到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文
改变路由:路由器把改变路由报文发送给主机,让主机知道下次应该将数据报发送给另外的路由器.(如果默认路由器发现主机发往某个目的地址的数据报的最佳路由不应当经过默认路由器而是应当经过网络上的另一个路由器R时,就用改变路由报文把这个情况告诉主机.于是,该主机就在其路由表中增加一个项目:到某某的地址应该经过路由器R)
ICMP差错数据报告报文中的数据字段都具有同样的格式.
- 把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段
- 再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP报文.
提取收到的数据报的数据字段的前8个字节是为了得到运输层的端口号以及运输层报文的发送序号
ICMP询问报文有以下几种:
回送请求或回答:由主机或路由器向一个特定的目的主机发出询问.收到此报文的主机必须给援助及或路由器发送ICMP回送回答报文.这种询问报文用来测试目的站是否可达以及了解其有关状态
时间戳请求和回答:请某个主机或路由器回答当前的日期和时间.可以用来进行时钟同步和测量时间.