- DNS是Domain Name System的缩写,中文名为“域名系统”。在互联网中起着非常重要的作用。
- 它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。自从有了DNS我们去访问网站时就不会去记哪些晦涩的IP,就像现在我们访问百度一般都是输入www.baidu.com或者直接搜索百度,应该没有人会通过百度的IP地址去访问吧!
- DNS使用的UDP的53端口号,当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
- DNS是工作在应用层的一个协议,用来管理域名和IP地址的映射关系的。
域名解析概述
域名解析就像我们初次去拜访一个人一样,我们要知道人家的门派号,然后根据地址去寻找。在Internet上只知道某台机器的域名还是不够的,还要有办法去找那台机器。寻找这台机器的任务由网上一种被称为域名服务器的设备来完成的,而完成这一任务的过程就称为域名解析。
域名解析过程
当一台机器a向其域名服务器A发出域名解析请求时,如果A可以解析,则将解析结果发给a,否则,,A将向其上级域名服务器B发出解析请求,如果B能解析,则将解析结果发给a,如果B无法解析,则将请求发个再上一级域名服务器C,如此下去,直至解析到为止。
DNS的工作过程
- 为了解析一个域名(www.baidu.com),应用程序会调用域名解析库函数,并将域名作为参数传入其中。
此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一个域名解析请求。
上连DNS服务器接到域名解析请求后,在本机查询此域名,找到后将其对应的IP地址返回给解析库函数。
解析库函数接收到上连DNS服务器返回的信息后,将此信息返回给应用程序。
这里我们以scs.bupt.deu.cn域名为例子
- 为了解析,浏览器会调用域名解析库函数,并将域名作为参数传入其中。
- 此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一域名解析请求。
- 上连DNS服务器接到域名解析请求后,在本机查找此域名,但是若没找到对应信息。
- 这时上连的DNS服务器就会求助于根DNS服务器(root-server.net)
- 然后请求就会逐级转发,顺序是cn的DNS服务器——edu.cn的DNS服务器——bupt.edu.cn的DNS服务器。(就是逐渐缩小范围)
- 由于bupt.edu.cn一定是管理scs.bupt.edu.cn的资源记录的DNS服务器,于是,bupt.edu.cn的DNS服务器会将所查询域名对应的IP地址返回给上一级。
- 这个IP地址会按照逆序依次回传,顺序是edu.cn的DNS服务器——cn的DNS服务器——根DNS服务器。
- 最后根DNS服务器将这个信息返回给上连DNS服务器。
- 上连DNS服务器收到结果后,首先会将这个结果缓存到本机,同时,将其回传给用户浏览器。
这里有点很重要那就是上连的DNS服务器在收到结果后,不仅会把结果返回给调用者,还会自己缓存起来。
迭代查询的前四步与递归查询一样。(自我感觉:迭代查询就类似反向代理,都是用户访问资源,通过代理服务器转发到其他服务器)
上连DNS服务器解析不到就会将请求转发到根服务器,但是根服务器会将请求再返回给上连服务器,并告诉上连服务器可以去找cn服务器,然后cn服务器就会去找他的好盆友edu.cn,edu再会去找bupt.edu.cn的服务器,而bupt.edu.cn知道scs.bupt.edu.cn的资源,所以拿到资源之后就交给上连DNS服务器。上连服务器拿到之后首先进行缓存,然后再个到用户的浏览器。
说到nslookup可能有些小伙伴不太熟悉这是干嘛的,nslookup是name server lookup的缩写,nslookup是用来查询DNS的。如你想知道百度的IP地址就可以使用nslookup。
// 如果你的linux系统里面没有nslookup命令则需要安装bind-utils软件包,这个软件包含有我们管理DNS的一些列命令,如host、dig、nslookup等
nslookup的两种模式
第一种交互模式
- 在交互模式下,用户只需要执行一次nslookup,就可以向域名服务器进行请求查询
第二种非交互模式
- 在非交互模式下,用户发起的查询请求是一次性的,下次查询需要再执行nslookup。
交互模式
非交互模式
域名解析的缓存
通过上面的例子我们知道的nslookup,也提到了上连服务器的缓存。这里我们就来说一下
细心的朋友可能发现nslookup的输出内容中有一行Non-authoritative answer的字样,这个就是和缓存相关的。
这里我们就来说一下关于DNS服务器的缓存
- 每个DNS服务器都有一个高速缓存区,这里面存放着这台DNS服务器最近“路过”的域名–IP地址的映射关系,以及获得这些映射关系的查询出处。若下次再有人访问同一个域名,这台上连DNS服务器就不需要再发起递归或迭代查询了。
- 现在又有一个问题那就是因为机器可能会出现故障,网站也会进行迁移,所以域名对应的IP地址会因此发生变化,这时就需要给DNS服务器的缓存设置一个期限,比如一天或几个小时。一旦超过期限DNS就不会信任这个域名,就会进行递归或迭代区查询。
- 但是这样还是会有问题。假如我们12点整在DNS上缓存了www.baidu.com的域名解析,但是在12:03因为网站迁移修改了其对应的IP地址,这时正好有用户要访问,就会拿到已过期的IP地址
- 之所以会出现Non-authoritative answer字样是因为DNS是从自己的缓存中提取的解析数据返回给用户的,给出这个字样是基于上面两个原因,Non-authoritative answer意思是非权威的。
授权与非授权
在DNS的世界里没有谁知道所有的答案,比如:用户要访问scs.butp.edu.cn这个IP地址,这里我们暂时将edu.cn称为A主机;bupt.edu.cn称为B主机。当用户访问时edu.cn的DNS服务器将butp.edu.cn的域名解析授权给B主机。只有B才会返回有关scs.butp.edu.cn域名解析,才是授权的;否则就是非授权。
一般情况下,一台DNS服务器从自身缓存中提取结果并返回给询问者,这个结果就是非授权的。
// nslookup包含上下两个部分
- 上半部分: DNS服务器的信息
- 下半部分: 域名解析信息
DNS世界里面的五元组分别是{DomainName、TimeToLive、Class、Type、Value}
- DomainName(域名):指我们要查询的那个域名
- TimeToLive(生存期限):表示此域名在各DNS服务器缓存中应保存的时长。
- Class(类别):通常为IN,即Internet。另外还有CH(chaos)和HS(hesiod)两类,但目前几乎已经被淘汰了
- Type(类型):指出这条记录的类型,包括8种,即SOA、A、MX、NS、CNAME、PTR、HINFO和TXT。
- Value(值):针对不同类型,会有不同的值
DNS的八种类型
DNS的八种类型即Type的8个可选类型:
- SOA:start of Authority,授权起始。
- A:IP地址
- MX:邮件交换
- MS:域名服务器
- CNAME:别名,也叫规范名
- HINFO:主机描述信息,包括CPU和OS等信息
- PTR:指针,用于反向解析
- TXT:其他一些文本信息
类型SOA
SOA,即Start Of Authority,表示授权起始。
- Mail:管理员邮箱地址。
- Serial:版本序号,格式一般为年月日次。
- Refresh Slave:表示Slave的DNS服务器多久向Master的DNS服务器要一次更新数据。
- Retry:在发起Refresh时,如果Slave连接不到Master,那么间隔多久进行一次连接尝试。
- Expire:在发起Refresh时,如果Slave始终无法连接到Master,那么多久后放弃尝试。
- 即TTL,表示外部DNS服务器如果要缓存本DNS服务器的授权数据,那么保存时限是多久。
类型A
// A,表示从域名解析到IP地址。此处用来展示其对应的IP地址信息,俗称“A记录”。
类型MX
// MX,是Mail eXchanger的缩写,即邮件交换。此类型和邮箱服务器设置有关,用来表示当前域名对应的邮箱服务器。当域名没有配置对应邮箱服务器,则MX为空
类型NS
// NS,即Name Server,表示给定域名下所包含的DNS服务器信息。
类型CNAME
// CNAME,即Canonical Name,也叫别名。如www.baidu.com就是www.a.shifen.com的别名
类型PTR
// PTR,即指针,用来表示反解信息,即从IP地址查询其对应域名的映射关系。
类型HINFO
// HINFO,会包含CPU和OS等信息。
类型TXT
// TXT,即文本信息,表示有关此域名的一些信息。
查看当前DNS的配置
进入调试模式,查看更多交互信息
// set d2是高级调试模式,会输出更多的信息
指定查询中默认的域名后缀
设置默认的域后缀,可以为我们的查询带来便捷
在交互模式下设置type
通过set querytype=[value],我们可以更改信息查询的类型。
默认情况下,nslookup是查询域名所对应的A记录,而当你想查询其对应的MX记录等信息时,就需要更改查询的类型了。
目前常用的type值如下:
- A:查看主机的IPv4地址
- AAAA:查看主机的IPv6地址
- ANY:查看关于主机域的所有信息
- CNAME:查找与别名对应的正式名字
- HINFO:查找主机的CPU与操作系统类型
- MINFO:查找邮箱信息
- MX:查找邮件交换信息
- NS:查找主机域的域名服务器
- PTR:查找与给定IP地址匹配的主机名
- RP:查找域负责人记录
- SOA:查找域内的SOA地址
- UINFO:查找用户信息
// 例如,针对MX类型的查询结果
给dig加个.
dig之批量查询
// dig可以从文件里面读取