写在前面
今天我们来看一下计网中关于DNS解析相关部分的知识。
1. 简介
DNS(Domain Name System)是域名系统,直观理解就是“翻译官”。就是把我们输入地址栏的 "www.baidu.com" 翻译成为 IP 地址,从而进行 TCP/IP 协议的使用。
2. DNS服务器分类
从上到下,一般有这么几种DNS服务器:
2.1. 根DNS服务器
最高层次的域名服务器,也是最重要的域名服务器。全球共有 13 个。大陆没有。
不管是哪一个本地DNS服务器,对一个域名进行解析的时候,如果自己无法解析,就要首先求助于根DNS服务器。(所以之前张洪涛说过,如果这个瘫痪了,那就真的没了。)
在收到本地DNS服务器的请求之后,根域名服务器并不直接将域名转换成IP,而是告诉本地域名服务器,下一步应该找哪一个顶级域名服务器去解析。
就是说,根DNS服务器不直接进行解析,而是把锅甩给下面的顶级DNS服务器。
2.2. 顶级DNS服务器
负责管理在该顶级DNS服务器注册的所有二级域名。
这个收到DNS查询请求时,会给出相应的回答(可能是IP解析的结果,也可能是下一步应该找的DNS服务器的地址---如果他也不知道的话)。
2.3. 权威DNS服务器
一个服务器负责一定范围,这里的权威DNS服务器就是 负责一定区域的 域名服务器
如果还不能给出最后的查询回答,就会告诉DNS查询客户,下一步应该找哪一个权威域名服务器。
2.4. 本地DNS服务器
一个主机发出DNS查询请求时,查询请求报文就发送给本地域名服务器(也叫“默认域名服务器”)。
递归查询 和 迭代查询:
1. 主机向本地服务器的查询一般都是采用递归查询。
递归查询是一定要给出准确结果的。因为主机是一定要获得准确结果的。
2. 本地DNS服务器向根DNS服务器查询采用迭代查询。
迭代查询不用给出准确结果。
3. DNS解析过程
如图,假设域名为 y.xyz.com 的主机想要知道另外一个主机 (域名为 y.abc.com) 的IP地址,解析过程如下:
- 主机 m.xyz.com 首先向本地域名服务器 dns.xyz.com 进行递归查询
- 本地域名服务器采用迭代查询,先向一个 根域名服务器查询
- 根域名服务器告诉本地DNS服务器,下一次应该查询的顶级DNS服务器 dns.com 的ip地址
- 本地DNS服务器向顶级DNS服务器 dns.com 进行查询
- 顶级DNS服务器dns.com告诉本地DNS服务器,下一次查询的权限DNS服务器 dns.abc.com 的 IP 地址
- 本地DNS服务器向权限DNS服务器 dns.abc.com 进行查询
- 权限DNS服务器 dns.abc.com 告诉本地域名服务器,其所查询主机的 ip 地址
- 本地DNS服务器把查询结果告诉主机。
总结一下,就是
主机-->本地DNS 递归查询。
本地DNS-->根DNS,根给出一个顶级DNS,
本地DNS-->顶级DNS,顶级DNS给出权威DNS,
本地DNS-->权威DNS,权威DNS给出查询结果,
本地DNS--> 主机
再简单来说,现在要查询 www.baidu.com
本地DNS服务器 向 根 DNS服务器查询 .com 的地址,根DNS服务器返回一个顶级DNS服务器地址
本地DNS向 顶级 DNS 查询 baidu.com 地址,顶级DNS返回一个 权威DNS服务器地址
本地DNS 向 权威DNS查询 www.baidu.com 地址,返回正确 IP 地址。
4. DNS缓存
NDS服务器收到应答之后,现在自己这里存一份,再返回。
其实就是一个空间换时间的事情。
这里其实真正查询的时候,首先是 浏览器缓存, 然后是 路由器缓存, 再是 DNS缓存.
5. DNS劫持
通过篡改DNS服务器上的数据,从而返回给用户已一个 fake 的ip,比如说 你访问 baidu,却访问到了一个赌博网站。
6. DNS污染
用户访问一些特定网址,国内服务器(非DNS服务器)监控到用户在访问这些网站,就伪装成 DNS 服务器向用户返回错误地址。现在被 墙的 Youtube 什么的就是这么做的。