DNS解析过程详解「建议收藏」

DNS解析过程详解「建议收藏」转载原文地址:http://blog.chinaunix.net/uid-28216282-id-3757849.html先说一下DNS的几个基本概念:一.根域就是所谓的“.”,其实我们的网

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

转载

原文地址:http://blog.chinaunix.net/uid-28216282-id-3757849.html

先说一下DNS的几个基本概念:

 

一. 根域

 

就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。

根域服务器我们知道有13台,但是这是错误的观点。

根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机。

具体的镜像分布可以参考维基百科。这些主机的内容都是一样的

二. 域的划分

根域下来就是顶级域或者叫一级域,

有两种划分方式,一种互联网刚兴起时的按照行业性质划分的com.,net.等,一种是按国家划分的如cn.,jp.,等。

具体多少你可以自己去查,我们这里不关心。

每个域都会有域名服务器,也叫权威域名服务器。

Baidu.com就是一个顶级域名,而www.baidu.com却不是顶级域名,他是在baidu.com 这个域里的一叫做www的主机。

一级域之后还有二级域,三级域,只要我买了一个顶级域,并且我搭建了自己BIND服务器(或者其他软件搭建的)注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限制的)。

比如a.www.baidu.com,在这个网址中,www.baidu.com变成了一个二级域而不是一台主机,主机名是a。

三. 域名服务器

能提供域名解析的服务器,上面的记录类型可以是A(address)记录,NS记录(name server),MX(mail),CNAME等。

