Ping的过程详解
先看拓朴图:
我在这里讲拼的两情况,一种是同一网段内,一种是跨网段的ping ….
首先,如果主机A,要去拼主机B,那么主机A,就要封装二层报文,他会先查自己的MAC地址表,如果没有B的MAC地址,就会向外发送一个ARP广播包,如图:
其中ARP报文格式如下:
以太网目的MAC |
以太网源MAC |
帧类型 |
硬件类型 |
4 |
6 |
OP |
发送端以太网MAC |
发送端IP地址 |
目的MAC |
目的IP |
FF-FF-FF-FF-FF-FF |
00-50-56-C0-00-01 |
0806 |
0800 |
1 |
00-50-56-C0-00-01 |
1.1.1.1 |
00-00-00-00-00-00 |
1.1.1.3 |
其中OP
1 :表示ARP请求
2:表示ARP应答
3:表示RARP请求
4:表示RARP应答
首先,交换机会收到这个报文后,交换机有学习MAC地址的功能,所以他会检索自己有没有保存主机B有MAC,如果有,就返回给主机A,如果没有,就会向所有端口发送ARP广播,其它主机收到后,发现不是在找自己,就纷纷丢弃了该报文,不去理会。。直到主机B收到了报文后,就立即相应,我的MAC地址是多少,同时学到主机A的MAC地址,并按同样的ARP报文格式返回给主机A,如图:
ARP报文格式:
以太网目的MAC |
以太网源MAC |
帧类型 |
硬件类型 |
4 |
6 |
OP |
发送端以太网MAC |
发送端IP地址 |
目的MAC |
目的IP |
00-50-56-C0-00-01 |
00-50-56-C0-00-03 |
0806 |
0800 |
2 |
00-50-56-C0-00-03 |
1.1.1.3 |
00-50-56-C0-00-01 |
1.1.1.1 |
这时候主机A学到了主机B的MAC,就把这个MAC封装到ICMP协议的二层报文中向主机B发送,报文格式如下:
目的地址 |
源地址 |
… |
源IP |
目的IP |
… |
ICMP报文 |
00-50-56-C0-00-03 |
00-50-56-C0-00-01 |
1.1.1.1 |
1.1.1.3 |
Echo request |
当主机B收到了这个报文后,发现是主机A 的ICPM回显请求,就按同样的格式,返回一个值给主机A,这样就完成了同一网段内的ping过程…
目的地址 |
源地址 |
… |
源IP |
目的IP |
… |
ICMP报文 |
00-50-56-C0-00-01 |
00-50-56-C0-00-03 |
1.1.1.3 |
1.1.1.1 |
Echo answer |
在这里 我讲了这么久的局域网内的PING,实际过程的发生不到1毫秒….
再继续…
如果主机A要ping主机C,那么主机A发现主机C的IP和自己不是同一网段,他就去找网关转发,但是他也不知道网关的MAC情况下呢?他就会向之前那个步骤一样先发送一个ARP广播,学到网关的MAC,再发封装ICMP报文给网关路由器.
报文格式如下:
目的地址 |
源地址 |
… |
源IP |
目的IP |
… |
ICMP报文 |
00-50-56-C0-00-02 |
00-50-56-C0-00-01 |
1.1.1.1 |
2.1.1.1 |
Echo request |
当路由器收到主机A发过来的ICMP报文,发现自己的目的地址是其本身MAC地址,根据目的的IP2.1.1.1,查路由表,发现2.1.1.1/24的路由表项,得到一个出口指针,去掉原来的MAC头部.加上自己的MAC地址向主机C转发…(如果网关也没有主机C的MAC地址,还是要向前面一个步骤一样,ARP广播一下即可相互学到….路由器2端口能学到主机D的MAC,主机D也能学到路由器2端口的MAC..),报文格式如下:
目的地址 |
源地址 |
… |
源IP |
目的IP |
… |
ICMP报文 |
00-50-56-C0-00-05 |
00-50-56-C0-00-04 |
1.1.1.1 |
2.1.1.1 |
Echo request |
最后,在主机C已学到路由器2端口MAC,路由器2端口转发给路由器1端口,路由1端口学到主机A的MAC的情况下,他们就不需要再做ARP解析,就将ICMP的回显请求回复过来..报文格式大致如下:
目的地址 |
源地址 |
… |
源IP |
目的IP |
… |
ICMP报文 |
00-50-56-C0-00-04 |
00-50-56-C0-00-05 |
2.1.1.1 |
1.1.1.1 |
Echo Answer |
Ping的过程详解的更多相关文章
- ping命令执行过程详解
[TOC] ping命令执行过程详解 机器A ping 机器B 同一网段 ping通知系统建立一个固定格式的ICMP请求数据包 ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运 ...
- hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解
hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解 一,环境: 1,主机规划: 集群中包括3个节点:hadoop01为Master,其余为Salve,节点之间局域网连接 ...
- TortoiseGIT的安装过程详解
TortoiseGIT简介 TortoiseGIT 是Git版本控制系统的一个免费开源客户端,它是git版本控制的 Windows 扩展.可以使你避免使用枯燥而且不方便的命令行.它完全嵌入 Windo ...
- Hadoop MapReduce执行过程详解(带hadoop例子)
https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...
- Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- Cordova 打包 Android release app 过程详解
Cordova 打包 Android release app 过程详解 时间 -- :: SegmentFault 原文 https://segmentfault.com/a/119000000517 ...
- 理论经典:TCP协议的3次握手与4次挥手过程详解
1.前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一 ...
- Hadoop Mapreduce分区、分组、二次排序过程详解[转]
原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动 (1)最简单的过程: map - reduce (2) ...
随机推荐
- DataBase 之 表操作
1:向表中添加字段 Alter table [表名] add [列名] 类型 2: 删除字段 Alter table [表名] drop column [列名] 3: 修改表中字段类型 (可以修改列的 ...
- C#开发---利用特性自定义数据导出到Excel
网上C#导出Excel的方法有很多.但用来用去感觉不够自动化.于是花了点时间,利用特性做了个比较通用的导出方法.只需要根据实体类,自动导出想要的数据 1.在NuGet上安装Aspose.Cells或 ...
- hdfs: 数据流(二)
大部分的HDFS程序对文件操作需要的是一次写多次读取的操作模式. 一个文件一旦创建.写入.关闭之后就不需要修改了.这个假定简单化了数据一致的问题和并使高吞吐量的数据访问变得可能. 1. 读文件 从上图 ...
- PHP底层的运行机制与原理
PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可 ...
- javaweb学习总结二十一(servlet开发入门、servlet生命周期以及调用过程)
一:servlet开发入门 servlet是sun公司一门开发动态web资源的技术,下面编写一个servlet入门程序: 1:在tomcat服务器webapps目录下新建firstServlet目录, ...
- 物理CPU、物理核跟逻辑核的区分
一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术 ,所以您的电脑是双核的. 一 概念① 物理CPU 实际Server中插槽上的CPU个数 ...
- [转]T4模版引擎之生成数据库实体类
本文转自:http://www.cnblogs.com/lzrabbit/archive/2012/07/18/2597953.html 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实 ...
- toad for oracle 快捷键 转
序号 功能说明 快捷键 备注 1 隐藏查询结果 F2 2 查看对象详细信息 F4 3 清空屏幕 F7 4 调出以前执行的sql命令 F8 5 执行全部sql F9 6 直接执行当前sql CTRL+E ...
- 关于Hadoop之父Doug Cutting
生活中,可能所有人都间接用过他的作品,他是Lucene.Nutch .Hadoop等项目的发起人.是他,把高深莫测的搜索技术形成产品,贡献给普罗大众:还是他,打造了目前在云计算和大数据领域里如日中天的 ...
- Colossal Fibonacci Numbers(巨大的斐波那契数)UVA 11582
评测地址:http://acm.hust.edu.cn/vjudge/problem/41990 The i'th Fibonacci number f (i) is recursively de n ...