1.背景

在日常生活或工作中,我们在判断与对方网络是否畅通,使用的最多的莫过于 ping 命令了。
“那你知道 ping 是如何工作的吗?” —— 灵魂拷问

2.ICMP

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

ICMP 是什么?

ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。
里面有个关键词 —— 控制,如何控制的呢?
网络包在复杂的网络传输环境里,常常会遇到各种问题。当遇到问题的时候,需要传出消息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局面。

ICMP 功能都有啥?

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

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

如上图例子,主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器 2 未能发现主机 B 的存在,这时,路由器 2 就会向主机 A 发送一个 ICMP 目标不可达数据包,说明发往主机 B 的包未能成功。
ICMP 的这种通知消息会使用 IP 进行发送 。
因此,从路由器 2 返回的 ICMP 包会按照往常的路由控制先经过路由器 1 再转发给主机 A 。收到该 ICMP 包的主机 A 则分解 ICMP 的首部和数据域以后得知具体发生问题的原因。

ICMP 包头格式

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

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

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

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

查询报文类型
回送请求和回答报文 —— 类型 8 和 0

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

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

3.ping

ping —— 查询报文类型的使用
接下来,我们重点来看 ping 的发送和接收过程。
同个子网下的主机 A 和 主机 B,主机 A 执行ping 主机 B 后,我们来看看其间发送了什么?

1、打个 ICMP 数据包 - 网络层
ping 命令执行的时候,源主机首先会构建一个 ICMP 回送请求消息数据包。

ICMP 数据包内包含多个字段,最重要的是两个:

第一个是类型,对于回送请求消息而言该字段为 8;

另外一个是序号,主要用于区分连续 ping 的时候发出的多个数据包。

每发出一个请求数据包,序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。

2、打个 IP 数据包 - 网络层:
然后,由 ICMP 协议将这个数据包连同地址 192.168.1.2 一起交给 IP 层。IP 层将以 192.168.1.2 作为目的地址,本机 IP 地址作为源地址,协议字段设置为 1 表示是 ICMP 协议,在加上一些其他控制信息,构建一个 IP 数据包。

3、加入 Mac 头信息 - 数据链路层
接下来,需要加入 MAC 头。如果在本地 ARP 映射表中查找出 IP 地址 192.168.1.2 所对应的 MAC 地址,则可以直接使用;如果没有,则需要发送 ARP 协议查询 MAC 地址,获得 MAC 地址后,由数据链路层构建一个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址;还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

4、接收端 拆解包:物理层-数据链路层-网络层
主机 B 收到这个数据帧后,先检查它的目的 MAC 地址,并和本机的 MAC 地址对比,如符合,则接收,否则就丢弃。
接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议。
5、接收端 构建响应包,返回给发送端
主机 B 会构建一个 ICMP 回送响应消息数据包,回送响应数据包的类型字段为 0,序号为接收到的请求数据包中的序号,然后再发送出去给主机 A。

在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 回送响应消息,则说明目标主机可达。
此时,源主机会检查,用当前时刻减去该数据包最初从源主机上发出的时刻,就是 ICMP 数据包的时间延迟。

当然这只是最简单的,同一个局域网里面的情况。如果跨网段的话,还会涉及网关的转发、路由器的转发等等。
但是对于 ICMP 的头来讲,是没什么影响的。会影响的是根据目标 IP 地址,选择路由的下一跳,还有每经过一个路由器到达一个新的局域网,需要换 MAC 头里面的 MAC 地址。
说了这么多,可以看出 ping 这个程序是使用了 ICMP 里面的 ECHO REQUEST(类型为 8 ) 和 ECHO REPLY (类型为 0)。

笔者的结果如图。

云青青兮欲雨,水澹澹兮生烟。
2022.3.14

