ping某个域名的详细过程

在前一篇文章中,我们已经对ping命令的整个过程做了一个详解。但是,前一篇文章中所涉及到的两种ping命令使用情况,都是ping的IP,在这篇文章中,我们将要详细讲解ping某个域名的整个过程。


一、ICMP协议


在了解ping命令之前,我们首先需要了解一下ICMP协议,即:网络控制消息协议(Internet Control Message Protocol)。


ICMP是TCP/IP协议族的一个子协议,工作在网络互联层(网络层)。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。


几种常用的ICMP报文类型如下表所示:


ICMP报文的格式如下图所示:


二、地址解析协议ARP


我们经常会遇到这样的问题,已经知道了一个主机的IP地址,需要找到其对应的物理地址。因为将IP数据报封装到MAC帧里面的时候需要知道目的地址的MAC地址。地址解析协议ARP的作用就是根据主机的IP地址来获得物理地址。

每个主机都设有一个ARP高速缓存(ARP cache),这里面放着的是主机已经知道的IP地址和MAC地址的映射表,并且这个映射表还是经常动态更新的。


1)ARP的工作原理

当主机A想要同本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如果有,就在ARP高速缓存中查找器对于的硬件地址,再把这个硬件地址写入MAC帧里,然后通过局域网把MAC帧发往此硬件地址。也有可能在ARP高速缓存中查不到主机B的IP地址(主机A缓存为空,或主机B刚加入局域网),这样也就无法知道主机B的MAC地址,这时候就需要使用到ARP了,按以下步骤来获得主机B的硬件地址。

主机A的ARP进程在本局域网上广播发送一个ARP请求分组,以广播的形式,格式如图a所示。

在本局域网上的所有主机上运行的ARP进程都受到了这个ARP请求分组。

主机B在ARP请求分组中发现了自己的IP地址,就向A主机发送ARP响应分组,以单播的形式直接发给A,以如图b所示。同时主机B知道了A的IP地址和MAC地址,就将主机A的IP地址和MAC地址写入ARP高速缓存中。其他主机在对比IP地址之后,发现与自己的IP地址不同,就丢掉分组。

主机A收到主机B的ARP响应分组之后,这样就知道了主机B的MAC地址,同时把主机B的IP地址和MAC地址写入ARP高速缓存。


上面所描述的情况是在同一局域网下的情景,如果主机A要同不在同一局域网下的主机B进行通信,发送IP数据报。首先主机A将主机B的IP地址同自己的子网掩码进行比对,发现不在同一局域网内,则利用ARP请求分组,根本局域网上的路由器的IP地址来获取路由器的MAC地址,然后将剩下的工作交给路由器去做即可。


2)ARP的四种典型情况

①发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时利用ARP找到目的主机的硬件地址。

②发送方是主机,要把IP数据报发送到另一个网络上的一个主机。这时利用ARP找到本网速上的一个路由器的硬件地址,然后把剩下的工作交给路由器去完成。

③发送方是路由器,要把IP数据报发送到另一个网络上的一个主机。这时利用ARP找到本网络上的另一个路由器的硬件地址,然后把剩下的工作交个这个路由器去完成。

④发送方是路由器,要把IP数据报发送到本网络上的一个主机。这时利用ARP找到目的主机的硬件地址。


三、ping某个域名的整个过程


ICMP的一个重要应用就是分组网间探测PING(Packe InterNet Groper),用来测试主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子,没有经过传输层的TCP或UDP。


ping某个域名相对于ping IP地址来说,多了一些步骤,主要用来获取域名对应的IP地址,整个过程如下:

1、主机查找本地系统Hosts文件的DNS缓存,如果存在该域名对应的IP,则获取IP,跳转到第8步;如果不存在,则继续。

2、主机向本网络路由器发起请求,查找路由DNS缓存,如果存在该域名对于的IP,则获取IP,跳转到第8步;如果不存在,则继续。

3、路由器向本地ISP(互联网提供商)的DNS服务器发起请求,查找DNS服务器的缓存,如果存在该域名对应的IP,则跳转到第7步;如果不存在,则继续。

4、本地DNS服务器向根域名服务器发起请求,根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。

5、本地域名服务器向顶级域名服务器dns.com进行查询,顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。

6、本地域名服务器向权限域名服务器dns.abc.com进行查询,权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。 

7、本地域名服务器最后把查询结果——该域名对应的IP地址告诉给主机。

