DNS域名解析过程
DNS域名解析过程
- 域名结构树
- 域名服务器
- 域名解析过程
域名结构树
www.bilibili.com中的www是主机名,此外还有mail,memeber和space等等主机名。
这些主机名非常方便我们记忆,www是让我们访问主站的,mail我们知道是和邮箱有关的,memeber是和会员有关的页面。
它们的后面都是跟着bilibili,也就是都隶属于bilibili域名统一管理。
我们可以看到bilibili后面跟着.com, 有很多网页都是跟着.com, 因为都隶属于com域名来进行管理。常见的还有.net, .cn等等。
那么问题来了,请问是谁管理.com/.cn/.net这些域名的呢?域名是由点来进行划分的,所以域名的最后也是要有一个点来分割的。但是因为最后都是由根来统一管理,就没必要在全部域名的最后写.root, 所以直接把根用点来表示,而我们一般都会把这个点给忽略掉。那么现在我们可以看到域名结构树形成了,最顶部是由一个点来表示的。
域名服务器
这底下这么多域名最终都会聚由一个根管理,能行么?实际上这个根是由一群服务器组成的。但时这组服务器仅仅使用了13个域名,域名从a到m开头。
这13个根域名服务器是由12个独立机构运营。注意是13个域名,不是13台机器。
那么究竟目前有多少台机器负责根域名服务器的工作。
截止到目前,有12个独立机构运营的根服务器已经有1467个节点了。只有13个根域名,但是有1467个节点,也就是说绝大部分节点的IP地址是一样的,比如说这样的两个F根域名就是一样的IP地址。
那么我们如何与最近一个节点取得联系呢,是通过哪种技术实现的呢?
答案就是任播,采用这种技术,当我们向根域名服务器进行联系时,就能找到离我们最近的根域名服务器了,那么根域名服务器会管理com,cn和net这些域名服务器,这些域名服务器称为顶级域名服务器,也就是Top Level Domain,简写TLD。
顶级域名服务器会分别管理各自的域名服务器,比如刚刚说的bilibili和qq,这些服务器叫权限域名服务器或者权威域名服务器。
英语是Authoritative,权威域名服务器就会管理各自的主机,当然实际网络中的管理层次会更复杂。
域名解析过程
在地址栏输入网址以后,浏览器首先需要需看看自己浏览器缓冲有没有对应的IP记录。同时还要查询一下主机本地文件里面有没有对应记录。
如果有记录,就没有必要做后面的步骤了。
浏览器为了进行域名解析是需要调用解析器,如果用c语言来表示的话,就是会有这样的代码,也就是通过域名获取IP地址的代码,解析器可以帮助浏览器调用系统的网络功能。
解析器其实就是程序,大家不用想的太复杂。
这个解析器就相当于DNS客户端,DNS客户端需要向DNS服务器查询IP地址。
现在解析器就会向DNS服务器发送请求,不过我们怎么和DNS服务器联系呢?我们有他的地址吗?
其实网络设置里面就可以查询到自己的DNS服务器地址。也就是说我们电脑里面是有这个地址的,可以直接联系。如果没有这个地址,或者DNS服务器地址设置错误,但是又可以上网,就会出现可以上QQ,但是不能浏览网页的情况。
因为QQ是直接使用IP地址访问服务器的,这个DNS服务器一般会是最接近我们的本地DNS服务器,这台本地DNS服务器一般由ISP负责管理。
ISP也就是互联网服务提供商。
本地DNS服务器在收到请求后会查看自己的缓存,如果有就直接返回IP地址,并且会标注非权威non-authoritative。
毕竟本地DNS服务器并不像.com控管域名,本地DNS服务器只是帮我们走走流程而已。
当然有些本地DNS服务器可能还会记录你解析了什么域名。
接下来的步骤就由本地DNS服务器独立完成。
在这里我们用命令行模仿一下本地DNS服务器后面的解析过程,这里我们就用命令nslookup,假设我们这台本地DNS服务器里面根本没有任何根域名服务器的域名和地址。我们就需要先来查询一下。
设置查询的类型为ns,也就是名称服务器name server,然后我们要查询根服务器的域名,所以输入一个.表示根。这里得到的回复:
首先是我使用的是DNS服务器8.8.8.8,另外用的是53端口,典型的DNS端口。虽然这里没有显示,DNS一般都是用UDP进行传输的,看看下面,分别有Non-authoritative和Authoritative的结果。不过只有非权威Non-authoritative的结果。非权威的结果一般来说是缓存的结果,而不是控管的相应服务器返回的结果。
我们可以看到这些就是根服务器的域名了,一共有13个域名,现在我们知道了域名还需要得到对应的IP地址才可以进行通话。
于是我们设置type为a,也就是设置为IPv4类型。然后我们选一个根服务器。输入b.root-servers.net回车,得到其对应的IP地址。这一次同样是非权威的答复。因为根服务器他知道com域名服务器的地址,于是我们就直接和这个b根域名服务器对话。输入server 199.9.14…201, 也就是刚刚b根服务器的地址,然后设置type=ns,输入com. ,也就是向根域名服务器咨询com域名服务器的地址。这次又有一堆域名服务器出现,不过这次是权威的响应。因为直接是根负责的com域名,回答这个部分,顶部是服务器的域名。底部是域名对应的IPv4和IPv6地址。
特别要注意的是这里的gtld,表示generic top level domain,通用顶级域名,属于顶级域名tld里最常见的一种。
现在再从这么多com域名服务器的地址中再挑一个,记录下IPv4地址为192.33.14.30。于是我们就直接和这个b通用顶级域名服务器通话。
输入server 192.33.14.30, 也就是刚刚的顶级域名地址。然后设置type=ns,输入bilibili.com., 也就是向顶级域名服务器咨询bilibili.com域名服务器的地址。
我们可以看到bilibili的域名服务器有两个,一个是ns3,一个是ns4。
这两个域名服务器其实是DNSPod平台提供的服务。
两个域名各自对应着多个IP地址。这次我们随便选择一个,记录一下IP地址为129.211.176.212。
于是我们就直接和这个权威域名服务器对话,输入server 129.211.176.212,也就是刚刚记录的地址,然后设置type=a,输入www.bilibili.com., 也就是向权威域名服务器咨询www.bilibili.com.域名服务器的IPv4地址。
回车以后我们看到这样的结果:
这里的canonical name也就是CNAME,CNAME常见用于域名的跳转。这里的意思是www.bilibili.com会跳转到a.w.bilicdn1.com., 这个a开头的域名地址其实是一个CDN, 也就是内容分发网络。于是我们就必须要得到他的IP地址,就直接输入这个CDN的地址。这个CDN域名返回了几个IP地址。
于是本地DNS服务器得到这个地址后会返回给我们的解析器。当然一般还会把地址给缓存起来。解析器接着把地址给浏览器,浏览器就可以通过这个IP地址去进行网页的连接了。
要注意的是解析器与本地DNS服务器之间用的是递归的方式传输。传输以后回归,意思是发送数据以后最终返回结果给我就可以了,而本地DNS服务器和三层服务器之间用的是迭代的方式传输。也就是第一步得到什么,然后第二个,接着第三步。
参考资料:DNS域名解析过程
还没有评论,来说两句吧...