February 24,2017
阮一峰写的很详细,我这篇文章是对他学习笔记学习的笔记。
DNS(Domain Name System),他的作用是根据网站域名查出IP地址。IP地址是建立通信所必须的,所以DNS非常重要。它就像一本巨大的电话本,记载了所有网站的IP地址。
在DNS查询之前,我们的电脑得知道DNS服务器的IP地址吧,DNS服务器的IP地址,有可能是动态的,每次上网时由网关分配,这叫做DHCP机制。大部分设备默认都是这样的。以下是我的DNS地址:
这是一个电信运营商的DNS地址,当然你也可以自己改,有很多公网DNS可以使用,其中最有名的就是Google的8.8.8.8和Level 3的4.2.2.2,这些DNS服务器称为本地DNS服务器。
这么多的域名,DNS是怎么准确地查到每个域名的IP地址的呢?想知道这个,那么我们先来把域名分一下层
我们以math.stackexchange.com为例来分析一下域名的层级结构
主机名. | 次级域名. | 顶级域名. | 根域名 |
---|---|---|---|
host. | sld. | tld. | root |
math. | stackexchange. | com. | root |
所有域名的最后其实都有一个.root
,省略了而已。所以一般的域名分为四层,最后面是根域名,往前推是顶级域名,次级域名,最后是主机名。
DNS服务器就是根据域名的分层从后往前一级级地查询IP地址的。这叫做递归查询。
知道了本地DNS服务器的IP地址后,浏览器将待解析的域名放在DNS报文中,以UDP数据报的方式发给本地DNS服务器(使用UDP是为了减少开销)。本地DNS服务器在查找域名后,将对应的IP地址放在回答的报文中返回。浏览器获得目的主机的IP地址后即可进行通信。如果本地DNS服务器不能回答该请求,就会向其他DNS服务器发请求,进行递归查询。
本地DNS服务器先查“根域名服务器”的IP地址,全球只有13台根域名服务器,从A.ROOT-SERVERS.NET
一直到M.ROOT-SERVERS.NET
。一般其IP地址存储在本地DNS服务器中。本地DNS服务器向“根域名服务器”发请求,询问“tld服务器”的NS记录。