为了更有效转发IP数据报和提高交付成功的机会,在网络层使用了ICMP 网际控制报文协议。ICMP允许主机或路由器报告差错或提供一些需要注意的信息。
ICMP层次
ICMP 一般认为是三层的,ICMP报文不是高层协议,而是作为IP层数据报的数据
ICMP 报文分类
ICMP 分为两类,一类是 ICMP 查询报文,另一类是 ICMP 差错报文。
ICMP差错报文:
(1)终点不可达报文:当路由器或主机给该数据报寻路时,没有找到相应路径,不能交付数据报时,向源 IP 发回 ICMP 主机不可达
(2)源点抑制:路由器或主机因网络拥塞而丢弃数据报时,就向源点发送源点抑制报文,让源点到那时速率放慢
(3)时间超时:收到TTL生存时间为0的数据报或终点在规定时间内没有完全收到某个数据报时,就向源点发送时间超时报文
(4)参数问题:路由器户或主机收到的数据报的首部字段值不正确时,丢弃该数据报后向源点发送参数问题报文
(5)重定向(改变路由)差错报文:当一个路由器知道通向目的网络的最佳路由时,会用重定向报文告诉主机,这样,主机再一次发送数据报时不会发送到之前的路由,而是发送给最佳路由。举个例子:
1) 主机发送 IP 数据报给 R1,因为主机的默认路由指向的下一跳是 R1。
2) R1 收到数据报并且检查它的路由表,发现 R2 是发送该数据报的下一跳。当他将数据报发送给 R2 的时候,发现发送的接口与接受的端口是一样的,因此同时发送一个 ICMP 重定向报文给主机。
3) 主机接受到 ICMP 重定向报文后,接下来的数据报就发送给 R2,而不再发送给 R1。
重定向报文有什么规则?
- 重定向报文只能有路由器生成。
- 重定向报文是为主机而不是为路由器使用的
什么情况不会导致产生 ICMP 差错报文?
1)对于ICMP差错报文不产生ICMP差错报文
2) 目的地址是广播地址或者多播地址的 IP 数据报。
3) 数据报分片不是第一个分片的数据报片,都不发送ICMP差错报告报文
4) 源地址不是单个主机的数据包。
Ping 命令的具体过程是怎么样的?
Ping是利用ICMP协议包来侦测另一个主机是否可达
- 通过ARP寻找目的主机的MAC地址
- 用类型码为0的ICMP查询报文发请求,受到请求的主机则用类型码为8的ICMP查询报文回应
- 这样就完成了同一网段内的ping过程