DNS是什么?
DNS ,即Domain Name System 的缩写,同时DNS 是互联网核心协议之一。其作用非常简单:将要访问的域名解析出对应的IP地址。虽然作用简单,但是查询出对应的IP地址的过程却比较复杂,分成很多步骤。
DNS查询过程
域名分级
域名由两组或两组以上的ASCII或各国语言字符构成,各组字符间由点号分隔开,最右边的字符组称为顶级域名或一级域名、倒数第二组称为二级域名、倒数第三组称为三级域名、以此类推 比如:常见的顶级域名有。
- 按国家和地区分的顶级域名:.cn,.jp,.uk,.us,
- 通用类顶级域名:.com,.org,.net
- 新顶级域名:.xyz,.top等
比如:baidu.com就是二级域名; 比如:baike.baidu.com,map.baidu.com 就是三级域名
DNS服务器的层次结构
DNS服务器分几类,层次结构如下
DNS解析过程
有dns的地方,就有缓存。浏览器、操作系统、Local DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存 DNS解析的顺序是“先查缓存,再递归解析”。 查询顺序:浏览器缓存→系统缓存→路由器缓存→ISP DNS 缓存→递归搜索
以查询www.baidu.com域名的对应的IP为例。 主要分如下步骤分布查询对应的IP地址,查到即止,或者查不到报错
- 搜索浏览器自带的dns缓存;
浏览器会首先查询浏览器自身的 DNS 缓存,缓存时间比较短,大概只有1分钟(chrome://net-internals/#dns 这里可以查询缓存的dns记录),且只能容纳 1000条缓存,看自身的缓存中是否有对应的条目,而且没有过期,如果有且没有过期则解析到此结束。 - 查询操作系统缓存和hosts静态解析;
如果浏览器的缓存里没有找到对应的条目(ipconfig /displaydns可以查看),操作系统也会有一个域名解析的过程,那么浏览器先搜索操作系统的 DNS 缓存中是否有这个域名对应的解析结果,如果找到且没有过期则停止搜索,解析到此结束。 在 Linux 中可以通过 /etc/hosts ,windows中可以通过C:\Windows\System32\drivers\etc\hosts文件来设置,可以将任何域名解析到任何能够访问的 IP 地址。如果在这里指定了一个域名对应的 IP 地址,那么浏览器会首先使用这个 IP 地址。当解析到这个配置文件中的某个域名时,操作系统会在缓存中缓存这个解析结果,缓存的时间同样是受这个域名的失效时间和缓存的空间大小控制的。 - 查询本地dns服务器
客户端通过浏览器访问域名为 www.baidu.com 的网站,发起查询该域名的 IP 地址的 DNS 请求。该请求发送到了本地 DNS 服务器上。本地 DNS 服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地 DNS 服务器还要向 DNS 根服务器进行查询。 - 查询根dns服务器
本地 DNS 服务器向根服务器发送 DNS 请求,请求域名为 www.baidu.com 的 IP 地址。 根服务器经过查询,没有记录该域名及 IP 地址的对应关系。但是会告诉本地 DNS 服务器,可以到域名服务器上继续查询,并给出域名服务器的地址(.com 服务器)。 - 查询顶级域dns服务器
本地 DNS 服务器向 .com 服务器发送 DNS 请求,请求域名 www.baidu.com 的 IP 地址。 .com 服务器收到请求后,不会直接返回域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,该域名可以在 baidu.com 域名服务器上进行解析获取 IP 地址,并告诉 baidu.com 域名服务器的地址。 - 查询权威dns服务器
本地 DNS 服务器向 baidu.com 域名服务器发送 DNS 请求,请求域名 www.baidu.com 的 IP 地址。 baidu.com 服务器收到请求后,在自己的缓存表中发现了该域名和 IP 地址的对应关系,并将 IP 地址返回给本地 DNS 服务器。 - 本地dns服务器缓存该条解析记录
本地 DNS 服务器将获取到与域名对应的 IP 地址返回给客户端,并且将域名和 IP 地址的对应关系保存在缓存中,以备下次别的用户查询时使用。 以上流程如下:
dig命令的使用
dig命令语法
dig(即“domain information groper").
语法:dig @server name type
o server:指定有哪台dns服务器进行解析。其中最有名的就是Google的8.8.8.8和Level 3的4.2.2.2
o name:域名或者ip
o type:ANY, A, MX, SIG等,默认是A
dig命令默认的输出信息, 第一部分:dig 命令的版本和输入的参数 第二部分:显示服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。 第三部分:“QUESTION SECTION”.显示我们要查询的域名,A是address的缩写,表示查询IPV4的地址。 第四部分:“ANSWER SECTION” 是查询到的结果 第五部分:则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。 注意: o 第四部分和第五部分中间,可能还有额外的“AUTHORITY SECTION"表示权威服务器的信息 o 每个域名的尾部都有一个点,这不是疏忽,而是所有域名尾部实际上都有一个根域名。
dig命令的分级查询
以dig +trace www.baidu.com 为例。
第一段:列出根域名.的所有NS(NameServer)记录,即所有根域名服务器。根据内置的根域名服务器IP地址,DNS服务器向所有这些IP地址发出查询请求,询问www.baidu.com的顶级域名服务器com.的NS记录。最先回复的根域名服务器将被缓存,以后只向这台服务器发请求。 第二段:结果显示.com域名的13条NS记录,同时返回的还有每一条记录对应的IP地址。然后,DNS服务器向这些顶级域名服务器发出查询请求,询问www.baiu.com的次级域名baidu.com的NS记录 第三段:结果显示baidu.com域名的5条NS记录 第四段:DNS服务器向上面这5台NS服务器查询www.baidu.com的主机名.先返回结果的NS服务器是ns3.baidu.com,NS服务器对应的IP地址为112.80.248.64,同时返回的www.baidu.com的CNAME为www.a.shifen.com.进一步通过dig www.a.shifen.com 即可查询到对应的IP地址为220.181.38.149、220.181.38.150
常用的选项
dig ns com dig ns baidu.com 单独查看每一级域名的NS记录。 dig -x 220.181.38.150 -x选项,查询PTR记录,即IP属于哪个域名 dig +short www.baidu.com +short选项,简化输出
|