什么是DNS
DNS协议负责通过域名得到对应的IP地址,进而才能建立TCP连接。
DNS获取IP地址流程:
下图摘自书籍《计算机网络-自顶向下》
假如客户端A要知道服务器www.server.com的IP地址,具体可描述如下:
- 主机A先向
本地域名服务器
查询 - 如果没有,本地域名服务器会向一个
根域名服务器
进行查询 - 根域名服务器告诉本地域名服务器,下一次应该查询的
顶级域名服务器
的IP地址 - 本地域名服务器向顶级域名服务器进行查询
- 顶级域名服务器告诉本地域名服务器,下一步查询
权威服务器
的IP地址 - 本地域名服务器向权威服务器进行查询
- 权威服务器告诉本地域名服务器所查询的
主机B
的IP地址 - 本地域名服务器最后把查询结果告诉主机A
分层域名
1、根域名服务器
2、顶级域名服务器
分为:国家顶级域名、通用顶级域名、反向域名。
3、权威域名服务器
比如:Tencent.com、baidu.com
DNS报文结构
查询报问和响应报文格式相同
基础结构部分
事务ID:报文标识,用来区分DNS应答报文是对哪个请求进行响应
标志:DNS报文中标志字段
问题计数:DNS查询请求了多少次
回答资源记录数:DNS响应了多少次
权威名称服务器计数: 权威名称服务器数目
附加资源记录数: 权威名称服务器对应IP地址的数目
标志详情:
QR(Response):查询请求,值为0;响应为1
Opcode:操作码。0表示标准查询;1表示反向查询;2服务器状态请求
AA(Authoritative):授权应答,该字段在响应报文中有效。通过0,1区分是否为权威服务器。如果值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。
TC(Truncated):表示是否被截断。当值为1的时候时,说明响应超过了 512字节并已被截断,此时只返回前512个字节。
RD(Recursion Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。
RA(Recursion Available):可用递归。该字段只出现在响应报文中。当值为 1 时,表示服务器支持递归查询。
Z:保留字段,在所有的请求和应答报文中,它的值必须为 0。
rcode(Reply code):通过返回值判断相应的状态。
当值为0时,表示没有错误;
当值为1时,表示报文格式错误(Format error),服务器不能理解请求的报文;
当值为2时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;
当值为3时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;
当值为4时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;
当值为5时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。
问题部分
该部分是用来显示DNS查询请求的问题,包含查询名(被查询主机名字)、查询类型、查询类。
查询名:一般为查询的域名,也可能是通过IP地址进行反向查询
查询类:地址类型,通常为互联网地址为1
查询类型:查询请求的资源类型。常见的如果为A类型,表示通过域名获取IP。具体如下图所示
-
如果Type = A,则Name是主机名,Value是该主机名对应的IP地址。因此,一条类型为A的资源记录提供了标准的主机名到IP地址的映射。例如(Tayl. bar. foo. com, 145. 37.93. 126, A)就是一条类型 A 记录。
-
如果Type = NS,则Name是个域(如foo. com),而Value是一个可以获得该域中
目标主机IP地址
的权威DNS服务器的主机名
。
资源记录部分
资源记录部分包含回答问题区域,权威名称服务器区域字段、附加信息区域字段,格式如下
域名:所请求的域名
类型:与问题部分查询类型值一直
类:地址类型,和问题部分查询类值一样
生存时间:以秒为单位,表示资源记录的生命周期
资源数据长度:资源数据的长度
资源数据:按照查询要求返回的相关资源数据