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()> ...
随机推荐
- Kafka 缺点?
由于是批量发送,数据并非真正的实时: 对于mqtt协议不支持: 不支持物联网传感数据直接接入: 仅支持统一分区内消息有序,无法实现全局消息有序: 监控不完善,需要安装插件: 依赖zookeeper进行 ...
- 什么是 rabbitmq ?
采用 AMQP 高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需 要确保提供方存在,实现了服务之间的高度解耦
- css文本溢出解决方案
1.普通单行截断省略 overflow:hidden; 文字长度超出限定宽度,则隐藏超出的内容) text-overflow:ellipsis;(设置文字在一行显示,不能换行) white-space ...
- 32 位和 64 位的 JVM,int 类型变量的长度是多数?
32 位和 64 位的 JVM 中,int 类型变量的长度是相同的,都是 32 位或者 4个字节.
- SDS-redis动态字符串
与C语言类似,redis自己创建了简单动态字符串SDS(Simple Dynamic String)即简单动态字符串,创建字符串类型的键值对,SDS表示字符串值,键值对的值为字符串对象 SDS用途可以 ...
- JS练习实例--编写经典小游戏俄罗斯方块
最近在学习JavaScript,想编一些实例练练手,之前编了个贪吃蛇,但是实现时没有注意使用面向对象的思想,实现起来也比较简单所以就不总结了,今天就总结下俄罗斯方块小游戏的思路和实现吧(需要下载代码也 ...
- Python使用逻辑回归估算OR值
第一种是统计学方法,需要用到 statsmodels包 statsmodels是统计和计量经济学的package,包含了用于参数评估和统计测试的实用工具 第二种是机器学习,需要使用sklearn中的L ...
- JavaScript 中 empty、remove 和 detach的区别
内容 empty.remove 和 detach的区别 jQuery 操作 DOM 之删除节点 方法名 元素所绑定的事件及数据是否也被移除 作用 $(selector).empty() 是 从被选元素 ...
- CCS基础样式表
一.css样式表 1.样式表分类 1.内联式 <p >This is an apple</p> 2.内嵌样式表 作为一个独立的区域 内嵌在网页里面,必须写在head标签里面 & ...
- 前端复制粘贴文字clipBoard.js的使用
1. vue 中的复制粘贴: <div class="mainTextItem" @click="copyTXTOne" id="copyOn ...