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

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

相关推荐
石牌桥网管9 天前
DNS Resolver解析服务器出口IP查询
运维·网络·tcp/ip·dns
火山引擎边缘云11 天前
QCon演讲实录|赵彦奇:HTTPDNS 边缘下沉,性能、成本和稳定性之间的取舍与思考
http·边缘计算·dns
CXDNW11 天前
【网络面试篇】其他面试题——Cookie、Session、DNS、CDN、SSL/TLS、加密概念
网络·笔记·面试·cdn·dns·cookie
桃酥40312 天前
day08|计算机网络重难点之 DNS查询过程、CDN是什么,有什么作用?、Cookie和Session是什么?有什么区别?
计算机网络·cdn·dns·cookie·session
UestcXiye13 天前
《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址
c++·计算机网络·ip·tcp·dns
初晴~1 个月前
【网络原理】数据链路层协议与DNS
网络·c++·python·网络协议·以太网·dns·数据链路层
火山引擎边缘云1 个月前
亮相QCon2024,火山引擎边缘云揭秘云原生操作系统与HTTPDNS技术实践
云原生·边缘计算·dns
fareast_mzh1 个月前
Difference between `systemd-resolved` and `dnsmasq`
运维·dns
CXDNW2 个月前
【网络篇】计算机网络——应用层详述(笔记)
服务器·笔记·计算机网络·http·web·cdn·dns
zhangxueyi2 个月前
详解DNS工作原理及实例分析
linux·运维·服务器·dns