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 服务器并最终完成域名解析的流程。一个相对完整的流程如下图所示:

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

相关推荐
卷心菜不卷Iris3 天前
第1章大型互联网公司的基础架构——1.3 HTTP-DNS
网络·网络协议·http·dns·互联网大厂·http-dns·基础架构
聚名网11 天前
如何修改DNS解析?
dns·修改dns解析
火山引擎边缘云1 个月前
揭秘字节跳动内部流量调度与容灾实践【上】
后端·云计算·dns
thinking-fish1 个月前
DNS介绍(5):DNS 劫持及解决方案
网络·网络安全·dns·dns劫持
hong_zc1 个月前
网络原理(四)—— 网络层、数据链路层 与 DNS
网络·dns·数据链路层·网络层
Algorithm-0071 个月前
软件测试预备知识⑤—搭建 DNS 服务器
运维·服务器·dns
放飞自我的Coder1 个月前
【DNS 阿里云,域名解析,解析到IP的指定端口】
网络·阿里云·dns
探索云原生1 个月前
基于 Admission Webhook 实现 Pod DNSConfig 自动注入
云原生·kubernetes·go·dns
探索云原生2 个月前
使用 NodeLocalDNS 提升集群 DNS 性能和可靠性
linux·docker·云原生·kubernetes·go·dns
冷心笑看丽美人2 个月前
探秘 DNS 服务器:揭开域名解析的神秘面纱
linux·运维·服务器·dns