1. DNS域名解析
DNS(Domain Name System,域名系统)是一个将域名转化为IP地址的网络协议,通过域名得到对应的IP地址的过程也叫做域名解析。
使用DNS服务,用户访问互联网只需通过域名就行了,而不需要去记住ip地址,这样用户可以更方便的访问互联网。
2. 域名的结构
通常我们在浏览器输入的网址就是一个域名,由2个或2个以上部分组成,各个部分由英文符号“.”进行分隔,例如www.baidu.com,这个域名是由三部分组成的。
3. 域名的类别
国际域名:.com ,.top ,.net ,.org ,.cc ,.tv
国家/地区域名:cn(中国大陆),de(德国),jp(日本),hk(中国香港),tw(中国台湾),uk(英国),us(美国),等等
机构域名:gov(政府部门),mil(军事部门),com(商业性的机构或公司)等
4. 域名解析过程
当在浏览器的地址栏中输入www.baidu.com网址并回车,计算机会发送一个DNS请求查询域名对应的ip地址,如下图所示:
客户端首先会发送一个DNS请求到本地DNS服务器查询www.baidu.com域名的ip地址,然后本地DNS服务器会先从自己的缓存数据库中查找,如果有就直接返回,如果没有则向根服务器进行查询,如果根服务器也没有记录则会告诉本地DNS服务器去域名服务器查询,本地DNS服务器会重新发起请求向.com服务器查询,域名服务器收到DNS请求后并不会直接返回www.baidu.com对应的ip地址,而是告诉本地DNS服务器可以在baidu.com服务器上进行查询解析域名对应的ip地址。本地DNS服务器会向baidu.com服务器发起DNS请求,baidu.com服务器从自己的缓存数据库中查找到www.baidu.com域名对应的ip地址后则会把该记录返回给本地DNS服务器。然后本地DNS服务器会把该记录返回给客户端同时缓存到自己的数据库中。
5. DNS的查询方式
正向查询和反向查询:
递归查询和迭代查询可参考www.baiidu.com域名解析过程。
6. DNS报文的格式
DNS协议是基于UDP和TCP协议的,使用端口号53,客户端到服务器采用UDP协议,DNS服务器通信采用TCP协议。
DNS报文的头部部分包括了会话标识,标志,数量字段。
6.1 会话标识
会话标识(Transaction ID):该字段占用2字节,是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应。
6.2 标志
标志(Flags):该字段也是占用2字节
QR(1bit) 查询/响应标志,0为查询(query),1为响应(response)
opcode(4bit) 0表示标准查询,1表示反向查询,2表示服务器状态请求
AA(1bit) 表示授权回答
TC(1bit) 表示是否截断,值为1表示响应已超过512字节会截断,只返回前512个字节
RD(1bit) 表示期望递归
RA(1bit) 表示可用递归
rcode(4bit) 表示返回码,0表示没有差错,1表示报文格式错误,2表示域名服务错误(Server Failure),3表示名字差错,值为4表示查询类型不支持,值为5则表示服务被拒绝
6.3 问题区域
问题区域部门是报文格式中查询问题部分,用于显示DNS查询请求的问题:
问题区域部分的字段含义:
查询名:长度不固定,且不使用填充字节,一般该字段表示的就是需要查询的域名(如果是反向查询,则为IP,反向查询即由IP地址反查域名)。
查询类型:DNS查询请求的资源类型,通常查询类型为A类型(表示域名获取对应的ip地址)
查询类:地址类型,通常为互联网地址
6.4 资源记录(RR)区域
资源记录区域是指DNS报文格式中最后三个字段,包括回答问题区域字段,权威名称服务器区域字段,附加信息区域字段:
资源记录区域字段含义:
域名:DNS请求的域名
类型:资源记录的类型
类:地址类型
资源数据长度:资源数据的长度
资源数据:表示按查询段要求返回的相关资源记录的数据
生存时间:以秒为单位,表示的是资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间
7. 通过wireshark分析DNS协议
以ping百度网站为例,当我们执行ping www.baidu.com命令时,计算机首先会发送一个DNS请求获取www.baidu.com网址对应的ip地址,可以通过wireshark抓包工具来验证:
在DNS协议的封装格式中可以看到客户端向DNS服务器发送了一个DNS请求报文,基于UDP协议,端口号为53(客户端到服务器是采用UDP协议,服务器与服务器之间是采用TCP协议)。Frame73是DNS请求包,Frame75是DNS响应包。
7.1 DNS请求报文
Frame 73是一个DNS请求包,格式如下:
Domain Name System (query)
Transaction ID: 0xa430
Flags: 0x0100 Standard query #query表示这是一个DNS请求包
Questions: 1
Answer RRs: 0
Authority RRs: 0
Additional RRs: 0
Queries
www.baidu.com: type A, class IN
Name: www.baidu.com #表示查询的内容
[Name Length: 13]
[Label Count: 3]
Type: A (Host Address) (1) #类型A说明是查询类型
Class: IN (0x0001)
[Response In: 75] #表示服务端给客户端发送的DNS响应包
7.2 DNS响应报文
Frame 75DNS响应包,格式如下
Domain Name System (response)
Transaction ID: 0xa430
Flags: 0x8180 Standard query response, No error #DNS响应包
Questions: 1
Answer RRs: 3
Authority RRs: 0
Additional RRs: 0
Queries
www.baidu.com: type A, class IN
Name: www.baidu.com
[Name Length: 13]
[Label Count: 3]
Type: A (Host Address) (1)
Class: IN (0x0001)
Answers #回答区域内容
www.baidu.com: type CNAME, class IN, cname www.a.shifen.com
www.a.shifen.com: type A, class IN, addr 110.242.68.3
www.a.shifen.com: type A, class IN, addr 110.242.68.4
[Request In: 73]
[Time: 0.014242998 seconds]
回答区域内容一般都是DNS服务器返回给客户端的查询到的内容。