一、DNS概念
域名系统(Domain Name System)为Internet中域名和IP地址相互映射的一个分布式数据库,用户只需通过主机名就可以访问互联网上的主机,而不用去记主机的IP地址。将主机名解析为该主机名对应的IP地址的过程叫作域名解析(或主机名解析)。DNS协议运行在TCP/IP协议族的UDP协议之上,使用端口号53。
二、DNS报文格式
DNS 分为查询请求和查询响应,请求和响应的报文结构基本相同。DNS 报文格式如下所示。
事务ID(Transaction ID) | 标志(Flags) |
问题计数(Questions) | 回答资源记录数(Answer RRs) |
权威名称服务器计数(Authority RRs) | 附加资源记录数(Additional RRs) |
查询问题区域(Queries) | |
回答问题区域(Answers) | |
权威名称服务器区域(Authoritative nameservers) | |
附加信息区域(Additional records) |
1、用于区分请求和应答报文的字段是标志字段(Flags)中的QR字段,除此之外还有若干个字段,如下所示。
QR | Opcode | AA | TC | RD | RA | Z | rcode |
每个字段的含义如下:
- QR(Response):查询请求/响应的标志信息。查询请求时,值为 0;响应时,值为 1。
- Opcode:操作码。其中,0 表示标准查询;1 表示反向查询;2 表示服务器状态请求。
- AA(Authoritative):授权应答,该字段在响应报文中有效。值为 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),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。
2、在DNS应答报文的查询问题区域(Queries)、回答问题区域(Answers)和权威名称服务器区域(Authoritative nameservers)会有资源记录类型type,资源记录类型是用来标识需要查询/已查询到域名的各种记录。抓包如下所示:
资源记录常见类型如下所示:
TYPE value and meaning
A 1 a host address
NS 2 an authoritative name server
MD 3 a mail destination (Obsolete - use MX)
MF 4 a mail forwarder (Obsolete - use MX)
CNAME 5 the canonical name for an alias
SOA 6 marks the start of a zone of authority
MB 7 a mailbox domain name (EXPERIMENTAL)
MG 8 a mail group member (EXPERIMENTAL)
MR 9 a mail rename domain name (EXPERIMENTAL)
NULL 10 a null RR (EXPERIMENTAL)
WKS 11 a well known service description
PTR 12 a domain name pointer
HINFO 13 host information
MINFO 14 mailbox or mail list information
MX 15 mail exchange
TXT 16 text strings
三、域名格式
例如在www.baidu.com中,www是三级域名,baidu是二级域名(权威域名),com是一级域名(顶级域名),一级域名之上是根域名。他们的关系是:二级包含三级,一级包含二级...
全球共有13组根域名服务器。
四、DNS域名解析过程
假设我们现在使用浏览器访问某域名,首先要做的事情是查看浏览器缓存中有没有对应的IP记录,同时还要查询一下主机本地文件里面有没有对应的记录。以www.bilibili.com为例,完整步骤如下所示:
五、nslookup工具模拟域名解析过程
六、相应抓包
七、文章引用
[1]沈劲桐.基于Linux环境的DNS实验设计与实现[J].科技风,2024,(33):112-115.DOI:10.19392/j.cnki.1671-7341.202433035.
[2]张久发,黄兵,许彦彬,等.一种去中心化的域名服务本地化模型[J].信息技术与网络安全,2022,41(01):30-36.DOI:10.19358/j.issn.2096-5133.2022.01.005.
DNS报文格式解析(非常详细) - C语言中文网https://c.biancheng.net/view/6457.html
RFC官方文档链接:rfc1035.txt.pdfhttps://www.rfc-editor.org/rfc/pdfrfc/rfc1035.txt.pdf
(rfc1035只讲了DNS协议部分知识,可以看其他编号的RFC文档。)