文章目录
DNS
一、DNS是什么
DNS是域名系统的缩写,是因特网单位一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
二、DNS有什么作用
DNS的作用就是将域名解析成IP地址,来完成客户机对服务器的访问,当我们上网的时候,实际上访问www.baidu.com就是是访问他的IP地址。
在以前用户上网访问网页的时候都是直接输入IP地址,但是IPV4地址本身就有32位,IPV6的地址更长,不方便记忆,而当一个公司的IP地址变更的时候所有用户想要访问又要重新输入新的IP地址。所以就衍生出了域名,方便记忆。而当某公司的IP地址有所变更的时候,他的域名不需要改变只是域名所映射的IP地址变更了而已,对于用户来说没有任何区别。
所以说IP地址是面向主机的,而域名是面向用户的。而DNS的作用就是代替电脑跟DNS服务器进行请求和查询,简化网络配置和集中管理;简单来说就是方便用户访问,也方便主机管理。
三、域名的分层结构
那想要了解DNS首先我们要了解什么是域名——由于英特网的用户数量很多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。这里,“域”是名字空间中一个可以被管理的划分。从语法上讲,每一个域名都是由有标号(label)的序列组成,而各标号之间用“.”隔开。域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了:顶级域、主域名、子域名等,如下图:
根域用“.”表示,对应的是根服务器,整个域名空间的解析权都归跟服务器所有;但是根服务器无法承担整个因特网的负载,所以他采取一个委派机制,在根域下设置了顶级域,然后将不同的顶级域的解析权委派给了对应的顶级域的服务器。就是为了缓解根域的负载,设置了一些二级域,又在二级域下设置三级域等。像是个全球性质的传销组织。
举例:
“.com”是顶级域名。
“aliyun.com”是主域名(也可称为托管一级域名),主要指企业名。
“example.aliyun.com”是子域名(也可称为托管二级域名)。
“www.example.aliyun.com”是子域名的子域。(托管三级域名)
四、DNS的分层结构
那既然域名是一个分层的结构,那么DNS服务器也是对应的层级结构。
有了域名结构,还需要有域名DNS服务器去解析域名,且需要由遍及全世界的DNS服务器去解析,域名DNS服务器实际上就是装有域名系统的主机。
域名解析过程涉及4个DNS服务器:
分类 | 作用 |
---|---|
根DNS服务器(Root) | 本地域名服务器在本地查询不到解析结果时,则第一步会向它进行查询,并获取顶级域名服务器的IP地址。是所有DNS服务器的爸爸。 |
顶级域名服务器(TLD) | 负责管理在该顶级域名服务器下注册的二级域名,如“www.baidu.com”,则.com是顶级域名服务器,在向他查询时,可以返回二级域名“baidu.com”所在的权威域名服务器地址。 |
权威域名服务器(authoriatative) | 在特定区域内具有唯一性,负责维护该区域内的域名与IP抵制之间的对应关系,例如云解析DNS。 |
本地域名服务器(DNS resolver 或Local DNS) | 本地域名服务器是响应来自客户端的递归请求,并最终跟踪知道获取到解析结果的DNS服务器,例如本机自动分配的DNS,中国电信给你的DNS,谷歌的8.8.8.8公共DNS。 |
每层的域名上都有自己的域名服务器,最顶层的是根域名服务器。
每一集域名服务器都知道下级域名服务器的IP地址,以便一级一级向下查询。
四、DNS解析过程
DNS中有一张域名和相对应的IP地址的表,类似于路由器中的路由表。用户主机访问域名的时候,DNS服务器解析成IP地址提供给主机使用。DNS查询的结果通常会在本地域名服务器中进行缓存,如果本地域名服务器中有缓存的情况下,则会跳过DNS查询步骤,很快返回解析结果。
但是当本地域名服务器没有缓存的情况下,DNS查询则需要8个步骤:
1.用户在浏览器中输入“www.baidu.com”,则本地域名服务器开始进行递归查询。
2.本地域名服务器采用迭代查询的方法,向根域名服务器进行查询。
3.根域名服务器告诉本地域名服务器,下一步应该查询的顶级域名服务器.com TLD的IP地址。
4.本地域名服务器向顶级域名服务器.com TLD进行查询
5…com TLD服务器告诉本地域名服务器,下一步查询baidu.com权威域名服务器的IP地址。
6.本地域名服务器向baidu.com权威域名服务器发送查询。
7.baidu.com权威域名服务器告诉本地域名服务器所查询的主机IP地址。
8.本地域名服务器最后把查询的IP地址响应给用户浏览器。
9.一旦DNS查询的8个步骤成功完成,浏览器就能够对网页发出请求:
1.用户浏览器向IP地址发出HTTP请求
2.该IP处的服务器返回要在浏览器中呈现的网页。
五、DNS术语
1.递归查询
指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有储存与之对应的信息,则该服务器需要询问其它服务器,并将返回的查询结果提交给用户。
递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。主要是本地域名服务器,它是个大冤种。
2.迭代查询
指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向另一台DNS服务器提交请求,这样依次反复,直到返回查询结果。
迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。就像去各种部门办证。
3.DNS缓存
DNS缓存是将解析数据储存在靠近发起请求的客户端的位置。也可以说DNS数据可以缓存在任意位置,最终目的是以此减少递归查询的过程,可以更快的让用户获得请求结果。就像路由表。
4.TTL(生命周期)
这个值表示本地域名服务器,域名节其结果可缓存的最长时间,缓存时间到期后本地域名服务器会删除该解析记录的数据,删除之后,如果用户请求域名,则会重新进行递归/迭代查询。
5.DNS Query Flood Attack
指域名查询攻击,攻击方法是通过操控大量的傀儡机器,发送海量的域名查询请求,当每秒域名查询请求次数超过DNS服务器可承载的能力时,则会造成解析域名超时从而直接影响业务的可用性。
六、DNS的记录类型
DNS支持A、AAAA、CNAME、MX、TXT、SRV、NS、CAA记录类型
记录类型 | 功能描述 |
---|---|
A | IPV4记录,支持将域名映射到IPV4地址使用 |
AAAA | IPV6记录,支持将域名映射到IPV6地址使用 |
CNAME | 别名记录,支持将域名指向另外一个域名,如:www.baidu.com和image.baidu.com都是百度 |
MX | 邮件交互记录,支持将域名指向邮件服务器地址,如发送邮件给@XX.qq.com,那么用户的邮件会通过DNS查找qq.com的这个域名的MX记录,如果存在,就会发送给指定邮件的服务器 |
TXT | 文本记录,是任意可读的文本DNS记录 |
SRV | 服务器资源记录,用来标识某台服务器使用了某个服务,常见于微软系统的目录管理 |
NS | 名称服务器记录,支持将子域名委托给其他DNS服务商解析,指定由哪个DNS服务器来解析你的域名 |
CAA | CAA资源记录,可以限定域名颁发证书和CA(证书颁发机构)之间的联系 |
七、DNS客户端检测工具
正、反解查询命令:host,nslookup,dig
1.host命令
host [选项] [域名或IP] [server]
常用选项:-a:列出该主机详细的各项主机名称设定资料
常用参数:server:host命令默认是使用/etc/resolv.conf文件中的DNS主机来查询的,若设置该参数,则使用这里设置的DNS主机进行查询。
因为host不是Linux内部命令所以需要安装:
yum -y install bind-utils
应用场景:
host -a 域名:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T1kjwcgJ-1654445268501)(https://s2.loli.net/2022/06/05/h6eT3QKLnqI1BDC.png)]
使用自定义的DNS主机解析域名对应的IP地址等信息:
2.nslookup命令
nslookup [域名或IP]
域名解析工具,就是查DNS信息用的命令。使用/etc/resolv.conf这个文件作为DNS服务器的来源选择。
应用场景:
查看本机的DNS:
3.dig命令
dig [选项] [域名]
域名查询工具,可以用来测试域名系统工作是否正常。功能与nslookup相似。
系统中默认是没有dig命令的,所以需要安装:
yum -y install bind-utils
常用选项:
@:dig命令默认使用/etc/resolv.conf文件中的DNS主机来解析域名,若设置该参数,则使用这里设置的DNS主机进行解析。
-b:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求。
应用场景:
dig www.baidu.com
dig @8.8.8.8 www.baidu.com #使用自定义的DNS解析
八、DNS客户端配置
centos7中手动设置/etc/resolv.conf里的DNS,系统会重新覆盖或者清除,一般使用传统方法——修改NetworkManger配置。
1.修改NetworkManger配置
1.修改/etc/NetworkManger/networkmanger.conf文件,在main部分添加“dns=none”选项:
2.重启NetworkManger服务
systemctl restart NetworkManger.service
3.手动修改/etc/resolv.conf
2.网卡配置文件指定DNS
1.修改网卡配置文件:
2.重启网络
service network restart
九、应用场景
注册域名
END