8、至此,主机知道了该域名的IP地址。



----------------------------------(以上部分主要是根据域名获取对应的IP地址,涉及DNS)-----------------------------------


9、主机通过子网掩码判断该IP地址是本网段还是跨网段,由于本网段比较简单,我们以跨网段进行讲解。

10、主机先查看本地ARP高速缓存,查看表中是否有本网络路由器(网关)的MAC地址,如果有,则获取MAC地址,跳转到第12步;如果没有,则继续。

11、主机使用ARP解析协议获取到本网段路由的MAC地址。

12、至此,主机知道本网络一个路由的MAC地址。

---------------------------------(以上部分主要是获取本网络一个路由的MAC地址,涉及ARP)-----------------------------

13、主机将ICMP报文封装成IP数据报,IP数据报的源地址为主机的IP地址,目的地址是域名对应的IP地址;

14、主机将IP数据报封装成MAC帧,MAC帧的源地址为主机的MAC地址,目的地址是路由器的MAC地址;

12、路由器接收到ICMP报文之后,发现MAC帧的目的地址是自己,IP地址是主机想要访问的IP地址,则将MAC帧的源地址改为自己的MAC地址,目的地址改为本网段另一个路由的MAC地址(也要通过ARP协议获取),转发下去...

13、直到最后一个路由根据ARP协议,找到了主机想要访问的IP地址对应的主机的MAC地址,然后将ICMP报文封装成MAC帧发送给该域名主机。

14、由于ARP协议具有相互学习性,域名主机接收到主机发送的ICMP回送请求报文之后,将向本网络路由发送ICMP回送回答报文,该路由又会转发下去...

15、当主机收到域名主机发送的ICMP回送回答报文之后,这样就表明该主机到域名主机是连通可达的。


参考文献:

1、一张图看懂DNS域名解析全过程 http://www.maixj.net/ict/dns-chaxun-9208

2、DNS解析过程原理【深入浅出详解】http://www.ecdoer.com/post/dns.html

3、DNS解析过程详解 http://blog.chinaunix.net/uid-28216282-id-3757849.html

4、DNS原理总结及其解析过程详解 http://blog.csdn.net/yipiankongbai/article/details/25031461

5、当你在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?

      http://www.nowcoder.com/questionTerminal/4150a74bd14d4bd3a0d3f133376c97c7

6、PING的原理以及ICMP协议 http://www.lxway.com/19149084.htm

7、IP数据包的传输全过程详解 http://www.cnblogs.com/coffeegg/archive/2011/12/07/2279880.html

8、ping某域名的整个流程 http://blog.csdn.net/hjason2042/article/details/7975707

9、ping 未知域名的全过程 http://blog.sina.com.cn/s/blog_7c35df9b0100vomk.html

10、ping命令整个过程详解 http://blog.csdn.net/guoweimelon/article/details/50859658


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Magicodes.IE之导入学生数据教程

基础教程之导入学生数据说明本教程主要说明如果使用Magicodes.IE.Excel完成学生数据的Excel导入。要点本教程使用Magicodes.IE.Excel来完成Excel数据导入需要通过创建Dto来完成导入Magicodes.IE.Excel可以根据Dto以及特性设置来自动生成导入的Excel模板,数据验证&am…

IP地址分类详解

一、IP地址简介 IP,即网际协议(Internet Protocol),或称互联网协议,是用于报文交换网络的一种面向数据的协议。 IP是在TCP/IP协议中网络层的主要协议,任务是仅仅根据源主机和目的主机的地址传送数据。为此目…

[ASP.NET Core 3框架揭秘] 文件系统[1]:抽象的“文件系统”

ASP.NET Core应用 具有很多读取文件的场景,比如配置文件、静态Web资源文件(比如CSS、JavaScript和图片文件等)以及MVC应用的View文件,甚至是直接编译到程序集中的内嵌资源文件。这些文件的读取都需要使用到一个IFileProvider对象。…

[原]调试PInvoke导致的内存破坏

缘起 最近项目中遇到一个诡异的问题,程序在升级到.net4.6.1后,执行某个功能时会崩溃,提示访问只读内存区。大概规律如下:debug版不崩溃,release版稳定崩溃。只有x64位的程序崩溃,32位及anycpu编译出来的程序运行不会崩…

被忽略的TraceId,可以用起来了

