域名解析过程

首先说明,http协议(应用层协议)是基于tcp协议(传输层协议)的一种互联网传输协议。当Chrome浏览器访问 www.google.com 域名的时候,我们都知道,浏览器访问的是www.google.com对应的ip地址,那么Chrome浏览器是怎么根据www.google.com域名找到它对应的ip地址的呢?

首先Chrome浏览器会搜索浏览器自身的DNS缓存(缓存时间较短,大概只有1分钟,且最多容纳1000条缓存)。如果浏览器自身缓存找不到,则会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是提供网络的运营商DNS服务器)发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归请求,也就是运营商DNS服务器必须提供给我们要查询域名的IP地址),运营商DNS服务器首先查找自身缓存,找到对应条目,且没有过期则解析成功。如果没有找到对应的条目,则运营商的DNS代替我们的浏览器发起迭代DNS解析请求,首先它会找根域的DNS的IP地址(全球13台根据DNS服务器命名A~M),找到根域的DNS地址,就会向其发送DNS解析请求(请问www.google.com域名对应的IP是多少啊?)根域名服务器发现这是一个顶级com域的域名,于是根域名服务器告诉运营商DNS我不知道你要查询的域名ip地址,但是我知道com域的ip地址,于是运营商的DNS就得到了com与的ip地址,并向com域服务器发起DNS解析请求,com域这台服务器概述运营商的DNS我不知道 www.google.com的域名IP地址,但是我知道google.com域的DNS地址,于是运营商的DNS向google.com这个域名的DNS(这个一般由域名注册商提供,向万网、新网等)发起请求,于是google.com域的DNS服务器查到了www.google.com对应的IP,于是把结果返回给运营商的DNS服务器,这时候运营商的DNS服务器拿到了www.google.com域名对应的IP地址,并返回给Windows内核,内核又把结果返回给浏览器。

DNS服务器层级

在域名解析流程中,处于最顶层的是根域名服务器,它负责管理全世界的域名信息,根域名服务器下面是顶级域名服务器,存储着相关域名管理机构的数据库,在下一层是域名数据库和互联网服务提供商。

DNS协议报文

头部:

  1. Transaction ID 会话表示(2字节16位)是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的相应
  2. Flags 标识(2字节16位)
QR(1bit)查询/相应标志;0:查询,1:响应
opcode(4bit)0:标识标准查询,1:反向查询,2:服务器状态请求
AA(1bit)授权回答
TC(1bit)表示可截断的
RD(1bit)表示期望递归的
RA(1bit)表示可用递归
Rcode(4bit)表示返回码;0:没差错,3:名字差错,2:服务器错误

questions、answerRRs、AuthorityRRs、AdditionalRRs各自表示后边四个区域的数目,每个16bit

头部占用96bit

正文:

  1. Queries区域

查询名:长度不固定,且不适用填充字节,表示要查询的域名(如果是反向查询,则为ip,即通过ip查域名)

一般格式(以查询 jocent.me 为例):

​ 查询类型Type:

类型助记符说明
1A由域名获得IPv4地址
2NS查询域名服务器
5CNAME查询规范名称
6SOA开始授权
11WKS熟知服务
12PTR把IP地址转换成域名
13HINFO主机信息
15MX邮件交换
28AAAA由域名获得IPv6地址
252AXFR传送整个区的请求
255ANY对所有记录的请求

​ 查询类Class:通常为1,表示Internet数据

  1. 资源记录区域(RR)区域(包含:回答区域、授权区域和附加区域)

Name:格式和Queries区域的查询名字字段一样,当报文中域名重复出现,该字段使用2个字节的偏移指针表示。比如在资源记录中,域名通常是查询问题部分的域名的重复,因此用2字节的指针表示,具体格式是:最前面两个高位是11,用于识别指针。其余14为从DNS报文的开始处计数(从0开始),只出该报文中的相应字节数

Type:同上

Class:用于Internet信息,总是IN

生存时间:表示资源记录的生命周期但是是秒

资源数据:表示按照查询段的要求返回的相关资源记录的数据,可以是Address(表名查询回应是一个ip地址)或者CNAME(表明查询报文想要的回应是一个规范主机名)等。

DNS请求方式选择

DNS可以使用UDP/53,也可以使用TCP/53,当相应报文长度小于512B时,使用UDP,若相应报文长度超过512B,则选用TCP。主域名服务器和辅助域名服务器在进行区域传送时,通常数据量较大,使用TCP协议;若解析程序不知道保温长度,则先使用UDP查询,若长度大于512B,服务器就会截断相应报文并把TC位置1,DNS客户端可以使用TCP协议重发原来的DNS请求。

DNS传播检查

文章目录