web冲浪,DNS是必不可少的协议。本文主要介绍DNS的工作机制,对DNS的某些信息(比如历史)不做介绍。
DNS是什么?
DNS是互联网世界的地址薄,类似于电话本,主要提供将域名映射到IP地址的功能。
DNS的树状层次结构
- 第一层: 根DNS服务器,负责返回顶级DNS(TLD)服务器的IP地址。目前全世界有13台服务节点。
- 第二层: TLD服务器,负责返回权威DNS服务器的IP地址。
- 第三层: 权威DNS服务器,负责返回相应主机或域名的IP地址。
DNS的解析流程
在未命中缓存的情况下,DNS完成域名的解析需要经过如下步骤:
- 用户在浏览器中输入“example.com”, 查询由本地DNS服务(递归服务器)解析器接收。
- 递归服务器查询根DNS域名服务器。
- 根DNS服务器使用顶级DNS(TLD)服务器(例如.com或.net)的地址响应给递归服务器。如:“example.com”,则返回.com TLD的IP地址。
- 递归服务器向.com顶级DNS(TLD)服务器发出请求。
- 顶级DNS(TLD)服务器响应权威DNS服务器的IP地址。
- 递归服务器向权威DNS服务器翻出请求。
- 权威DNS服务器响应example.com的IP地址给递归服务器。
- 递归DNS服务器将example.com的IP地址响应给浏览器。(DNS解析完成)
- 浏览器向example.com的IP地址发出HTTP请求...
DNS缓存
在未命中缓存的情形下,DNS解析的流程是复杂且耗时的。DNS数据可以被缓存在多个位置,每个位置可以在一段时间内(记录生存时间TTL)缓存DNS数据记录:
- 浏览器DNS缓存
- 操作系统级DNS缓存
- 递归DNS服务器级别缓存。如果域名缓存未命中,但是命中了该域名的NS记录,则跳过请求根和TLD服务器;如果没有NS记录,但是命中了TLD的记录,则跳过请求根服务器;如果没有命中TLD的记录,则要完整走完迭代访问根DNS服务器到权威服务器这一全流程了。
DNS记录类型
- 常见类型:
- A记录: 域名映射的IPv4地址。
- CNAME记录:域名别名映射,将域名指向另外一个域名。
- NS记录:域名映射的权威服务器记录。
- AAAA记录:域名映射的IPv6地址。
- MX记录:域名映射的邮箱服务器地址。
- TXT记录:允许管理员在记录中存储文本。
- SOA记录:存储有关域的管理员信息。
- SRV记录:指定特定服务的端口。
- PTR记录:在反向查询中提供域名。
DNS协议报文格式
- https://jocent.me/2017/06/18/dns-protocol-principle.html
胶水记录(Glue record)
当给域名A配置NS记录时,如果NS记录为域名A的子域名,则必须配置NS记录的A记录。
- 通常需要在域名提供商哪里申请两个域名,而不建议采用胶水记录方式。
- 参考链接:https://www.jianshu.com/p/7d69ec2976c7
DNS优秀的go开源项目
- https://github.com/miekg/dns
- https://github.com/EmilHernvall/dnsguide
- demo: https://github.com/xly0713/xdns 😜