1、ICMP 协议概述
ICMP 主要是用于确认 IP 包是否成功发送至目标地址,通知在发送过程中,IP 包被废弃的具体原因,改善网络设置等。有了这些功能就方便对网络进行诊断。
ICMP 也是基于 IP 协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议;
很好理解,如果主机 A 向 B 发送了报文,中途的路由器 2 却未发现主机 B 的存在,这个时候,路由器 2 便向 A 主机发送一个 ICMP 包,说明未能发往 B 主机:
ICMP 大概分为两类报文:一类是通知出错原因、一类是用于诊断查询
2、主要的 ICMP 消息
1、不可达消息
IP 路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达( Destination Unreachable Message)的 ICMP 消息,并在这个消息中显示不可达的具体原因:
2、ICMP 重定向消息
如果路由器发现发送端主机使用了次优的路径发送数据,那么它会返回一个 ICMP 重定向(ICMP Redirect Message)的消息给这个主机。在这个消息中包含了最合适的路由信息和源数据。这主要发生在路由器持有更好的路由信息的情况下。路由器会通过这样的 ICMP 消息给发送端主机一个更合适的发送路由,但是这样做很容易成为引发问题的原因,一般不这么干。
3、超时消息
IP 包中有一个字段叫做 TTL (Time To Live,生存周期),它的值随着每经过一次路由器就会减 1,直到减到 0 时该 IP 包会被丢弃。此时 IP 路由器将会发送一个 ICMP 超时的消息(ICMP Time Exceeded Message,错误号 0 )给发送端主
机,并通知该包已被丟弃。设置 IP 包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免 IP 包无休止地在网络上被转发。此外,有时可以用 TTL 控制包的到达范围,例如设置一个较小的 TTL 值,如下图所示:
4、回送消息
ping 命令同样也是回送消息的体现
有一款充分利用 ICMP 超时消息的应用叫做 traceroute。它可以显示出由执行程序的主机到达特定主机之前历经多少路由器。它的原理就是利用 IP 包的生存期限从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的一种方法。这样可以将所有路由器的 IP 地址逐一呈现。这个程序在网络上发生问题时,是问题诊断常用的一个强大工具。具体用法是在 UNIX 命令行里输入“traceroute 目标主机地址”即可。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于