计网:网络层协议ICMP相关推荐

  1. 计网 - IPv4 协议:路由和寻址的区别是什么?

    文章目录 Pre 什么是 IP 协议? IP 协议的工作原理 分片(Fragmentation) 增加协议头(IP Header) "鱼和熊掌"不能兼得--延迟.吞吐量.丢包率 延 ...

  2. 计网 - HTTP 协议_强制缓存和协商缓存的区别

    文章目录 Pre 请求响应和长连接 HTTP 2.0 的多路复用 HTTP 方法和 RestFul 架构 HTTP 方法 缓存 强制缓存 协商缓存 总结 Pre 超文本传输协议(HyperText T ...

  3. 计网常用协议全称及对应端口号

    FTP(文件传输协议) 全称:File Tranfer Protocol 端口号:21(用于链接) 20(用于传输数据) SMTP(简单邮件传输协议) 全称:Simple Mail Transfer ...

  4. 计网--- ARP 协议

    ARP 协议 一. ARP 协议 ①. ARP协议介绍 ②. ARP分组的格式 ③. ARP 的工作原理 一. ARP 协议 ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题. ...

  5. 计网 | PGP协议实验(邮件加密解密)

    一.实验目的 1.了解加密工具 PGP 的原理 2.熟悉 PGP 简单配置方法 二.实验环境 安装 PGP 加密软件:主机操作系统为 Windows 三.实验原理 PGP 加解密邮件的原理是什么? 公 ...

  6. 读《计算机网络》——深入浅出——以考研为目标学技术面试知识二刷计网——网络层

  7. 计算机网络层协议介绍icmp/arp

    目录 网络层的功能 IP数据包格式 ICMP协议介绍 ICMP协议的封装 Ping命令 ARP协议 ARP工作原理 网络层的功能 定义了基于IP协议的逻辑地址 连接不同的媒介类型 选择数据通过网络的最 ...

  8. 【网络层协议】计算机网络基础知识点

    文章目录 网络层协议的介绍 1.IP数据报 2.抓包协议学习 3.ICMP协议 3.1 ICMP协议(Internet控制报文协议) 3.2 ICMP协议的封装 4.ping命令学习 5.广播与广播域 ...

  9. 计网第四章 网络层(咕咕咕)

    计网第四章 网络层(更新ing 咕咕咕) 网络层提供的两种服务 面向连接的通讯:虚电路 虚电路知识一种逻辑上的连接,分组沿着这个逻辑转发而不是真的建立了一条物理线路. 面向无连接的通讯:数据报服务 网 ...

最新文章

  1. 百度提出PADDLESEG:一个高效的图像分割开发工具
  2. 清华本科、港科大准博士被指论文抄袭,网友:这是有技巧的“洗稿”
  3. java 数据库数据脱敏_Sharding-JDBC-数据脱敏
  4. linux sed给空文件首行插入_linux下批量修改文件后缀名以及合并多行
  5. 计算机专业2016高考录取分数线,中国科学院大学计算机科学与技术专业2016年在江苏理科高考录取最低分数线...
  6. 20 条非常实用的 Python 代码,建议收藏!
  7. Json与List的相互转换
  8. Wait Event Disk file operations I/O
  9. 华南理工大学计算机科学与工程学院篡改,华南理工大学涉嫌篡改成绩人员已被停职调查...
  10. HTML页面乱码怎么解决?
  11. python处理xps文件_自学WPF--第二十四课XPS文件处理
  12. springboot对接支付宝支付接口(详细开发步骤总结)
  13. java邮箱格式校验_Java代码实现非正则表达式检验邮箱格式是否合法
  14. 机器视觉实用工具集NO.16——指定监控区域运动物体闯入检测工具
  15. PTA新浪微博热门话题(题面毒瘤)
  16. git --allow-unrelated-histories
  17. 这位华裔天才数学家情商也蛮高,他给了25条职业建议
  18. ASP.NET MVC5 网站开发实践
  19. 飞控cpci计算机靶机公司,CPCI总线发控计算机组合研制
  20. 计算机显示器hdmi参数项目,DIY电脑冷知识:你的显示器应该接DP还是HDMI接口?...

热门文章

  1. 盖世神器PowerPro使用视频教程-1. 程序的安装概述
  2. 幼儿园计算机培训心得,幼儿教师培训心得体会
  3. [转]申瓯 JSY2000-06 程控电话交换机呼叫转移设置
  4. ccf-csp 201809-2 买菜
  5. linux c实现键盘模拟,C++模拟键盘按键的实例
  6. 利用水文分析方法提取山脊、山谷线
  7. 自已动手修改同花顺K线周期的快捷键
  8. iTween EaseType 效果
  9. 【Office】Visio无响应问题(打开形状样式功能区即卡死)的解决方案
  10. 机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM