侧边栏壁纸
  • 累计撰写 247 篇文章
  • 累计创建 16 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

ping 和 traceroute 的底层工作原理

kaixindeken
2021-04-19 / 0 评论 / 0 点赞 / 104 阅读 / 1,914 字

日常工作中,我们在测试是否可以连接到某个域名或 IP 时,通常会使用 ping 命令。

1.png

ping 是基于 ICMP 进行工作的,ICMP 全称 Internet Control Message Protocol,意为互联网控制报文协议。

ICMP 的主要功能包括,确认 IP 包是否成功送到目标地址,通知在发送过程中 IP 包被废弃的具体原因,改善网络设置等。

在网络通信中如果某个 IP 包因为某种原因未能到达目标地址,那么这个具体的原因将由 ICMP 负责通知。ICMP 这种通知报文会使用 IP 进行发送,ICMP 报文也是封装在 IP 包里面的。

ICMP 报文类型

ICMP 报文大致分为两类:一类是通知出错原因的错误消息(差错报文),另一类是用于诊断的查询消息(查询报文)。所有的报文类型如下:

1.png

其中最常见的就是类型 8 和 0,两者都是回送消息,用于进行通信的主机和路由器之间,判断所发送的数据包是否已经成功到达对端,可以向对端主机发送回送请求消息(类型 8),也可以接收对端主机发回来的回送应答消息(类型 0),常用的 ping 命令就是利用这个消息实现的。

ping 工作原理

ping 命令执行的时候,源主机首先会构建一个 ICMP 请求数据包,ICMP 数据包内包含多个字段。最重要的是两个,第一个是类型字段,对于请求数据包而言该字段为 8;另外一个是顺序号,主要用于区分连续 ping 的时候发出的多个数据包。每发出一个请求数据包,顺序号会自动加 1。

然后,由 ICMP 协议将这个数据包连同地址 220.181.57.216 一起交给 IP 层。IP 层将以 220.181.57.216 作为目的地址,本机 IP 地址作为源地址,加上一些其他控制信息,构建一个 IP 数据包。

接下来,需要加入 MAC 头,最后将它们传送出去。

主机 B 收到数据帧后,先检查它的目的 MAC 地址,并和本机的 MAC 地址对比,如符合,则接收,否则就丢弃。接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议。

主机 B 会构建一个 ICMP 应答包,应答数据包的类型字段为 0,顺序号为接收到的请求数据包中的顺序号,然后再发送出去给主机 A。

在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达(类型 3);如果接收到了 ICMP 应答包,则说明目标主机可达。

为了安全起见,某些机器和设备是禁止被 ping 的,所以,ping 不通并不意味着一定是网络不通,对于禁止 ping 命令的主机,需要通过 telnet 命令测试是否可以连接。

通过 traceroute 诊断网络

前面提到的 ping 使用的是 ICMP 的查询报文,下面我们再来介绍一个使用 ICMP 差错报文的工具 —— traceroute。

前面我们介绍过,IP 包中有一个字段叫 TTL,它的值随着每经过一个路由器减 1,直到为 0 时该 IP 包被丢弃。此时 IP 路由器会发送一个 ICMP 超时消息给发送端主机,并通知该包已丢弃。

traceroute 正是基于这一原理,它的参数指向某个目的 IP 地址,它会发送一个 UDP 的数据包。将 TTL 设置成 1,也就是说一旦遇到一个路由器或者一个关卡,就表示它“牺牲”了,于是,返回一个 ICMP 包,也就是网络差错包,类型是时间超时。接下来,将 TTL 设置为 2。如此反复,直到到达目的主机。这样,就拿到了所有的路由器 IP(不显示指定 TTL 默认返回所有中间路由器 IP):

1.png

注:中间某一跳路由器不返回 IP 地址而是 ***,说明在这一跳的路由器设置了不应答 ICMP。

在网络发生问题时,traceroute 是一个强大的诊断工具。

0

评论区