千家信息网

DNS工作原理讲解

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,我们通常使用域名来访问目标机器,而不是直接使用其IP地址,那么域名与IP地址之间存在什么样子的转化关系呢?想要了解他们之间的转化关系,我们不得不提域名查询服务。域名查询服务具有很多种实现方式,例如:N
千家信息网最后更新 2026年10月31日DNS工作原理讲解

我们通常使用域名来访问目标机器,而不是直接使用其IP地址,那么域名与IP地址之间存在什么样子的转化关系呢?想要了解他们之间的转化关系,我们不得不提域名查询服务。域名查询服务具有很多种实现方式,例如:NIS(Network Information Service,网络信息服务)、DNS和本地静态文件等。本次主要讲解DNS。

  1. DNS请求/应答报文详解

DNS是一套分布式的域名服务系统。每个DNS服务器中都存放着大量的域名与IP地址之间的映射,并且是动态更新的。众多网络客户端程序是通过DNS协议去域名服务器中查询目标IP地址的。DNS查询与应答报文格式如下图所示:

0 15 16 31

16位标识位(ID)
16位标志位
16位请求记录数目16位应答记录数目
16位授权记录数目16位额外记录数目
32位查询记录信息
应答记录信息(长度可变)
授权记录信息(长度可变)
额外记录信息(长度可变)

16位标识字段是用来标记一对查询/应答报文的,通过查询该字段来确定返回的应答报文是由哪一个查询报文发出的。

16位标志字段是用来协商通信方式和返回通信状态的,DNS头部报文标识字段的具体细节如下图所示:

QRopcode
AA
TCRD
RAzero
rcode
1位4位1位1位1位1位3位4位

各个标识符的含义分别是:

  • QR:查询/应答标识,0标识查询,1标识应答。

  • opcode:定义查询和应答的类型。0标识标准查询,1标识反向查询(根据IP地址查询域名),2标识请求服务器状态。

  • AA:授权服务器应答标识。1标识域名服务器是授权服务器。

  • TC:截断标识,仅当DNS报文使用UDP服务时使用。因为UDP数据包有长度限制,当长度过长时会被截断。1标识DNS报文长度超过512字节,并被截断。

  • RD:递归查询标识。1标识执行递归查询,即DNS服务器无法解析某一个主机名,则它向其它DNS服务器继续查询,如此反复,直到它解析到目标主机名并返回给客户端。0标识迭代查询,即DNS服务器无法解析目标主机时,它将查询到的其它DNS服务器的IP地址返回给客户端,供客户端进行参考。

  • RA:允许递归标识。此字段在应答字段中使用,1标识DNS服务器支持递归查询。

  • zero:默认为0,属于保留字段。

  • rcode:4位返回码,标识应答状态。常用值有0(无错误)和3(域名不存在)

    接下来的四个字段分别指出了DNS报文最后四个字段的资源记录数目。对查询报文而言,它一般包含一个查询问题,而应答记录数目、授权记录数目、额外记录数目为0.对于应答报文而言,应答记录数目至少是1,而授权记录数目和额外记录数目可为0或非0.

查询问题格式如下:

0 15 16 31

查询名
16位查询类型16位查询类
查询名以一定的格式封装了要查询的主机域名。16位查询类型表示如何执行查询操作,常见的查询操作如下所示:
  • 类型A:值是1,表示获取目标主机的IP地址。

  • 类型CNAME:值是5,表示获取目标主机的别名。

  • 类型PTR:值是12,表示反向查询。

    16位查询类通常是1,表示获取因特网地址(IP地址)

    应答字段、授权字段、额外字段都采用了资源记录格式。资源记录格式如下所示:

    0 15 16 31

    32位域名
    16位类型16位类
    32位生存时间
    16位资源记录数据长度
    资源数据
    资源数据

    表中的32位域名是该记录中与资源对应的名字,其格式与查询记录中的查询域名所对应的格式一样。16位类型和16位类与DNS中查询记录中对应的字段格式一样。

    32位生存时间表示该查询记录结果可被客户端缓存多久,单位:秒。

    16位资源记录数据长度和资源数据字段的内容取决于类型字段。对于A类型而言,资源数据是32位IPV4地址,而资源记录长度为4(单位:字节)。

至此,我们简要地介绍了DNS协议,接下来我们以具体例子来看DNS协议。

2. Linux下访问DNS服务

我们要访问DNS服务,就必须要先知道DNS服务器的IP地址。Linux使用/etc/resolv.conf文件来存放DNS服务器的IP地址。在Ubuntu上,该文件的内容如下:

第一个IP地址代表DNS服务器地址。

Linux下一个常用的访问DNS服务器的客户端程序是host,比如下面的命令是向着DNS服务器127.0.0.1查询机器www.baidu.com的IP地址:

host命令的输出告诉我们,机器名www.baidu.com是www.a.shifen.com的别名,并且该别名对应着两个IP地址。host命令使用DNS协议和DNS服务器通信,其-t选项告诉DNS协议使用哪种查询类型。我们这里使用的是A类型,即通过机器的域名获取其IP地址(但实际返回资源中还包含着机器的别名)。关于host命令的详细使用方法,请参考man手册。

3.使用TCPDUMP观察DNS通信过程

为了看清楚DNS通信过程,下面我们将从Ubuntu上面运行host命令一查询主机www.baidu.com对应的IP地址,并使用tcpdump抓取这一过程中LAN上传输的以太网帧的数据包,具体操作如下:

这一次执行tcpdump抓包时,我们使用"port domain"来过滤数据包,表示只抓取domain域名服务的数据包,即DNS查询和应答报文,tcpdump的输出如下:

这两个数据包开始的"IP"指出,他们后面描述的内容是IP数据报。tcpdump以"IP地址:端口号"的形式来描述通信的某一端:以">"表示数据传输方向,">"前面是源端,后面是目的端。第一个数据包是测试机器Ubuntu(IP地址是192.168.48.2.53)发送的DNS查询报文(目标端口53是DNS服务器使用的端口,这一点我们在前面介绍过),第二个数据包是服务器反馈的DNS应答报文。





查询 服务 地址 标识 服务器 域名 字段 数据 报文 类型 资源 数目 长度 格式 主机 目标 客户 客户端 机器 通信 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 广州淘业互联网络科技 湖南永感互联网科技有限公司 科技互联网企业 中国互联网科技工作委员会毛军 互联网金融监管科技数据 网络科技有限互联网 互联网金融公司科技 万易互联网科技有限公司 中正互联网科技招聘 互联网和黑科技的看法 移动互联网年度科技创新 朱啸虎曾投资哪些互联网科技企业 合肥互联网科技公司公章图片 锡山区互联网智能科技产品供应 小米互联网科技园入驻 黑云互联网科技有限公司 容联科技互联网电商 陕西九四连强互联网科技有限公司 互联网科技创新创业项目 互联网巨头科技公司 致聘互联网科技 互联网汽车科技小镇 互联网科技项目计划书材料类 移动互联网科技公司 互联网科技公司有风险吗 下一代互联网重大应用科技园 互联网硬科技公司 福州德业互联网科技 中国新注册互联网科技
0