费尽心思的买了云服务器, 又氪金买了喜欢的域名, 但是很烦, 域名又需要解析, 那么这个过程是怎样的呢?
更新
[2019-3-25]
Added
- 新增
DNS解析过程
图解
Changed
- 重构
解析过程
条目
[2019-6-18]
Added
- 新增
Q&A
区块- 新增
递归
查询和迭代
查询的区别 - 新增什么情况下会使用
迭代
查询
- 新增
Changed
- 更新
过程
区块转发模式
应该改为检查是否支持递归查询
[2019-6-22]
Added
Q&A
区块下新增什么是域名劫持?
[2020-11-9]
Changed
- 更新域名解析的过程细节
记录
缘由
DNS - 域名系统
网络通讯基于TCP/IP
协议簇, 而TCP/IP
又是基于IP
地址, 计算机在网络通信中只能识别IPv4
、IPv6
等类型的地址, DNS
解析就是将域名解析成了相应的IP地址
图解
过程
图不好画, 所以使用文字总结
- 提取url中的域名信息
- 检查浏览器缓存
- 检查操作系统缓存的
Hosts
文件 - 检查路由器缓存
- 检查运营商提供的本地DNS服务器(
localDNS
)缓存, 不具有权威性 - 检查是否在
本地区域配置文件
中, 返回解析结果, 具有权威性 - localDNS 判断是否转发模式
- 转发模式: 将域名解析权交给
CNAME
指向的CDN
的DNS
负载均衡系统, CDN 解析完成之后, 会将 IP 地址返回给 localDNS - 非转发模式: 进行下一步
- 转发模式: 将域名解析权交给
- 本地DNS服务器(检查是否支持
递归
查询)- 支持
- 依次寻找上一级DNS服务器解析
- 不支持
- 本地DNS发送请求到根DNS
- 根DNS返回
顶级域名服务器
(.com、.top、…)地址 - 本地DNS联系该
顶级域名服务器
来具体子级域名(xx.com、xxx.xx.com)
- 支持
- 本地DNS服务器接收到IP地址
- 写入缓存
- 返回给客户端
域名劫持
上述解析过程中由于DNS
解析记录可能存储在用户本机, 所以可能导致域名劫持
Q&A
Q:
递归
查询和迭代
查询的区别?
A: 递归查询指的是服务器一条龙
服务, 客户端将解析域名的请求发送给localDNS
, 如果localDNS
检查缓存后无法解析的话, 会将解析请求发送给rootDNS
, rootDNS
无法解析则继续发给顶级域名服务器
…后续同理, 如果某个DNS服务器成功解析, 则会将解析后的结构反向传送给上一级, 最终返回给localDNS
. 而迭代查询则指的是, rootDNS
请求rootDNS
, rootDNS
返回一个可以解析的DNS服务器, 你自己去请求, 这种方式比较耗内存, 所以一般默认采用的是递归
查询.
Q: 什么情况下会使用
迭代
查询?
A: 两种情况. ①: DNS服务器配置为不支持递归
查询; ②: 客户端DNS请求的递归标志位
为0.
Q: 什么是
域名劫持
?
A: 由于DNS可能将解析记录缓存到操作系统的hosts
文件中, 这就表明可以随意修改IP地址, 进而使域名解析到非法地址.