20 张图解: ping 的工作原理

20 张图解: ping 的工作原理

前言

在日常生活或工作中,我们在判断与对方网络是否畅通,使用的最多的莫过于 ping 命令了。

那你知道 ping 是如何工作的吗?” —— 来自小林的灵魂拷问

可能有的小伙伴奇怪的问:“我虽然不明白它的工作,但 ping 我也用的贼 6 啊!”

你用的是 6 ,但你在面试官面前,你就 6 不起来了,毕竟他们也爱问。

所以,我们要抱有「知其然,知其所以然」的态度,这样就能避免面试过程中,出门右拐的情况了。

来自面试官的灵魂拷问

来自面试官的灵魂拷问

不知道的小伙伴也没关系,今天我们就来搞定它,搞懂它。消除本次的问号,让问号少一点

20 张图解: ping 的工作原理

正文 IP协议的助手 —— ICMP 协议

ping 是基于 ICMP 协议工作的,所以要明白 ping 的工作,首先我们先来熟悉 ICMP 协议

ICMP 是什么?

ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议

里面有个关键词 —— 控制,如何控制的呢?

网络包在复杂的网络传输环境里,常常会遇到各种问题。当遇到问题的时候,总不能死的不明不白,没头没脑的作风不是计算机网络的风格。所以需要传出消息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局面。

ICMP 功能都有啥?

ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。

在 IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知

ICMP 目标不可达消息

ICMP 目标不可达消息

如上图例子,主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器 2 未能发现主机 B 的存在,这时,路由器 2 就会向主机 A 发送一个 ICMP 目标不可达数据包,说明发往主机 B 的包未能成功。

ICMP 的这种通知消息会使用 IP 进行发送 。

因此,从路由器 2 返回的 ICMP 包会按照往常的路由控制先经过路由器 1 再转发给主机 A 。收到该 ICMP 包的主机 A 则分解 ICMP 的首部和数据域以后得知具体发生问题的原因。

ICMP 包头格式

ICMP 报文是封装在 IP 包里面,它工作在网络层,是 IP 协议的助手。

ICMP 报文

ICMP 报文

ICMP 包头的类型字段,大致可以分为两大类:

一类是用于诊断的查询消息,也就是「查询报文类型

另一类是通知出错原因的错误消息,也就是「差错报文类型

常见的 ICMP 类型

常见的 ICMP 类型 查询报文类型

回送消息 —— 类型 0 和 8

回送消息用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息,ping 命令就是利用这个消息实现的。

ICMP 回送消息

ICMP 回送消息

可以向对端主机发送回送请求的消息(ICMP Echo Request Message,类型 8),也可以接收对端主机发回来的回送应答消息(ICMP Echo Reply Message,类型 0)。

ICMP 回送请求和回送应答报文

ICMP 回送请求和回送应答报文

相比原生的 ICMP,这里多了两个字段:

标识符:用以区分是哪个应用程序发 ICMP 包,比如用进程 PID 作为标识符;

序号:序列号从 0 开始,每发送一次新的回送请求就会加 1, 可以用来确认网络包是否有丢失。

选项数据中,ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

差错报文类型

接下来,说明几个常用的 ICMP 差错报文的例子:

目标不可达消息 —— 类型 为 3

原点抑制消息 —— 类型 4

重定向消息 —— 类型 5

超时消息 —— 类型 11

目标不可达消息(Destination Unreachable Message) —— 类型为 3

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwgzzg.html