前言.NetCore日志,相信大家多少都接触过,博客园有关 ① AspNetCore依赖注入第三方日志组件 ②第三方日志组件Nlog,Serilog 应用方法的博文层出不穷。结合程序的部署结构,本文分单体和微服务聊一聊AspNetCore中追踪日志流的方法。TraceIdAsp…

TCP协议详解

一、TCP协议简介 TCP协议,即传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。在因特网协议族中,TCP层是位于IP层之上,应用层之下的中间层。尽管IP层只…

UDP协议详解

一、UDP协议简介 UDP协议,即用户数据报协议(User Datagram Protocol),是一个简单的面向数据报的传输层协议。UDP协议只在IP数据报服务商增加了很少一点的功能,就是复用和分用,以及差错检测的功能。 二、UDP…

冰雪奇缘,白色世界:四个IT人的四姑娘山双桥沟游记

去年9月初去了川西的稻城亚丁,体会了金色世界秋日童话,还写了一篇游记《从你的全世界路过-一群程序员的稻城亚丁游记》,也是得到了很多朋友和童鞋的点赞。今年11月初趁着周末的两天时间和朋友去了川西的四姑娘山,体会了白色世界冰…

TCP三次握手建立连接

一、三次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程。最开始的时候两端的TCP进程都处于ClOSED(关闭)状态。 这时候,A主动打开连接…

[原]排错实战——通过对比分析sysinternals事件修复程序功能异常

缘起 最近,我们程序的某个功能在一台机器上不正常,但是在另外一台机器上却是正常的。代码是同一份,vs版本也一样(打的补丁也一样)。编译出来的程序在两台电脑上运行的结果就是不一样。惊不惊喜,意不意外&am…

[原]windbg调试系列——崩溃在ComFriendlyWaitMtaThreadProc

前言 这是几年前在项目中遇到的一个崩溃问题,崩溃在了ComFriendlyWaitMtaThreadProc()里。没有源码,耗费了我很大精力,最终通过反汇编并结合原代码才最终搞清楚了事情的来龙去脉。本文的分析是基于真实项目进行的,中间略去了很多反…

TCP四次握手释放连接

一、四次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程。最开始的时候两端的TCP进程都处于ESTABLISHED(已建立连接)状态。 这时候,A…

开源WPF控件库MaterialDesignInXAML推荐

今天介绍一个开源的C# WPF开源控件库,非常漂亮,重点是开源哦WPF做桌面开发是很有优势的,除了微软自带的控件外,还有很多第三方的控件库,比如收费的Dev Express For WPF、Telerik For WPF等,及Github上开源免…

TCP连续ARQ协议和滑动窗口协议

TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输。 一、ARQ协议 ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模型中数据链路层和传输层的错误纠正协议之…

ASP.NET Core 集成测试中模拟登录用户的一种姿势

不管哪种用户验证方式,最终都是在验证成功后设置 HttpContext.User ,后续处理环节通过 HttpContext.User 获取用户信息。如果能直接修改 HttpContext.User ,就能达到模拟登录的目的,而 ASP.NET Core 的中间件(middlewa…

【NServiceBus】什么是Saga,Saga能做什么

前言Saga单词翻译过来是指尤指古代挪威或冰岛讲述冒险经历和英雄业绩的长篇故事,对,这里强调长篇故事。许多系统都存在长时间运行的业务流程,NServiceBus使用基于事件驱动的体系结构将容错性和可伸缩性融入这些业务处理过程中。 当然…

数据一致性基本知识

在分布式系统中,我们经常提及CAP定理,即一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)。在本文中,我们将对数据一致性这一知识进行基本回…

分享一次与SharpDX坑爹Bug刚正面的过程

和SharpDX坑爹的Variant刚正面几个月前我写了这篇文章《.NET中生成动态验证码》文章,其实里面藏着一个大坑。运行里面的代码,会发现运行的 gif图片并没有循环播放: 细心的网友也注意到了这个问题:……但后来他备注说“已解决”&am…

EF Core 3.0查询

随着.NET Core 3.0的发布,EF Core 3.0也随之正式发布,关于这一块最近一段时间也没太多去关注,陆续会去对比之前版本有什么变化没有,本节我们来看下两个查询。分组我们知道在EF Core 3.0版本之前,对于分组查询是在客户端…

经典排序算法(1)——冒泡排序算法详解

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (1)基本思想 冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据…