DNS协议(DNS规范、DNS报文、DNS智能选路)
目录
DNS协议基本概念
DNS相关规范
DNS服务器的记录
DNS报文
DNS域名查询的两种方式
DNS工作过程
DNS智能选路
DNS协议基本概念
DNS的背景
我们知道主机通信需要依靠IP地址,但是每次通过输入对方的IP地址和对端通信不够方便,IP地址不好记忆
因此提出了通过主机名(也就是后面定义的域名中的某个部分)来和IP地址对应,通过访问主机名来实现访问IP地址,达到通信的效果;由于最开始网络上的主机比较少,通过使用本地的HOSTS.TXT文件来记录域名和IP地址之间的关系,并定期手动更新(Windows下的Host主机文件在:C:\Windows\System32\drivers\etc\hosts)
但是后来随着主机数量的增加,人工更新HOSTS.TXT文件不再适用,因此后面就提出了DNS规范
DNS协议的作用
DNS是一种具有层次结构的将域名和IP地址互相映射的分布式数据库(分布式:可以理解为通过大量的服务器来实现DNS解析—因为域名越来越多,少量服务器不够用)
其中记录了各种主机域名与IP地址的对应关系,能够使得用户更加方便的访问网站
即:
用户直接输入域名登录网站,通过DNS服务器将域名解析为IP地址,然后用户根据该IP地址进行报文封装和传输
DNS协议端口号
DNS端口号为53,支持TCP和UDP(TCP能够提供可靠的连接,并且可以处理更大的数据量)
使用UDP情况:
一般普通DNS查询为UDP协议
使用TCP情况:
区域传输的时候会使用TCP(即DNS服务器之间迁移记录的时候会使用到TCP协议)
在DNS记录的TTL为0时,服务器重新请求该记录也会使用到TCP
当DNS的响应报文大于512字节而使得TC标志位置位(表示被截断)时,会使用TCP重新查询
DNS相关规范
域名的分类
根域名
. 就是根域(不过一般在书写时省略)
顶级域名(又分为国家顶级域名和国际顶级域名)
国家顶级域名
中国cn
美国us等
国际顶级域名
.com 表示网络提供商提供的域名
.net 表示非盈利组织
.org等
二级域名(又分为国际域名下的二级域名和国家域名下的二级域名)
国际顶级域名下的二级域名
一般指域名注册人的网上名称(一般为企业名称);、
例如ibm、yahoo、microsoft、sangfor等
国家顶级域名下的二级域名(以下针对中国来说)
我国二级域名又分为类别域名和行政区域名两大类
类别域名6个
ac 用于科研机构
edu 用于教育机构
gov 用于政府部分
net 用于互联网信息中心
org 用于非盈利组织
com 工商金融企业
行政区域有34个,分别对应我国各省、自治区、直辖市
三级域名
使用字母、数字、连接符组成(各级域名之间用实点.连接)
DNS服务器类型
按照地域性划分
根域名服务器:最高层次的域名服务器(每一个根域名副武器都要存储所有顶级域名服务器的IP地址和域名)
顶级域名服务器:顶级域名服务器负责管理在本顶级域名服务器上注册的所有二级域名
权威域名服务器:负责将区域管辖内的主机域名转换为该主机的IP地址
本地域名服务器:默认域名服务器,离用户较近
根据工作性质划分
主域名服务器:负责维护某一个特定DNS区域的所有域名信息(对其中的解析记录具有自主控制权);是指定区域中唯一存在的权威服务器
辅助域名服务器:作为主域名服务器的备份,自动同步主域名服务器的域名信息(即从域名服务器提供的解析结果来自于主域名服务器—一般辅助服务器会定时向主域服务器进行查询-来了解记录是否发生变化通过TCP协议)
缓存域名服务器:没有自己的域名数据库,只提供域名解析结果的缓存功能;它从某个远程服务器取得每次域名服务器的查询回答(因此需要设置根域或其他DNS服务器作为解析来源),并将答案放在高速缓存中;以后查询相同的信息就会从缓存中的信息进行回答,提高查询速度和效率
转发域名服务器:负责所有非区域的本地查询;接到查询请求后,在本地缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止
常用DNS服务器地址
114.114.114.114 国内通用DNS服务器地址
223.5.5.5 阿里云服务器
8.8.8.8 美国谷歌
DNS服务器的记录
DNS相关记录
记录名称
记录内容
补充说明
SOA(Start of Authority)记录
是授权机构起使记录(记录有关区域的重要信息)
例如:管理员相关信息、上次更新时间参数等信息
所有的DNS区域都需要一个SOA记录A(Address)记录
主机记录(将DNS域名解析为IPv4地址)
--------------------
AAAA记录
主机记录(将DNS域名解析为IPv6地址)
--------------------
NS(Name Server)记录
域名服务器记录(记录域名和DNS服务器的关系,一般为DNS服务器为权限域名服务器;表示想要查询该域名,你需要去找这个DNS服务器来查询对应域名的IP地址)
该记录只能设置为域名(即:记录的DNS服务器是以域名的形式显示的,不能通过IP地址的形式显示)
因此,该记录一般会结合A记录使用(通过A记录来指明该DNS服务器域名对应的IP地址)PTR(Pointer Record)记录
逆向查询记录(将IP地址解析成域名,主要用于判断垃圾邮件)
具体判断垃圾邮件的原理:垃圾邮件一般是伪造邮件头部的'From'字段(邮件的From字段有IP地址、域名等信息);当发送方发送邮件过来时,服务器通过PTR记录将IP地址解析为该IP地址对应的邮件域名,如果该邮件域名与发送方的邮件头中的'From'字段不一致(或者将邮件域名通过MX记录或A记录解析为IP地址,该IP地址与'From'字段不一致),则认为该邮件为垃圾邮件
MX(Mail eXchange)记录
邮件交换机器(告诉用户哪个邮件服务器负责接收特定域名的电子邮件,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器)
例子:当某用户要发送邮件到12313@qq.com时,该用户的邮件系统就会通过DNS查找qq.com这个邮件后缀的MX记录;如果MX记录存在则用户将邮件发送到该邮件后缀所对应的邮件服务器上(可以是IP地址,也可以是域名--如果是域名则需要A记录来记录域名对应的IP地址)
CNAME(Canonical Name)记录
别名记录(将一个域名指向另一个域名,然后再解析关于另一个域名的IP地址)
多个域名可以对应相同的IP地址(可以减少A记录条数)
SPF记录
用于防范垃圾邮件而提出来的一种DNS记录类型,是一种TXT类型的记录(记录了一个域名所拥有的用来发送邮件的所有IP地址)
通过IP地址来进行邮件的身份认证(如果发件人的IP地址被包含在SPF记录里面,就认为是正确的邮件)
记录域名映射信息的格式
记录一般为以下格式
Name(域名或IP地址等)、TTL(生存周期)、Class(网路协议类型)、Type(资源记录类型)、Data(记录包含的数据)
TTL:将该DNS记录缓存在DNS服务器的时间(以s为单位),当TTL为0时,该记录会被认为过期,服务器会重新查询该记录的并进行更新(重新查询时使用的TCP协议)
以CNMA记录为例
DNS报文
DNS Query DNS请求
包含域名、DNS服务器地址
Transaction ID:事务ID(DNS报文的ID标识)
Flags:标志位
Questions:DNS请求的记录数量
Answer RRs:DNS响应的记录数量
Authority RRs:权威名称服务器的数量
Additional RRs:额外的记录数目(指的是权威名称服务器对应的IP地址的数目)
Queries:请求的记录信息以及请求的记录类型
DNS Response DSN应答
包含域名对应的1个或多个地址(也有可能是DNS服务器地址)
Transaction ID:事务ID(DNS报文的ID标识)
Flags:标志位
Questions:DNS请求的记录数量
Answer RRs:DNS响应的记录数量
Authority RRs:权威名称服务器的数量
Additional RRs:额外的记录数目(指的是权威名称服务器对应的IP地址的数目)
Queries:请求的记录信息以及请求的记录类型
Answers:响应的记录信息以及响应的记录类型
具体的标志位讲解
Response(QR):查询响应标志位(1为响应,0为查询)
Opcode:操作码(0标识标准查询、1标识方向查询、2表示服务器状态请求)
Authoritative(AA):授权应答,在响应报文有效(1表示位权威服务器的回应,0表示不是)
Thruncated(TC):表示是否被截断(1表示响应超过512字节被截断,此时使用TCP重新查询)
Recursion desired(RD):期望递归(为1表示请求为递归查询、需要返回结果;为0表示请求为迭代查询,可以返回能够查询的DNS服务器)
Recursion available(RA):可用递归,在响应报文有效(1表示服务器支持递归查询)
Authenticated:身份认证和认证数据
Reply code(rcode):表示响应的差错状态(0表示没有错误、1表示报文格式错误、2表示域名服务器失败、3表示域名错误、4表示查询类型不支持、5表示拒绝响应)
DNS域名查询的两种方式
递归查询(客户端只需要发送一次DNS请求就可以得到结果)
主要用于主机向本地域名服务器请求时使用(要求本地域名服务器返回给主机结果,本地域名服务器如何获得该结果主机不需要知道---即要返回给主机域名对应的IP地址)
迭代查询(服务器只需要查询自己本地的数据库)
主要用于DNS服务器和DNS服务器之间的请求(要求服务器返回可以返回域名对应结果,也可以返回能够解析该域名的域名服务器地址)
如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,则本地域名服务器以DNS客户端的身份向其它根域名服务器继续发出查询请求报文(替主机查询)
根域名服务器收到本地域名服务器发出的迭代查询请求时,要么给出所查询域名的IP地址,要么告诉本地服务器下一步应该向哪一个域名服务器进行查询;就这样本地服务器依次发送DNS请求;最后本地域名服务将结果返回给主机
DNS工作过程
本地DNS服务器收到用户发来的DNS递归请求后具体如何工作
服务器收到DNS请求报文后,查看该域名自己是否能够解析
如果可以解析,查找对应记录返回结果给请求方
如果无法解析,则进行DNS请求(选择递归或者迭代—不过一般是迭代)
- 如果选择迭代,则发送DNS请求给其它服务器;其它服务器收到后,可以回应能够解析该域名的域名服务器地址,也可以回应结果(如果服务器回应能够解析该域名的域名服务器地址,则自身需要再发送DNS去请求—再此选择是迭代还是递归)
- 最后将得到的结果返回给主机
- 如果选择递归,则发送DNS请求给其它服务器;需要其它服务器回应具体的结果给自己(至于其它服务器如何获得结果自己不管)
DNS查询过程
- 当在浏览器中输入URL时,浏览器会先检查自己的缓存是否有域名IP的映射关系,有则直接使用IP进行通信;如浏览器没有缓存,则操作系统检查本地Hosts文件是否有域名IP的映射关系,有则使用IP进行通信;如果hosts没有这个域名的映射,则查找本地DNS解析器缓存是否有映射关系,有则直接返回完成域名解析;
- 如果还未找到映射关系,首先会找本地DNS服务器,如果服务器已缓存了映射关系,则使用这个IP地址映射返回完成域名解析(此解析不具有权威性)
- 如果本地DNS服务器缓存已经失效,进行递归查询,然后将结果返回给主机
DNS智能选路
如何实现DNS的智能选路
一个域名可能对应多个IP地址(每个运营商都有),正常情况下DNS服务器会随机选择一个给主机,这时主机访问就是随机访问,可能会出现跨运营商访问的问题,造成体验较差
此时就可以通过应用交付来实现DNS的智能选路
应用交付AD在DNS解析中的作用
AD可以解决DNS域名解析跨运营商访问的问题(通过智能选路选择对应的运营商地址--通过AD产品结合NS记录实现);在该场景下,AD其实是作为一个域名解析服务器,提供最终的域名到IP地址的解析
具体步骤
需要先将权威服务器中关于网站的A记录改为NS记录,并指向AD的域名(然后再通过A记录来记录AD域名对应的IP地址),最后将AD地址发给用户
此时用户主机向此AD发送DNS请求,AD根据主机的源IP地址,判断其所属的运营商;然后进行域名解析时,就解析该运营商对应域名的IP地址,将其返回给主机
访问网站全过程(通过AD智能选路)