参考:
透视HTTP协议(06.域名有哪些门道)
DNS是什么
DNS(Domain Name System,域名系统)就是一个记录域名与IP对应关系的系统。
DNS解析就是将域名转换成IP的过程。
实际网络传输中,各端点均是通过IP+端口的四元组确定地址的。
DNS的结构
- 根域名服务器(Root DNS Server):管理顶级域名,例如com、cn等顶级域名服务器的IP地址。
- 顶级域名服务器(Top-level DNS Server):管理各自域名下权威域名服务器,例如com顶级域名服务器可以返回apple.com域名服务器IP。
- 权威域名服务器(Authoritative DNS Server):管理自己域名下主机的IP地址,例如apple.com权威域名服务器可以返回www.apple.com的IP。
- 非权威域名服务器,例如Google的8.8.8.8,微软的4.2.2.1等,这些服务器缓存了很多常用的域名信息结果,提高整体解析流程的效率。
DNS解析流程
- 主机DNS缓存,如果存在直接请求。
- Linux DNS缓存有多种形式,例如:NSCD、Bind等。
- 主机hosts文件,如果存在直接请求。
- Linux默认文件路径:/etc/hosts
- 根据配置的DNS服务IP(一般来说都是非权威域名服务器)请求,如果失败一般就直接返回DNS错误了。
- Linux DNS服务IP配置:/etc/resolv.conf
- Linux 查询实际域名解析IP命令:nslookup [url]
- Linux 查询完整DNS相关信息命令,后置方括号仅显示DNS解析server:dig [| grep SERVER]
- 请求根域名服务器获取顶级服务器IP。
- 请求顶级服务器获取权威服务器IP。
- 请求权威服务器获取结果IP地址。
DNS耗时查询
根据Linux libcurl文档,可以使用getinfo接口,获取到完整的请求各阶段耗时。文档参见文首参考。
PHP的curl实现也有getinfo接口。