(详解参见博客:域名解析中A记录、CNAME、MX记录、NS记录的区别和联系

A记录是什么意思呢,就是记录一个IP地址和一个主机名字,比如我这个域名服务器所在的域test.baidu.com,我们知道这是一个二级的域名,然后我在里面有一条A记录,记录了主机为a的IP,查到了就返回给你了。

如果我现在要想baidu.com这个域名服务器查询a.test.baidu.com,那么这个顶级域名服务器就会发现你请求的这个网址在test.baidu.com这个域中,我这里记录了这个二级域的域名服务器test.baidu.com的NS的IP。我返回给你这个地址你再去查主机为a的主机把。

这些域内的域名服务器都称为权威服务器,直接提供DNS查询服务。(这些服务器可不会做递归哦)

四.解析过程

那么我们的DNS是怎么解析一个域名的呢?

 

1.现在我有一台计算机,通过ISP接入了互联网,那么ISP就会给我分配一个DNS服务器,这个DNS服务器不是权威服务器,而是相当于一个代理的dns解析服务器,他会帮你迭代权威服务器返回的应答,然后把最终查到IP返回给你。

2.现在的我计算机要向这台ISPDNS发起请求查询www.baidu.com这个域名了,(经网友提醒:这里其实准确来说不是ISPDNS,而应该是用户自己电脑网络设置里的DNS,并不一定是ISPDNS。比如也有可能你手工设置了8.8.8.8)

3.ISPDNS拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话就直接返回。这个时候拿到的ip地址,会被标记为非权威服务器的应答

4.如果缓存中没有的话,ISPDNS会从配置文件里面读取13个根域名服务器的地址(这些地址是不变的,直接在BIND的配置文件中),

5.然后像其中一台发起请求。

6.根服务器拿到这个请求后,知道他是com.这个顶级域名下的,所以就会返回com域中的NS记录,一般来说是13台主机名和IP。

7.然后ISPDNS向其中一台再次发起请求,com域的服务器发现你这请求是baidu.com这个域的,我一查发现了这个域的NS,那我就返回给你,你再去查。

(目前百度有4台baidu.com的顶级域名服务器)。

8.ISPDNS不厌其烦的再次向baidu.com这个域的权威服务器发起请求,baidu.com收到之后,查了下有www的这台主机,就把这个IP返回给你了,

9.然后ISPDNS拿到了之后,将其返回给了客户端,并且把这个保存在高速缓存中。

 

 

下面我们来用 nslookup 这个工具详细来说一下解析步骤:

DNS解析过程详解「建议收藏」

从上图我们可以看到:

          第一行Server是:DNS服务器的主机名–210.32.32.1

          第二行Address是: 它的IP地址–210.32.32.1#53

          下面的Name是:解析的URL–    www.jsjzx.com

          Address是:解析出来的IP–112.121.162.168

 

但是也有像百度这样的DNS比较复杂的解析:

DNS解析过程详解「建议收藏」

你会发现百度有一个cname = www.a.shifen.com  的别名。

这是怎么一个过程呢?

我们用dig工具来跟踪一下把(linux系统自带有)

——————————————————————————————————————————————————————————————————————————

Dig工具会在本地计算机做迭代,然后记录查询的过程。

DNS解析过程详解「建议收藏」

第一步是向我这台机器的ISPDNS获取到根域服务区的13个IP和主机名[b-j].root-servers.net.。

DNS解析过程详解「建议收藏」

第二步是向其中的一台根域服务器(Servername就是末行小括号里面的)发送www.baidu.com的查询请求,他返回了com.顶级域的服务器IP(未显示)和名称,

DNS解析过程详解「建议收藏」

第三步,便向com.域的一台服务器192.33.4.12请求,www.baidu.com,他返回了baidu.com域的服务器IP(未显示)和名称,百度有四台顶级域的服务器

     【此处可以用dig @192.33.4.12 www.baidu.com查看返回的百度顶级域名服务器IP地址】。

DNS解析过程详解「建议收藏」

第四步呢,向百度的顶级域服务器(202.108.22.220)请求www.baidu.com,他发现这个www有个别名,而不是一台主机,别名是www.a.shifen.com。

DNS解析过程详解「建议收藏」

———————————————————————————————————————————————————————————————————————————

按照一般的逻辑,当dns请求到别名的时候,查询会终止,而是重新发起查询别名的请求,所以此处应该返回的是www.a.shifen.com而已。

但是为什么返回a.shifen.com的这个域的NS呢?

我们可以尝试下面的这个命令:dig +trace  shifen.com 看看有什么结果。。。。。。。。

DNS解析过程详解「建议收藏」

你会发现第三步时shifen.com这个顶级域的域名服务器和baidu.com这个域的域名服务器是同一台主机(即:dns.baidu.com)!

 

当我拿到www.baidu.com的别名www.a.shifen.com的时候,我本来需要重新到com域查找shifen.com域的NS,但是因为这两个域在同一台NS上,所以直接向本机发起了,

shifen.com域发现请求的www.a.shifen.com是属于a.shifen.com这个域的,

于是就把a.shifen.com的这个NS和IP返回,让我到a.shifen.com这个域的域名服务器上查询www.a.shifen.com。

于是我便从ns X .a.shifen.com中一台拿到了一条A记录,最终的最终也便是www.baidu.com的IP地址了.【此处也可以用dig +trace www.a.shifen.com】跟踪一下

用一个图来说明一下(图中第三步的全世界只有13台是错误的)

DNS解析过程详解「建议收藏」

以下内容为在虚拟机中搭建local dns服务器得到的实验数据,纠正上述结论

在上面的分析中,我们用dig工具进行了追踪,但是dig没有继续追踪当我们从baidu.com拿到cname和ns2.a.shifen.com的IP之后的事情。

我们就所以然的下结论认为local dns会向ns2.a.shifen.com请求www.a.shifenc.om。

其实这个想法是错误,在自己的本地搭建一个local dns,抓取整个解析过程中是所有包,看看就明白拉。

实际的结果是虽然dns.baidu.com返回了a.shifen.com域的服务器地址和IP,

但是local dns并不是直接向上述返回的IP请求www.a.shifen.com,而是再一次去请求com域,得到shifen.com域的服务器(也就是baidu.com的那四台),

然后又请求www.a.shifen.com,返回a.shifen.com的域的服务器,最后才是去请求www.a.shifen.com,

虽然上面已经返回了IP,但是实验的结果就是再走一遍shifen.com域的查询。

DNS解析过程详解「建议收藏」

上图就是localdns在解析www.baidu.com的抓包全过程。蓝色那条就是在收到cname和响应的a.shifen.com的域名服务器IP地址之后,继续向com域请求shifen.com。

DNS解析过程详解「建议收藏」

这个图充分说明了返回cname的同时也返回了ns2.a.shifen.com的IP。

因此总结一下便是

         ①本机向local dns请求www.baidu.com

         ②local dns向根域请求www.baidu.com,根域返回com.域的服务器IP

         ③向com.域请求www.baidu.com,com.域返回baidu.com域的服务器IP

         ④向baidu.com请求www.baidu.com,返回cname www.a.shifen.com和a.shifen.com域的服务器IP

         ⑤向root域请求www.a.shifen.com

         ⑥向com.域请求www.a.shife.com

         ⑦向shifen.com请求

         ⑧向a.shifen.com域请求

         ⑨拿到www.a.shifen.com的IP

         ⑩localdns返回本机www.baidu.com cname www.a.shifen.com 以及 www.a.shifen.com的IP

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166749.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • rider 激活码分享【中文破解版】

    (rider 激活码分享)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

    2022年3月25日
    383
  • 在idea中创建web项目_idea部署web项目

    在idea中创建web项目_idea部署web项目前言:很高兴能够用自己所学知识为你提供答疑!!!今天我就来操作下如何使用idea这款软件创建web项目。步骤:1.创建项目首先新建一个项目然后选择最后一个,创建一个空白的Java项目,点击Next。这个时候给项目命名,我在这里命名为java_web,下面那个可以更改项目存放的路径,我这里放到自定的路径,点击Finish。刚进来的时候,idea会提醒你是否新建一个模块,先点击×,一会我们再创建模块。2.配置jdk这个时候,我们先来配置jdk的路径,以及tomcat的路径,方便之后

    2022年4月19日
    70
  • 安全日志审计系统服务器,日志审计服务器「建议收藏」

    安全日志审计系统服务器,日志审计服务器「建议收藏」日志审计服务器内容精选换一换本地使用远程桌面连接登录Windowsserver2012云服务器,报错:122.112…,服务器频繁掉线,Windows登录进程意外中断。系统资源不足或不可用。服务启动失败。通过VNC方式登录云服务器。单击打开服务管理,选择“管理工具>事件查看器>Windows日志>系统>筛选当前日志”。事件查看器在“事件级别”负载均…

    2022年6月4日
    106
  • spark处理大数据的几个实例介绍

    spark处理大数据的几个实例介绍在集群中跑应用,而不是在shell中感受写spark应用的过程整个过程为:1、案例分析:要用哪些spark的RDD的API2、编程实现:用到scala,3、提交到集群执行:如何提交到集群,文件是否先传到HDFS上4、监控执行结果:通过web可以看到介绍了四个案例:比如统计1千万个人的平均身高,如果用其他语言,估计要好几小时,因为磁盘读写,要反复计算用了sp

    2022年6月7日
    28
  • 恢复微信撤回的图片(不容root,极其简单)

    恢复微信撤回的图片(不容root,极其简单)女友最近用微信发的一些照片总是让我看一下就给撤回,作为程序员的我,当然不甘示弱,怎可以在我熟悉的领域胡作非为呢?于是上网搜了一下恢复微信撤销图片的方法,网上给出的方法各种各样,需要各种软件,还需要root,不仅晦涩难懂而且极其麻烦,一看都不适合给小白使用,作为程序员的我当然也不愿意这样,于是我就自己琢磨。首先,你要相信这样一个道理,你能看到的东西,一定会存在你手机的某个角落,如图片,声音,视频,

    2022年6月18日
    63
  • java中JDBC是什么?[通俗易懂]

    java中JDBC是什么?[通俗易懂]JDBC是什么?JDBC即(javadatabaseconnectivity数据连接)。JDBC是Sun公司编的一堆类和方法,都封装在java.sql包中。你可以利用这堆类和方法来把你的程序和数据库连通。JDBC的优点:跨数据库性通过使用JDBC,开发人员可以将SQL语句传送给几乎任何一种数据库。不必单独写一个程序访问Sybase,Oracle,或Microsoft的SQLServ…

    2022年6月23日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号