DNS协议详解

一:DNS协议简介

当我们想要访问百度的时候,我们会输入网址www.baidu.com,而不是直接输入百度的服务器的IP地址去访问,而且我们也不知道百度的服务器的IP地址是多少。为什么我们输入百度的网址就能自动去找到百度的服务器地址呢。这背后就有DNS的功劳。

域名系统(Domain Name System,缩写:DNS)是互联网的一项基础服务。DNS允许终端用户设备将给定的人类可读URL转换为网络可以理解的机器可用IP地址。DNS本质是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系统。

DNS作为互联网的一个基础协议,其设计之初就考虑到了高效简单可用的原则,采用了协议设计中场景的分层架构。就像一个数据包有网络层,传输层,应用层。DNS本身也有自己独特的分层设计。

Domain 分层架构呈现为树形结构,最顶上的为根服务器,然后为顶级域名(常见的如aliyun.comsina.com.netzte.com.cn)。目前,已经有超过 250 个顶级域名,每个顶级域名又可以进一步的划分出二级域名,二级域名又可以再划分出三级域名。依此类推,最终形成了我们现在见到的 www.baidu.com. 此类形式。(注:最后一个点表示根服务器,默认可忽略。)

Domain 的分层架构设计体现了高效简单可用,如下:

  • 层级清晰:每一级域名代表一个层级,整个域名系统具有清晰的层次结构,简化每一层的管理和维护。
  • 分布式管理:DNS 是一个分布式数据库,不同的域名由不同的 DNS 服务器管理。分布式管理的最大优点就是提高整个集群的健壮性,单点故障不会影响整个DNS系统。
  • 易于扩展:可以根据需要简易的在树形结构上添加新的域名节点,而不会影响到整个系统的稳定性和性能。
  • 易于解析:使得域名更容易被解析,有助于搜索和查找。也方便进行域名解析的缓存,提高了域名解析的效率。

二:DNS协议字段解析

DNS协议的层级在传输层之上,常见的是用UDP作为传输层,用的是知名端口53,当然也有TCP的DNS。

1,标识(identifier)

标识占16 位,标识用于DNS的请求和响应是不是一对。对于一对的请求和响应,标识字段是一样的。

2,标志(flags )

标志占 16 位,其包含8个标志字段,其含义分别如下

  • QR 查询应答标志,0表示这是查询报文,1表示这是应答报文。
  • opcode 查询应答类型,0表示标准查询,1表示反向查询,2表示请求服务器状态。
  • AA 表示权威回答( authoritative answer ),意味着当前查询结果是由域名的权威服务器给出的,仅由应答报文使用。
  • TC 位表示截断( truncated ),使用 UDP 时,如果应答超过 512 字节,只返回前 512 个字节,仅当DNS报文使用UDP服务时使用。DNS 协议使用UDP服务,但也明确了 『当 DNS 查询被截断时,应该使用 TCP 协议进行重试』 这一规范。
  • RD 表示递归查询标志 ( recursion desired ),在请求中设置,并在应答中返回。
    • 该位为 1 时,服务器必须处理这个请求:如果服务器没有授权回答,它必须替客户端请求其他 DNS 服务器,这也是所谓的 递归查询;
    • 该位为 0 时,如果服务器没有授权回答,它就返回一个能够处理该查询的服务器列表给客户端,由客户端自己进行 迭代查询。
  • RA 位表示可递归 ( recursion available ),如果服务器支持递归查询,就会在应答中设置该位,以告知客户端。仅由应答报文使用。
  • zero 这三位未使用,固定为0。
  • rcode 表示返回码(reply code),用来返回应答状态,常用返回码:0表示无错误,2表示格式错误,3表示域名不存在。

3,问题数(question count )

占16位,表示后面问题节中的记录个数

4,应答资源记录数(answer count)

占16 位,表示答案节中的记录个数

5,授权资源记录数(authority record count)

占16 位,表示授权信息节中的记录个数

6,额外资源记录数(additional record count)

占16 位,表示额外信息节中的记录个数

7,查询问题

询问题部分由多个(question count)问题构成,每个问题的格式都相同,分为3个段:

  1. 查询名,以example.com为例,将被编码为7example3com0这13个字节。数字7表示后面example的长度,最后0则表示后面没跟任何字符,相当于一个结束符。单个字节最长可表示255大小,因此每一级域名的最大长度也是255。
  2. 查询类型(type)
  3. 查询类(class),通常为 1 ,表示 TCP/IP 互联网地址;

常用的查询类型如下:

查询类型 名称代码 含义
1 A 将域名解析到一个指定的IPV4的IP上。
2 NS 用来指定该域名由哪个DNS服务器来进行解析,类似于托管,将子域名交给其他DNS服务器解析。
5 CNAME 规范名称,可以将注册的不同域名都转到同一个规范名称上,由这个规范名称统一解析IP地址
15 MX 电子邮件交互
16 TXT 文本信息
28 AAAA 将域名解析到一个指定的IPV6的IP上。

8,应答

该部分仅在应答报文中才有,由应答资源记录(answer resource record, answer RR)、授权资源记录(authority resource record, authority RR)和额外资源记录(additional resource record, additional RR)三部分构成,当然,并非每个应答报文都同时会包含这三部分,有的报文只包含其中一部分或两部分。这三部分均使用相同的格式,以应答资源记录为例,应答资源记录内部也是由answer count 个答案组成的,每个答案可分为6个段,前三个段与请求报文中的查询问题一节中的段落完全一致。

DNS请求

DNS响应

三:DNS工作原理

域名解析流程,即:DNS 系统将域名解析为 IP 地址的过程。域名递归解析流程,即:从 DNS 系统中的根服务器开始向下递归多个相关 DNS 服务器并最终完成域名解析的流程。一个相对完整的流程如下图所示:

需要注意的是域名的查询有两种方式,一种是递归查询和迭代查询。

相关推荐
言之。1 个月前
CentOS 7上搭建高可用BIND9集群指南
服务器·dns
教练、我想打篮球1 个月前
03 基于 java udp 做一个dns服务器 和 一个dns代理服务器
网络协议·udp·dns·dig·nslookup
言之。1 个月前
CentOS 7上部署BIND9 DNS服务器指南
centos·dns
Johny_Zhao2 个月前
VMware Workstation 部署企业级 AD 域、DNS、DHCP 系统操作指南
网络·人工智能·网络安全·信息安全·云计算·ad·dns·dhcp·系统运维·itsm
利刃大大2 个月前
【网络编程】十三、DNS && ICMP && NAT/NAPT && 代理服务器
服务器·网络·dns·nat·代理·icmp
言之。2 个月前
CentOS7 BIND9域名解析失败排查指南
dns
言之。2 个月前
Python3 简易DNS服务器实现
python·dns
言之。2 个月前
DNS区域的类型
dns
依旧风轻2 个月前
使用 DoH 查询域名 —— 以 core.tantanapp.com 为例的实战分析
ios·dns·cloudflare·doh·sqi
帽儿山的枪手3 个月前
通过网络命名空间实现网络分流的思想及方法
网络协议·docker·dns