目录
协议背景
在Internet网中连接着数量众多的主机,要让这些主机进行通信,并且让主机之间能够彼此找到对方,我们可以用多种方式进行主机标识,如使用主机名标识一台主机,当然在网络中我们用IP地址来标识计算机,主机在互联网上靠IP地址进行位置标识。
但是IP地址这种纯数字的标识方式不便于人的记忆,因此提出了主机名的标识方式,如www.baidu.com的形式,这种名字便于记忆容易被人们所接受,在具体应用中多采用主机名方式访问主机。主机之间访问需要IP地址,人们访问服务习惯记忆主机名,为了兼顾人和机器,产生了一个翻译机制实现两者之间的转换,这就是主机名与IP地址的映射关系。
在Internet的前身ARPAnet的年代,整个网络中只有几百台主机,所有主机信息以及主机名与地址的映射记录都存放在一个名为HOSTS.TXT的文件中。HOSTS.TXT从一台名为SRI-NIC的主机上分发到整个网络,这台主机由斯坦福研究院的网络信息中心负责维护。ARPAnet的管理员们通过电子邮件的方式将变更信息通知NIC,同时定期FTP到SRI-NIC上,获得最新的HOSTS.TXT文件。
注:
1、HOSTS文件是主机的本地文件。
2、每台主机的HOSTS文件需要手工更新,几乎没自动配置。
Windows中路径如图所示。
在20世纪70年代束,整个ARPAnet只有200台主机。但是到了80年代,ARPAnet上主机数量飞速增长,到80年代末期主机总数增加到10万台,这种人工更新的方式显然不再适用了。频繁更新HOSTS.TXT造成了网络流量和处理器负载增加,并且名字冲突和数据一致性维护越来越困难。
为了解决这一问题,网络管理者们希望找到一种合理的方法来解决主机信息的维护问题,既能分散管理,又能及时进行全网更新和同步,并且采用层次化的名字空间,保证主机名的全网唯一性。1984年,南加州大学信息科学所的Paul Mockapnris发布了描述DNS(英文全称为Domain Name System,中文意思是域名系统)的RFC 882和RFC 883,就是最初的DNS规范,DNS系统诞生了 。
总结:早期接入互联网的设备很少,IP的管理比较简单,最开始是是通过本地Hosts文件的方式对域名和IP的映射关系进行管理;后来为了解决本地Host带来的配置不一致的问题,改为Hosts文件由Ftp统一发布,各个设备定时从Ftp更新Hosts 文件;再到后来出现了中心化的DNS服务集群提供域名解析服务;但随着接入互联网的设备增加,域名解析的请求量暴增,中心化的DNS服务集群开始暴露出明显的缺陷。客户机直接将所有查询请求发往中心化的DNS服务器,同时DNS服务器直接对所有查询客户机做出响应,出现了有单点故障,通信容量,远距离通信延迟,维护开销大等问题。为了解决中心化DNS服务存在的问题,出现了分布式DNS层次架构。
协议概述
简介
DNS(Domain Name System,域名系统)是互联网上是一种层次结构的基于域的命名方式和实现这种命名方式的分布式数据库,其中记录了各种主机域名与 IP 地址的对应关系,能够使用户更加方便的访问网站。用户可以直接输入域名登录网站,DNS会将域名解析成IP地址,然后用户根据这个IP地址找到相应的网站,从而访问到域名对应的网站,通过主机名获取到主机名对应IP地址的过程叫作域名解析。
DNS协议建立在UDP协议之上,在某些情况下可以切换到TCP,使用端口号53,是一种客户/服务器服务模式。
1、当解析器发出一个request后,返回的response中的tc删节标志比特位被置1时,说明反馈报文因为超长而有删节。这是因为UDP的报文最大长度为512字节。解析器发现后,将使用TCP重发request,TCP允许报文长度超过512字节。既然TCP能将data stream分成多个segment,它就能用更多的segment来传送任意长度的数据。UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。
2、DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。
当一个域的辅助域名服务器启动时,将从该域的主域名服务器Primary DNS server执行区域传送。除此之外,辅域名服务器也会定时(一般时3小时)向主域名服务器进行查询以便了解SOA的数据是否有变动。如有变动,也会执行一次区域传送。区域传送将使用TCP而不是UDP,因为传送的数据量比一个request或response多得多。
DNS主要还是使用UDP,解析器还是服务端都必须自己处理重传和超时。
域名结构
域是一个逻辑上的概念,在初始瓜分互联网的时候,Internet组织将世界上的计算机划分为了若干个大类,每一个大类我们称之为一个域;在每个大类里面划分出比较小一点的,成为子域,大域包含小域,小域可以包含更小的域。
Internet 在概念上被划分成几百个顶级域,每个顶级域又分成一系列子域,二级域名是指顶级域名之下的域名,在国际顶级域名下,它是指域名注册人的网上名称,在国家顶级域名下,它是表示注册企业类别的符号。我国的二级域名又分为类别域名和行政区域名两类。类别域名共6个, 包括用于科研机构的ac;用于工商金融企业的com;用于教育机构的edu;用于政府部门的 gov;用于互联网络信息中心和运行中心的net;用于非盈利组织的org。而行政区域名有34个,分别对应于我国各省、自治区和直辖市,特别行政区。
全球共有13台根域名服务器。这13台根域名服务器叫做“DNS根服务器”。分别为“A”至“M”,其中10台设置在美国,另外各有一台设置于英国、瑞典和日本。根服务器主要用来管理互联网的主目录1个为主根服务器,放置在美国。其余12个均为辅根服务器。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。
对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
www.baidu.com叫做一个FQDN(Fully qualified domain name)即完全资格域名,在互联网上唯一标识一台服务器(在访问者看来),而FQDN到IP的转换叫做正向解析,IP到FQDN的转换叫做反向解析。反向解析的作用主要是解决邮件服务器拒绝垃圾邮件的,因为在互联网中多个FQDN可以指向同一个IP所以通过IP去找FQDN在互联网上是不现实的,这样就可以使用一个随意的IP地址来伪装成特定的FQDN,如果某IP发来的邮件与其注册的域名正、反向解析并不相匹配,那么邮件服务器会把此邮件定义为垃圾邮件处理。
在一个完整的FQDN当中,一共分为四个部分:主机名.二级域名.一级域名.,最后的一个点代表根域名服务器,全球一共有13组,从A-M编号,其中有些组在世界各地有多组镜像,根域名服务器顾名思义就是以它为起始进行查询,它知道每一个顶级域名服务器的地址,每一个顶级域名服务器知道其所管辖的二级域名服务器的地址,每一个二级域名服务器知道其管辖的每一个主机的地址,这个样经过层层迭代就可以确定一个FQDN的IP地址,然后前段DNS服务器将查询后的最终结果一次返回给客户端这就叫做递归查询。
服务器分类
域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。 域名服务器:负责名字到地址的解析。
根据域名结果可以把域名服务器划分为以下四种类型:
(1)根域名服务器;
(2)顶级域名服务器;
(3)权威域名服务器;
(4)本地域名服务器。
DNS 的管理是分布式的,当一个域名服务器不包含解析器所请求的信息时,必须向其他的域名服务器进行询问。
在实际的使用中,并不要求每个本地域名服务器都知道如何和其他域名服务器进行联系,但每个域名服务器都必须知道如何和根域名服务器进行通信。根域名服务器通常用来管辖顶级域(如com、net、cn、jp等),它知道所有授权的二级域名服务器的域名和IP地址,二级域名服务器又知道三级域名服务器……。每一个参加域名系统的主机都必须在授权域名服务器处注册登记,一般,就是其本地ISP的域名服务器。
1.权威DNS:
权威DNS是经过上一级授权对域名进行解析的服务器,同时它可以把解析授权转授给其他人,如COM顶级服务器可以授权ABC.COM的权威服务器为NS.ABC.COM,同时NS.ABC.COM还可以把授权转授给NS.DDD.COM,这样NS.DDD.COM就成了ABC.COM实际上的权威服务器了。平时我们解析域名的结果都源自权威DNS。
2.递归DNS:
负责接受用户对任意域名查询,并返回结果给用户。递归DNS可以缓存结果以避免重复向上查询。我们平时使用最多的就是这类DNS,他对公众开放服务,一般由网络运营商提供,大家都自己可以架递归DNS提供服务。递归DNS一定要有可靠的互联网连接方可使用。
3.转发DNS:
负责接受用户查询,并返回结果给用户。但这个结果不是按标准的域名解析过程得到的,而是直接把递归DNS的结果转发给用户。它也具备缓存功能。他主要使用在没有直接的互联网连接,但可以连接到一个递归DNS那里,这时使用转发DNS就比较合适。其缺陷是:直接受递归DNS的影响,服务品质较差。
4、HTTPDNS
DNS服务用于在网络请求时,将域名转为IP地址。传统的基于UDP协议的公共DNS服务极易发生DNS劫持,从而造成安全问题。HttpDns服务则是基于HTTP协议自建DNS服务,或者选择更加可靠的DNS服务提供商来完成DNS服务,以降低发生安全问题的风险。HttpDns还可以为精准调度提供支持。
每一台 DNS 服务器都只负责管理一个有限范围(一个或几个域)内的主机域名和 IP 地址的对应关系,这些特定的 DNS 域或 IP 地址段称为 zone(区域)。如果根据DNS服务器管理的区域地址数据的来源不同,DNS 系统可以分为不同的类型。在同一台 DNS服务器中,相对于不同的区域来说,也拥有不同的身份。常见的几种类型如下:
1、主域名服务器:维护某一个特定 DNS 区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在的权威服务器、官方服务器。
2、从域名服务器:与主域名服务器提供完全相同的 DNS 解析服务,通常用于 DNS 服务器的热备份。对客户机来说,无论使用主域名服务器还是从域名服务器,查询的结果都一样的。关键区别在于,从域名服务器提供的解析结果不是由自己决定的, 而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置, 以便服务器能自动同步区域的地址数据库。
3、缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定其他 DNS 服务器作为解析来源。
工作原理
DNS的工作模式
DNS 查询以各种不同的方式进行解析,客户机可通过使用从以前查询获得的缓存信息就地应答查询,DNS 服务器也可使用其自身的资源记录信息缓存来应答查询。但更多是使用下列两种方式:
本地DNS服务器收到一个域名解析请求时,如果所要检索的资源记录不在本地,DNS服务器将和自己的上一层服务器交互,获得最终的答案,并将其返回给客户
DNS服务器收到解析请求,首先在本地的数据库中查找是否有相应的资源记录,如果没有,则向客户提供另外一个DNS服务器的地址,本地DNS服务器负责把解析请求发送给新的DNS服务器地址。
1、当客户机提出查询请求时,首先在本地计算机的缓存中查找。如果在本地无法获得查询信息,则将查询请求发给本地DNS服务器。
2、首先客户机将域名查询请求发送到本地DNS服务器,当本地DNS服务器接到查询后,首先在该服务器管理的区域的记录中查找,如果找到该记录,则利用此记录进行解析;如果没有区域信息可以满足查询要求,服务器在本地的缓存中查找。
3、如果本地服务器不能在本地找到客户机查询的信息,将客户机请求发送到根域名DNS服务器。
4、根域名服务器负责解析客户机请求的根域部分,它将包含下一级域名信息的DNS服务器地址返回给客户机本地的DNS服务器地址。
5、客户机本地的DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域的DNS服务器地址。
6、按照上述递归方法逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应IP地址信息。
7、客户机的本地DNS服务器将递归查询结果返回客户机。
8、客户机利用从本地DNS服务器查询得到的IP访问目标主机,就完成了一个解析过程
域名转换的过程
1. 查看浏览器内部缓存
检测域名是否存在于浏览器缓存中,如果有缓存直接使用,没有则下一步。打开 chrome://net-internals/#dns 即可查看本机浏览器的 dns 缓存。
2. 系统缓存
浏览器会调用一个类似 gethostbyname 的库函数,此函数会先去检测本地 hosts 文件,查看是否有对应 IP。
PS: 这里有一个点,localhost 默认 ip 是 172.0.0.1,这是一个环回路段,也叫环回接口。也就是不会发往服务器,是直接在本地打开的。
3. 路由器缓存、ISP 缓存
如果浏览器和系统缓存都没有,系统的 gethostname 函数就会像 DNS 服务器发送请求。而网络服务一般都会先经过路由器以及网络服务商(电信),所以会先查询路由器缓存,然后再查询 ISP 的 DNS 缓存。
4. 本地 DNS 服务器
通常为自己计算机搭建的小型 DNS 服务器,自我使用,属于 DNS 优化的一部分。
5. 域名服务器
到此处的过程为:根域服务器(.) —〉顶级域名服务器(eg: .com,.org)—〉主域名服务器(eg: google.com)
如果域名正常,应该就会返回 IP 地址,如果没有浏览器就会提示找不到服务器地址。
第5步如果失效后的操作过程。本地DNS服务器就把请求发至13组根DNS服务器,根DNS服务器收到请求后会判断这个.com域名是谁管理,并会返回一个负责该顶级域名服务器。本地DNS服务器收到顶级域名服务器信息后,将会联系负责.com域的服务器。该.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级.baidu.com域DNS服务器给本地DNS服务器。当本地DNS服务器收到该服务器的信息后,就会找向.baidu.com域服务器查询www.baidu.com域名指向的主机地址,返回给浏览器并将映射关系缓存,至此完成域名解析的过程。
整个迭代查询的过程均通过本地DNS服务器进行,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
DNS常见的记录及作用
DNS记录类型
域名和IP之间的对应关系,称为“记录”(record)。根据记录使用的目的不同,又分为不同的类型,常见的DNS记录类型如下:
1、SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;
name: 当前区域的名字,例如“baidu.com.”;
value: 由多部分组成
(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如admin.baidu.com;
(3) (主从服务协调属性的定义以及否定的答案的统一的TTL)
例如:
baidu.com. 86400 IN SOA ns.baidu.com. nsadmin.baidu.com. (2020032201 ;序列号 2H ;刷新时间 10M ;重试时间 1W ;过期时间 1D ;否定答案的TTL值)
2、A:地址记录(Address),返回域名指向的IP地址。
name: 某主机的FQDN,例如www.sangfor.com.
value: 主机名对应主机的IP地址;
例如:
www.sangfor.com. IN A 1.1.1.2
mx1.sangfor.com. IN A 1.1.1.3
mx2.sangfor.com. IN A 1.1.1.3
3、NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如ns.baidu.com.;
注意:一个区域可以有多个NS记录;
例如:
baidu.com. IN NS ns1.baidu.com.
baidu.com. IN NS ns2.baidu.com.
注意:
(1) 相邻的两个资源记录的name相同时,后续的可省略;
(2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;
4、MX:邮件记录(Mail EXchange),返回接收电子邮件的服务器地址。
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名;
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高;
例如:
magedu.com. IN MX 10 mx1.magedu.com.
IN MX 20 mx2.magedu.com.
注意:
(1) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录;
5、CNAME:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转。
name: 别名的FQDN
value: 正工名字的FQDN;
例如:
web.baidu.com. IN CNAME www.baidu.com //别名记录
6、PTR:逆向查询记录(Pointer Record),只用于从IP地址查询域名,用于反向解析。
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addra.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.baidu.com
简写成:
4 IN PTR www.baidu.com.
注意:网络地址及后缀可省略;主机地址依然需要反着写;
资源定义记录格式
记录一条域名信息映射关系,称之为资源记录(RR)。当我们查询域名www.baidu.com的时候,查询结果得到的资源记录结构体中有如下数据:
1、TTL,生存周期,递归服务器会在缓存中保存该资源记录的时长,即客户端的到解析结果的缓存时长,可从全局继承 。
2、网络/协议类型,它的代表的标识是IN,IN就是internet,目前DNS系统主要支持的协议是IN。
3、type,就是资源记录类型,一般的网站都是都是A记录(IPv4的主机地址)。
4、rdata是资源记录数据,就是域名关联的信息数据。
关于DNS服务器的搭建大家可以参考:
https://blog.csdn.net/weixin_43997530/article/details/103438467