1.序

TCP/IP网络中要求每一个互连的计算机都具有其唯一的IP地址,如39.1xx.20.58。并基于这个IP地址进行通信。然而,直接使用IP地址有很多不便之处。例如,在进行应用操作时,用户必须指定对端的接收地址,此时如果使用IP地址的话应用就会有很多不便之处。因为IP地址是由一串数据序列组成,并不好记。

从人类的角度看。我们平常在访问某个网站时不使用IP地址,而是用一串由罗马字和点号组成的字符串。如 www.baidu.com。能够这样做是因为有了DNS( Domain Name System)功能的支持。DNS可以将那串字符串自动转换为具体的IP地址。因为与 IP 地址的一组纯数字相比,用<mark>字母配合数字的表示形式</mark>来指定计算机名<mark>更符合人类的记忆习惯</mark>。

从计算机的角度看。但要让计算机去理解名称,相对而言就变得困难了。因为<mark>计算机更擅长处理一长串数字</mark>。为了解决上述的问题,DNS 服务应运而生。DNS 协议提供通过域名查找 IP 地址,或<mark>逆向从 IP 地址反查域名的服务</mark>。

这种DNS不仅适用于IPv4,还适用于IPv6。

2.问题

为此,TCP/IP世界中从一开始就已经有了一个叫做主机识别码的东西。这种识别方式是指为每台计算机赋以唯一的主机名,在进行网络通信时可以直接使用主机名称而无需输入一大长串的IP地址。并且此时,系统必须自动将主机名转换为具体的IP地址。为了实现这样的功能,主机往往会利用一个叫做hosts的数据库文件。类似于下:

主机名 IP地址
Host1 192.462.12.1
Host2 192.422.12.2
Host3 192.422.12.3

在互联网的起源 ARPANET中,起初由互联网信息中心(SRI-NIC)整体管理一份 hosts文件。如果新增一台计算机接入到 ARPANET网或者已有的某台计算机要进行IP地址变更,中心的这个 hosts文件就得更新,而其他计算机则不得不定期下载最新的 hosts文件才能正常使用网络。

然而,随着网络规模的不断扩大、接入计算机的个数不断增加,使得这种集中管理主机名和IP地址的登录、变更处理的可行性逐渐降低。

3.DNS产生

基于以上背景,DNS(Domain Name System)由此产生。在DNS中主机的管理机构可以对数据进行变更和设定。也就是说,它可以维护一个用来表示组织内部主机名和IP地址之间对应关系的分布式数据库。从而提供域名到 IP 地址之间的解析服务。能够使人更方便地访问互联网。

DNS服务是和 HTTP 协议一样位于应用层的协议。

在应用中,当用户输入主机名(域名)时,DNS会 <mark>自动检索那个注册了主机名和IP地址的数据库</mark>, 并迅速定位对应的IP地址,如果主机名和IP地址需要进行变更时,也 <mark>只需要在组织机构内部进行处理即可</mark>。有了DNS,不论网络规模变得多么庞大,都能通过DNS进行管理。可以说DNS充分地解决了 ARPANET初期遇到的问题。

4.域名的构成

域名是指为了识别主机名称和组织机构名称的一种具有分层的名称。例如,日本仓敷艺术科学大学的域名是
blog. csdn. net
域名由几个英文字母(或英文字符序列)用点号连接构成。在上述域名中最左边的“blog”表示博客。而“. csdn”是中国IT社区CSDN。最后边的“. net”则代表网络提供商。

DNS的分层如下:

名称类型 说明 示例
根域名 用来管理互联网的主目录 .
顶级域名(一级域名) 用来表示某个国家/地区或者组织机构使用的名称的类型名称 .com
二级域名 公司/个人或者组织在Internet上使用的注册名称 baidu.com
子域名 网站名称 www.baidu.com
主机名 主机名 xingkong.www.baidu.com

也叫做树形结构。如果说顶点是树的根(root),顶点的下一层叫做顶级域名,它包括中国是cn,日本是jp等;还有就是通用顶级域名(generic top-level domains,简称gTLDs),例如:

  • .com用于商业机构。它是最常见的顶级域名。任何人都可以注册.COM 形式的域名。也是目前全球最流行的域名后缀,注册量早已破亿。

  • .net是国际上广泛流行的通用域名,一般用于从事Internet相关的网络服务的机构或公司,是建立全球商业品牌,国际化形象的第一选择。最初是用于网络组织,例如因特网服务商和维修商,现在任何人都可以注册以.NET结尾的域名。

  • .cn域名是由我国管理的国家顶级域名。.cn代表中国,是具有中国独特标识的域名。当前.cn域名在全球具有最大的市场。

其中根服务器主要用来管理互联网的主目录,全世界IPv4根服务器只有13台(这13台IPv4根域名服务器名字分别为“A”至“M”),1个为主根服务器在美国。其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本。根服务器中有经美国政府批准的260个左右的互联网后缀(如.com、.net、.cn等)。

5.域名服务器

域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的域的相关信息。

  • 各个域的分层上都有设有各自的域名服务器
  • 各层域名服务器都了解该层以下分层中所有域名服务器的IP地址。因此它们从根域名服务器开始呈树状结构相互连接。
  • 由于所有域名服务器都了解根域名服务器的IP地址,所以若从根开始按照顺序追踪,可以访问世界上所有域名服务器的地址。

DNS解析是分布式存储的,比如根域名服务器只存储260个顶级域名的DNS服务器的ip地址。顶级域名服务器如.com的DNS服务器,存储的则是一些一级域名的权威DNS服务器地址(如suning.com,qq.com,163.com的DNS)。而suning.com的权威DNS存储的才是具体的主机记录(如A记录,cname记录,txt记录)。
根域名服务器IP地址:http://www.internic.net/zones/named.root

6.DNS的查询

当发送一个url请求时,不管这个url是web页面的url还是web页面上的每个资源的url,浏览器都会开启一个线程处理该请求,同时在远程DNS服务器上启动一个DNS查询,这能使浏览器获得请求对应的IP地址.

1.浏览器缓存,浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。

2.系统缓存,如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。

这里也可以是hosts缓存

3.路由器缓存,接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。

4.ISP DNS 缓存(本地DNS),接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
前面所有步骤没有缓存的情况下,本地 DNS 服务器会将请求转发到互联网上的根域,你的ISP的DNS服务器从根域名服务器开始进行搜索,

5.根域名服务器
全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;

6.顶级域名服务器
顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;

7.主域名服务器
主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;把IP地址告诉本地DNS服务器。

8.保存结果至缓存
 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。
下面这个图很好的诠释了整个流程:

简略图

详细图

参考链接
https://www.zhihu.com/question/23042131
https://blog.51cto.com/369369/812889
https://zhuanlan.zhihu.com/p/90160406
《图解http》 《图解TCP/IP》


优质文章推荐

1.计算机网络----三次握手四次挥手
2.一篇让你彻底了解http请求报文和响应报文的结构
3.梦想成真-----项目自我介绍
4.一篇让你彻底了解HTTP 的前世今生
5.一篇让你彻底搞定HTTP方法与状态码
6.你们要的设计模式来了
7.震惊!来看《这份程序员面试手册》!!!
8.一字一句教你面试“个人简介”
9.接近30场面试分享