彻聊DNS

先得聊聊什么是域名

域名是什么?我会连域名都不知道?别着急,先看看嘛。

我们以www.fanyi.baidu.com为例。域名结构划分为根域名、顶级域名、二级域名、三级域名等。做过开发的都知道,在创建项目时,一般是com.xxx.xxx,这就是域名的正确顺序,按com→baidu→fanyi的顺序。com是顶级域名,baidu是二级域名,fanyi是三级域名。还有一个被隐藏了的根域名,完成的域名应该是 www.fanyi.baidu.com. 。

image-20200318175314385

 

什么是域名服务器

域名服务器正如其名,是存放域名的服务器。域名服务器可以划分为四种:根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器。

本地域名服务器

又被称为权威域名服务器,是电脑解析时的默认域名服务器,即电脑中设置的首选DNS服务器和备选DNS服务器。常见的有电信、联通、谷歌、阿里等的本地DNS服务。

image-20200619175650228

如果没有指定DNS服务器则会自动获取,如果两个同属一个本地DNS服务器管理的域名互相访问时可以直接在本地域名服务器获得ip(解析过程下面细说)

image-20200619174603669

根域名服务器

全球只有13套根域名服务器装置,大部分分布在北美。根域名服务器中存储着各个顶级域名服务器的ip地址。

顶级域名服务器

负责管理在该顶级域名服务器注册的所有二级域名,记录这些二级域名的IP或者这些域名用于管理它的三级域名的服务器IP地址(如baidu.com的服务器存储着管理fanyi.baidu.com、ai.baidu.com的服务器。

权限域名服务器

负责一个区的域名管理的服务器。当一个权限域名服务器不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找其他的哪一个权限域名服务器

那什么是区了?

为什么划分区?

如果一个二级域名或者一个三级域名对应一个域名服务器,则域名服务器数量会很多,使用划分区的办法来解决这个问题。

什么是区?

一个服务器所负责管辖(或有权限)的域名范围叫做区,各单位根据情况来划分自己管辖范围的区。

如何划分区

同样以百度为例,我们假设有fanyi.baidu.com、ai.baidu.com、tieba.baidu.com。我们可以这样分区,fanyi.baidu.com和tieba.baidu.com放在baidu.com权限域名服务器,ai.baidu.com放在ai.baidu.com权限域名服务器中。baidu.com权限域名服务器和ai.baidu.com权限域名服务器是同等地位的,而具体怎么分区是百度根据域名多少、访问多少等情况去自己规定的。

 

域名解析过程

首先我们要知道域名解析有两种方式:迭代解析:本地域名服务器向根域名服务器请求采取的方式,请求后根域名服务器中没有找到IP则返回给本地域名服务器下一步查找哪个服务器(它的IP)可以找到域名对应的IP。二、递归解析:主机向本地域名服务器请求采取的方式,请求后本地域名服务器如果没有找到域名对应的IP,则交给本地域名服务器去获取到IP再由本地域名服务器返回给主机。

以m.xy.com为例的完整解析步骤:

1.本机m.xyz.com向本地域名服务器dns.xyz.com(如8.8.8.8)进行递归查询

2.本地域名服务器采用迭代查询。它先向一个根域名服务器查询

3.根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址

4.本地域名服务器向顶级域名服务器dns.com进行查询

5.顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址

6.本地域名服务器向权限域名服务器dns.abc.com进行查询

7.权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址

8.本地域名服务器最后把查询结果告诉主机m.xyz.com

 

域名缓存

每个时刻无数网民要上网,那每次都访问本地域名服务器去获取IP?这显然是不实际的,先不说本地域名服务器会受到多大的压力,就每次输入个baidu.com还得跑去另一个服务器去找它的IP这个过程就是在磨洋工。

那怎么解决了?

使用缓存保存域名和IP地址的映射。

计算机中DNS记录在本地有两种缓存方式:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问OS缓存,最后再访问本地DNS服务器,然后本地DNS服务器会递归的查找域名记录,然后返回结果。那么浏览器DNS缓存和操作系统DNS缓存又是怎样的呢?

浏览器DNS缓存

浏览器在获取网站域名的实际IP地址后会对其IP进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的DNS缓存时间,如Chrome的过期时间是1分钟,在这个期限内不会重新请求DNS。在Chrome地址栏中输入chrome://net-internals/#dns 就可以看各域名的DNS 缓存时间

操作系统DNS缓存

用户自己配置的host文件,如windows10下配置如下

image-20200619204856270

Windows系统默认开启DNS缓存服务,叫做DNSClient,可以缓存一些常用的域名。使用ipconfig/displaydns 可以查看电脑中缓存的域名。

image-20200619203231647

Linux系统的nscd服务可以实现DNS缓存的功能。不同版本会有不同的配置。

更多DNS缓存知识参考:浅谈DNS缓存机制--浏览器和OS篇

DNS服务器DNS缓存

在本地DNS服务器中也会缓存一些不归这些本地DNS服务器管理的域名。

加入缓存后的完整DNS解析步骤

1.浏览器将会检查缓存中有没有这个域名对应的解析过的IP地址,如果有该解析过程将会结束

2.如果用户的浏览器中缓存中没有,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

3.如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

4.本机m.xyz.com向本地域名服务器dns.xyz.com(如8.8.8.8)进行查询(会经过本地DNS服务器区域解析和本地DNS服务器的缓存)

5.本地域名服务器采用迭代查询。它先向一个根域名服务器查询

6.根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址

7.本地域名服务器向顶级域名服务器dns.com进行查询

8.顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址

9.本地域名服务器向权限域名服务器dns.abc.com进行查询

10.权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址

11.本地域名服务器最后把查询结果告诉主机m.xyz.com

 

见代码

通过 DNS 查询 IP 地址的操作称为域名解析,负责执行解析这一操作的就叫解析器。 解析器实际上是一段程序,它包含在操作系统的 Socket 库中 (Socket 库可以让其他的应用程序调用操作系统的网络功能 )。 解析器的用法非常简单,编写应用程序(这里也就是指浏览器)时,如下图写上解析器的程序名称(gethostbyname)以及web服务的域名(http://www.lab.glasscom.com/)进行调用就可以了,这样就完成了对解析器的调用。

应用程序调用解析器图:

整个解析器的工作流程图:

 

参考文章:

网络是怎样连接的——户根勤 计算机网络(第七版)——谢希仁 浅谈DNS缓存机制--浏览器和OS篇

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值