ICMP协议支持主机或路由器:
在一些实际的分组过程中,总会出现一些错误,出错的部分在网络层的处理就是将它丢弃掉,但是丢弃就结束了吗?当然不能!所以我们要针对具体的错误发送一个特定的ICMP的差错报告报文。
ICMP报告报文分为ICMP差错报告报文和ICMP询问报告报文。
ICMP差错报告报文(5种):
1终点不可达:当路由器或者主机不能交付数据报时就向源主机发送终点不可达报文。(无法准确交付)
2源点抑制:当路由器或者主机由于拥塞而丢弃数据报时,就像源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。(这种差错报告报文已经基本不使用了)(拥塞导致丢数据)
3时间超过报文:当路由器收到生存时间TTL=0的数据报时,除了丢弃该数据报外,还要向源点发送时间超过报文。当重点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已经收到的数据报片全部丢弃,并向源点发送时间超过报文。(TTL=0)
4参数问题:当路由器或者主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。(首部字段有问题)
5改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应该将数据报发送给另外的路由器。(可通过更好的路由)
ICMP差错报告报文数据字段:
不应该发送ICMP差错报文的集中情况:
1对ICMP差错报告报文不在发送ICMP差错报告报文。(ICMP差错报告报文也可能出错)
2对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
3对具有组播地址(组播是一点到多点(部分节点或者多个节点),和广播是有区别的,广播是一点到局域网所有节点)的数据报不发送ICMP差错报告报文。
4对具有特殊地址(127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
ICMP询问报告报文(主要掌握两种)
1回送请求和回答报文 主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或者路由器发送ICMP回送回答报文。测试目的站是否可达以及了解相关的状态。
2时间戳请求和回答报文 请某个主机或者路由器回答当前的日期和时间。用来进行时钟同步和测量时间。
3掩码地址请求和回答报文 不再使用
4路由器询问和通告报文 不再使用
ICMP的具体应用
ping 测试两个主机之间的连通性,使用了ICMP回送请求和回答报文。
Traceroute: 跟踪一个分组从源点到终点的路径,使用了ICMP时间超过差错报告报文。