什么是DNS服务?
DNS(Domain Name System)是一种网络应用层的服务。它是辅助网络应用层将人类可读的域名(csdn.net)转化为路由器转换友好的 IP地址(10.1.2.x)的一种服务。
DNS 提供了哪些能力?
- 提供了域名到IP的映射
- 提供了主机规范名到别名的映射
- 邮件服务器域名的映射
- 负载分配,提供了域名到一组ip之间的映射
DNS服务器的层级
域名服务器层级图
-
根域名服务器:
由ICANN非盈利机构托管
根域名服务器记录着对应的顶级域名的地址映射
https://www.internic.net/domain/root.zone 通过该链接可以查看 -
顶级域名服务器
由对应企业和一些社会组织维护。下图可以看出一些顶级域名和管理商的对应关系和市场占有率的大致情况
-
权威DNS服务器
权威DNS服务器主要由一些权威DNS服务器商或者一些机构组织维护的最终IP和对应域名的映射关系。在域名配置的时候,将DNS设置成对应权威DNS服务器地址。当然你也可以自己搭建自己的权威DNS服务器,这时候你只要把域名DNS服务器地址改成你的DNS服务器地址即可。
除了上述DNS服务器外,其实还有一个本地的DNS服务器。这个服务器不在上述体系中,主要是因为本地DNS服务器主要是起一个缓存服务器的作用,很多ISP都会在自己的网络体系里配置很多的DNS本地服务器,来减少DNS层层查询带来的多余的请求数量
如何查看本地DNS缓存配置
nsloopup csdn.net
通过上述命令可以感受下DNS的一些配置信息
有的直接返回了ip 和域名的映射,有的提供了规范名称和域名的映射
DNS的业务运转模式
- ICANN 授权根域名服务商提供服务,ICANN自己维护管理根域名服务器
- 根域名服务商授权域名代理商,域名代理商向我们用户售卖域名
- 域名代理商通过调用根域名的接口,想用户提供域名注册售卖服务。
- 用户购买域名,域名费用里,会包含了域名代理商的钱,根域名企业的费用,ICANN的费用
用户购买域名的时候,比如你买了一个 www.xxx.com 这个时候域名代理商会通过接口向根域名com的供应商进行查重,如果不重复,则可以注册,注册的原理是往一级域名加NS记录。后续的转让,修改,也基本是这个原理。
DNS 通讯机制
DNS 是基于UDP进行通讯的,端口53
通过下面的一个场景,我们来描述DNS请求的过程
用户发起一个http请求的,比如www.baidu.com. 我们可以看到,实际上,com后面还有一个点,这个点代表的就是根域名。首先会向本地DNS服务器请求,如果没有缓存的记录,,会接着向根服务器请求,根服务器返回顶级服务器中com的域名供应商的ip,此时本地域名服务器会继续按照这个ip向顶级域名服务器TLD发送请求,顶级域名服务器TLD供应商会向其返回权威DNS服务器的ip,本地DNS服务器继续根据ip向权威DNS服务器发送请求。到此,本地DNS服务器就拿到了最终的ip,并返回给应用并缓存下来。
当然,在实际运行的时候,应用还会检测本地hosts,本地DNS服务器还会请求路由器DNS缓存,ISP提供的DNS缓存服务器等等。
- DNS 报文格式
可以通过wireshark抓包查看一个数据包的内容:
在返回结果里,有一个关键的Type属性
Type属性包含 - A记录:规范域名和ip的map关系。其中A代表ipv4 AAAA代表ipv6
- NS记录:域名和权威服务器域的映射
- CNAME记录:主机别名和规范域名的映射
- MX记录:邮件别名和规范域名的映射
另外还有过期时间的Time to live的信息。过期时间控制着DNS缓存信息的存活时间。