费尽心思的买了云服务器, 又氪金买了喜欢的域名, 但是很烦, 域名又需要解析, 那么这个过程是怎样的呢?

更新


[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地址, 计算机在网络通信中只能识别IPv4IPv6等类型的地址, DNS解析就是将域名解析成了相应的IP地址

图解

DNS解析过程

过程

图不好画, 所以使用文字总结

  • 提取url中的域名信息
  • 检查浏览器缓存
  • 检查操作系统缓存的Hosts文件
  • 检查路由器缓存
  • 检查运营商提供的本地DNS服务器(localDNS)缓存, 不具有权威性
  • 检查是否在本地区域配置文件中, 返回解析结果, 具有权威性
  • localDNS 判断是否转发模式
    • 转发模式: 将域名解析权交给 CNAME 指向的 CDNDNS 负载均衡系统, 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地址, 进而使域名解析到非法地址.

参考