Tim's Note

试问Coding应不好,却道:此心安处是吾乡

0%

辅助 IP 的 ICMP

1、ICMP 协议概述

ICMP 主要是用于确认 IP 包是否成功发送至目标地址,通知在发送过程中,IP 包被废弃的具体原因,改善网络设置等。有了这些功能就方便对网络进行诊断。

ICMP 也是基于 IP 协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议;

很好理解,如果主机 A 向 B 发送了报文,中途的路由器 2 却未发现主机 B 的存在,这个时候,路由器 2 便向 A 主机发送一个 ICMP 包,说明未能发往 B 主机:

mark

ICMP 大概分为两类报文:一类是通知出错原因、一类是用于诊断查询

mark

2、主要的 ICMP 消息

1、不可达消息

IP 路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达 ( Destination Unreachable Message) 的 ICMP 消息,并在这个消息中显示不可达的具体原因:

mark

2、ICMP 重定向消息
如果路由器发现发送端主机使用了次优的路径发送数据,那么它会返回一个 ICMP 重定向 (ICMP Redirect Message) 的消息给这个主机。在这个消息中包含了最合适的路由信息和源数据。这主要发生在路由器持有更好的路由信息的情况下。路由器会通过这样的 ICMP 消息给发送端主机一个更合适的发送路由,但是这样做很容易成为引发问题的原因,一般不这么干。

mark

3、超时消息

IP 包中有一个字段叫做 TTL (Time To Live,生存周期),它的值随着每经过一次路由器就会减 1,直到减到 0 时该 IP 包会被丢弃。此时 IP 路由器将会发送一个 ICMP 超时的消息 (ICMP Time Exceeded Message,错误号 0 ) 给发送端主
机,并通知该包已被丟弃。设置 IP 包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免 IP 包无休止地在网络上被转发。此外,有时可以用 TTL 控制包的到达范围,例如设置一个较小的 TTL 值,如下图所示:

mark

4、回送消息

ping 命令同样也是回送消息的体现

有一款充分利用 ICMP 超时消息的应用叫做 traceroute。它可以显示出由执行程序的主机到达特定主机之前历经多少路由器。它的原理就是利用 IP 包的生存期限从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的一种方法。这样可以将所有路由器的 IP 地址逐一呈现。这个程序在网络上发生问题时,是问题诊断常用的一个强大工具。具体用法是在 UNIX 命令行里输入 “traceroute 目标主机地址” 即可。

mark

欢迎关注我的其它发布渠道