DNS解析过程
本文为原创文章,转载注明出处,欢迎关注网站https://hkvision.cn
缘起
由于一些复杂的原因,我有一个需求,是能够对特定的域名进行自定义解析,即自行搭建一个DNS服务器,然后让自己的DNS服务器设定为自己搭建的,达到对特定域名解析的目的。有人说改host文件就ok了,但是我希望做到能够让其他人也能对特定的域名解析,虽然让大家都改host也不麻烦,但是能统一管理也是好的。正好了解了阿里云的函数计算,于是就在函数计算上搭了一个DoH服务器,为此去回顾了一遍DNS解析的过程,温故而知新,果然发现我之前的想法是错的,现在记录一下。
域名的结构
域名的结构:
域名是有结构的,其实很简单,例如:
www.baidu.com
,域名以点的形式分割,从右至左分别为根域名,顶级域名,二级域名等等。很明显这是一个树形结构。首先,根域名只有一个,就是.(点),真实域名应该是
www.baidu.com.
,但是我们一般都将最后一个点省略了。然后是顶级域名,就是com.,顶级域名还有很多,例如cn.,net.,org.等等。剩下的就是二级域名等等等。域名的管理
域名管理通常由机构进行管理
互联网名称与数字地址分配机构(ICANN)成立于1998 年10 月,是一个集合了全球网络界商业、技术及学术各领域专家的非营利性国际组织, 负责互联网协议(IP)地址的空间分配、协议标识符的指派、通用顶级域名(gTLD) 和国家及地区顶级域名(ccTLD)系统的管理,以及根服务器系统的管理等。
中国互联网络信息中心( ChinaInternet Network Information Center,CNNIC) 是经国家主管部门批准, 于1997 年6 月3 日组建的管理和服务机构,行使国家互联网络信息中心的职责。作为中国信息社会重要的基础 设施建设者、运行者和管理者, CNNIC以“ 为我国互联网络用户提供服务,促进我国互联网络健康、有序发展”为宗旨,负责管理维护中国互联网地址系统,引领中国互联网地址行业发展,权威发布中国互联网统计信息, 代表中国参与国际互联网社群。其主要职责包括以下几部分:互联网地址资源注册管理。器运行机构,负责运行和管理国家顶级域名.cn、中文域名系统、通用网址系统及无线网址系统,以专业技术为全球用户提供不间断的域名注册、域名解析和Whois 查询服务。CNNIC是亚太互联网络信息中心( APNIC)的国家级IP 地址注册机构成员( NIR) 。以CNNIC 为召集单位的IP地址分配联盟,负责为我国的ISP 和网络用户提供IP 地址和AS 号码的分配管理服务。 引自百度百科:域名管理
查询域名的类型
A记录:地址记录,用来指定域名的IPv4地址,如果需要将域名指向一个IP地址,就需要添加A记录。
CNAME: 如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。
TXT:在这里可以填写任何东西,长度限制255。绝大多数的TXT记录是用来做SPF记录(反垃圾邮件)。
NS:域名服务器记录,如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。
AAAA:用来指定主机名(或域名)对应的IPv6地址(例如:ff06:0:0:0:0:0:0:c3)记录。
MX:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。
显性URL:从一个地址301重定向到另一个地址的时候,就需要添加显性URL记录(注:DNSPod目前只支持301重定向)。
隐性URL:类似于显性URL,区别在于隐性URL不会改变地址栏中的域名。
SRV:记录了哪台计算机提供了哪个服务。格式为:服务的名字、点、协议的类型
这方面的详细可以参考这个文章:域名解析中A记录、CNAME、MX记录、NS记录的区别和联系
DNS解析过程
DNS的解析是按照树形结构来的,其中重要的就是NS记录类型,此记录类型会返回一个IP地址,此IP地址会告诉你所需要解析的域名需要去哪进行解析,这是迭代查询的一个重要步骤。OK,下面开始介绍DNS解析。
DNS解析服务器和域名服务器的区别
在我个人的理解中,DNS服务器和域名服务器是有区别的,平时我们在电脑里面设置的,应该叫DNS解析服务器,例如8.8.8.8
,114.114.114.114
等,而我们所说的根服务器则是域名服务器,其区别在于,DNS解析服务器本身并不管理域名记录,仅仅是做解析工作,即DNS解析服务器帮助你进行ip地址的查询,事实上这一步在客户端都可以完成。而域名服务器则是对域名记录进行管理。当我们区分了这两个概念之后就能理清楚DNS解析的过程了。
过程
面向客户的DNS解析实际上很简单,对于客户而言,一般都是直接发送A记录解析过去,然后等着返回IP就完事了,但是对于DNS服务器而言,他干了很多事情,下面我们就详细了解下这个背后的过程,我们以www.hkvision.cn
这个域名为例,向阿里223.5.5.5
发送DNS解析请求(不算缓存)
223.5.5.5接收请求,然后223.5.5.5向根域名服务器发送解析请求,这个请求目的是找到管理cn顶级域名的服务器,然后根域名服务器发现是cn域名,返回管理cn域名的服务器的地址,通常这个地址挺多的,但是一般都有一个主nameserver和一堆second nameserver,我们这里以
a.dns.cn
为例,ip为203.119.25.1
223.5.5.5接收地址后,向203.119.25.1发送解析请求,203.119.25.1会返回管理hkvision.cn域名的服务器地址
重复上述过程,直到返回A,AAAA,CNAME记录为止(代表这个域名是我在管理,我知道这个域名的IP是多少,于是就直接返回给你了)
递归查询
递归查询是指,如果DNS解析服务器不知道被查询的域名的IP地址,则会向根域名服务器查询,而不是让客户机进行下一步查询,因此递归查询的结果要么是域名的IP地址,要么就表示无法查到所需的IP地址
迭代查询
迭代查询是指,当域名服务器收到迭代查询请求的报文的时候,要么给出域名的IP地址(A或AAAA记录),要么告诉DNS解析服务器,你下一步需要向谁进行查询(NS记录),然后让DNS服务器继续向下一个服务器查询。
递归:客户端只发一次请求,要求对方给出最终结果。
迭代:客户端发出一次请求,对方如果没有授权回答,它就会返回一个能解答这个查询的其它名称服务器列表,客户端会再向返回的列表中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果。
授权回答:向DNS服务器查询一个域名,刚好这个域名是本服务器负责,返回的结果就是授权回答。
关于缓存
准确来说,在DNS解析的任何一个步骤都是可能存在缓存的。
- 浏览器:浏览器是可以缓存的
- 操作系统:非浏览器的请求是可以缓存在操作系统中的
- DNS解析服务器:解析服务器是可以进行缓存的,尤其是热门的域名请求,直接缓存在内存中,以便其他人访问的时候能够快速回复
DNS记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS缓存会参考ttl值,但是不完全等于ttl值,而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。
参考资料:
https://www.cnblogs.com/qingdaofu/p/7399670.html http://blog.csdn.net/wyq_tc25/article/details/51679520 http://blog.csdn.net/wytheonly/article/details/37925067 http://www.cnblogs.com/Juntaran/p/5827110.html http://magic3.blog.51cto.com/1146917/1354084 http://blog.csdn.net/realmeh/article/details/22663807
- 原文作者:HaoKunT
- 原文链接:https://hkvision.cn/2020/02/05/dns%E8%A7%A3%E6%9E%90%E8%BF%87%E7%A8%8B/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。