Ping原理详解
关注「开源Linux」,选择“设为星标”
回复「学习」,有我为您特别筛选的学习资料~
前言
Ping是排除设备访问故障的常见方法。它使用Internet控制消息协议ICMP(Internet Control Message Protocol)确定以下内容:
远程设备是否处于可访问状态。
访问远程设备时是否丢失报文。
本端与远程设备之间通信的往返延迟。
Ping原理
现在以一个实例来说明Ping的实现过程。
如下图所示,PC1想要Ping通PC2,即Ping 11.1.1.2。

PC1的Ping程序生成一个ICMP请求报文。
如果PC1没找到下一跳,则得不到下一跳的IP,也得不到下一跳的MAC地址,以太帧头无法进行封装,于是PC1就Ping不通PC2。
如果PC1找到了下一跳,得到了下一跳的IP,但此时还不知道下一跳的MAC地址,故PC1要发送ARP广播请求。
ICMP报文沿协议栈向下传输到IP层,封装IP头,包含源地址IP与目的地址IP。
在此封装过程中,IP层已经根据IP地址和掩码判断出了源IP与目的IP不属于同一网段。
ICMP报文再向下传到链路层,准备进行以太帧头的封装,但由于无法知道目的MAC地址,暂时无法进行封装。
由于已经知道了源IP与目的IP不属于同一网段,故PC1要查找FIB表,找自己的下一跳。
下一跳(Switch a口10.1.1.2/24)收到此请求以后,发现请求所对应的IP地址是自己,于是回复一个ARP单播应答给PC1,此应答包含了10.1.1.2/24所对应的MAC地址。
PC1此时已经收到ARP应答,得到了下一跳的MAC地址,进行以太帧头的封装,然后将数据报发送给Switch。
当PC1向Switch发送ARP请求时,将自己的IP地址到物理地址的映射写入ARP请求中。当Switch收到PC1的ARP请求后,Switch就将PC1的这一映射写入到了自己的ARP缓存中。这是因为以后很可能Switch也要向PC1进行数据传送,为了以后彼此通信的方便,避免总是发送ARP请求及应答,减少网络上的通信。
Switch收到数据报文后,剥掉以太帧头,上送到IP层,发现IP首部中的目的IP地址11.1.1.2/24不是自己,需要转发,故查找自己的路由表,重新进行数据报文的封装。
当封装到以太帧头时,发现目的MAC地址(11.1.1.2/24对应的MAC地址)未知,故Switch也要发送ARP广播请求。
PC2收到此请求以后,发现请求所对应的IP地址是自己,于是回复一个ARP单播应答给Switch,此应答包含了11.1.1.2/24所对应的MAC地址。
与前面Switch学习PC1的ARP映射一样,PC2也相应地在自己的ARP缓存中记录了Switch b口的IP地址到物理地址的映射。
Switch此时已经收到ARP应答,得到了PC2的MAC地址,进行以太帧头的封装。然后将数据报发送给PC2。
PC2收到此数据报文后,拆封以太帧头,拆封IP首部后发现是个ICMP请求报文,于是会回复一个ICMP应答报文给PC1。此时的源IP地址变成了PC2的IP地址11.1.1.2/24,目的IP地址变成了PC1的IP地址10.1.1.1/24。
由于目的IP与源IP不在同一网段,所以PC2也要查找FIB表,经查找得知下一跳为Switch b口11.1.1.1/24。如前所述,PC2的ARP缓存中已经记录了Switch b口的映射信息,故不需要再向Switch发送ARP请求,直接在ARP缓存中读到Switch 11.1.1.1/24的MAC地址进行封装,将数据包发给Switch。
同理Switch也不需要向PC1发送ARP请求,直接在自己的ARP缓存中读到PC1的MAC地址,将数据报文转发给PC1。
PC1收到数据报文后,逐层拆封以太帧头、IP首部,得到ICMP应答报文,显示Ping通。
关注「开源Linux」加星标,提升IT技能
Ping原理详解的更多相关文章
- CentOS 6.5 iptables原理详解以及功能说明
CentOS 6.5 iptables原理详解以及功能说明 来源 https://blog.51cto.com/tanxw/1389114 前言 iptables其实就是Linux下的一个开源的信息过 ...
- 局域网 ARP 欺骗原理详解
局域网 ARP 欺骗原理详解 ARP 欺骗是一种以 ARP 地址解析协议为基础的一种网络攻击方式, 那么什么是 ARP 地址解析协议: 首先我们要知道, 一台电脑主机要把以太网数据帧发送到同一局域网的 ...
- I2C 基础原理详解
今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...
- Zigbee组网原理详解
Zigbee组网原理详解 来源:互联网 作者:佚名2015年08月13日 15:57 [导读] 组建一个完整的zigbee网状网络包括两个步骤:网络初始化.节点加入网络.其中节点加入网络又包括两个 ...
- 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解
CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...
- SSL/TLS 原理详解
本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...
- 锁之“轻量级锁”原理详解(Lightweight Locking)
大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的性能往往不如人意. 原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖 ...
- [转]js中几种实用的跨域方法原理详解
转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...
- 节点地址的函数list_entry()原理详解
本节中,我们继续讲解,在linux2.4内核下,如果通过一些列函数从路径名找到目标节点. 3.3.1)接下来查看chached_lookup()的代码(namei.c) [path_walk()> ...
随机推荐
- 深入理解Java虚拟机-垃圾收集算法
一.判断对象是否可进行回收 1.引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不可能再被使用的.但是主流的 ...
- kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?
Kafka 分布式的单位是 partition,同一个 partition 用一个 write ahead log 组织, 所以可以保证 FIFO 的顺序.不同 partition 之间不能保证顺序. ...
- springboot使用@Value注入properties文件中的值,中文乱码
最近开发一个需求,讲一个中文值配置在properties文件中,然后代码中使用@Value注解进行注入使用,然而出现了如下状况: 中文出现乱码,将代码修改如下: String str = new St ...
- vue集成CKEditor构建框架的使用,遇到富文本框不出现工具栏等操作
官方关于Vue集成CKEditor富文本框的文档:https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/framew ...
- python 基础数据类型汇总
数据类型小结(各数据类型常用操作) 一.数字/整型int int()强行转化数字 二.bool类型False&True bool()强行转化布尔类型. 0,None,及各个空的字符类型为Fal ...
- ctfhub web信息泄露备份文件下载(网站源码,back文件)
网站源码 进入环境,首先我们用bp抓一下包 在HTTP请求方式GET/后添加两个负载,一个用于爆破文件名,一个用于爆破后缀名 得知网页源码的备份形式为www.zip,下载网页源码 打开记事本文件 发现 ...
- USB2.0接口EMC设计标准电路
- React 可视化开发工具 Shadow Widget 非正经入门(之五:指令式界面设计)
本系列博文从 Shadow Widget 作者的视角,解释该框架的设计要点.本篇解释 Shadow Widget 中类 Vue 的控制指令,与指令式界面设计相关. 1. 指令式界面设计 Vue 与 A ...
- Emscripten教程之代码可移植性与限制(一)
Emscripten教程之代码可移植性与限制(一) 翻译:云荒杯倾本文是Emscripten-WebAssembly专栏系列文章之一,更多文章请查看专栏.也可以去作者的博客阅读文章.欢迎加入Wasm和 ...
- PAT B1051 复数乘法
输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i 解题思路: 1.读入R1.P1.R2.P2. 2.A=(R1*R2)cos(P1+P2),B=(R1*R2)sin(P1 ...