dig 命令洞察 DNS 解析过程

上一篇文章,我们介绍了域名解析的过程,本章我们将介绍一个实用的工具---dig命令,通过dig命令我们可以查看 DNS 解析的过程,以便我们更好的理解 DNS 解析过程。

dig 命令全称域信息搜索器,是一个用于查询 DNS 域名服务器信息的命令行工具。因为dig命令灵活,容易使用,多数DNS管理员使用dig命令来诊断 DNS 问题。

dig 常用命令格式

dig [@server] [-p port] [-t type] [-4] [-6] [+trace] name

  • @ 指定 DNS 查询使用的服务器名称或 IP ,IP 地址可以是用点分隔的 IPv4 地址也可以是冒号分隔的 IPv6 地址。当参数指定的值是服务器的主机名时,dig 命令会在查询该域名服务器前先解析该主机名;
  • -p 指定 DNS 查询使用的端口号,默认情况下 DNS 查询使用标准的53端口,若使用非端口则需要通过 -p 参数指定,可使用此选项来测试已配置为侦听非标准端口号上的 DNS 服务器;
  • -t 指定 DNS 查询的记录类型,常用的类型包括:A/AAAA/NS/MX/CNAME 等,缺省查询类型是 A ;
  • -4 指定 dig 命令仅使用 IPv4 查询传输;
  • -6 指定 dig 命令仅使用 IPv6 查询传输;
  • +trace 跟踪从根名称服务器开始的迭代查询过程,缺省情况不使用跟踪。启用跟踪时,dig 命令会执行迭代查询以解析要查询的名称,显示来自用于解析查询的每个服务器的应答。

dig 命令的输出格式

以 dig www.qq.com 命令返回内容为例各字段说明如下:

  • status 表示查询状态,取值为 NOERROR 表示查询没什么错误;
  • opcode 表示操作码,取值为 QUERY 表示操作为查询操作;
  • id 表示查询事务 id;
  • QUERY 表示查询内容的条数,ANSEWER 表示回答内容条数,AUTHORITY 表示权威应答内容的条数,ADDITIONAL 表示附加内容的条数;
  • QUESTION SECTION:表示需要查询的内容,这里的返回内容表示需要查询域名的 A 记录;
  • ANSWER SECTION 表示查询结果,包含了两条记录,一条记录表示 www.qq.com 是 https.qq.com 的别名,第二条返回了 A 记录,表明 https.qq.com 的 IP 地址,其中33和1006分别表示本次查询的缓存时间,分别在这些秒数内容本地 DNS 服务器可以直接从缓存返回结果。

dig 命令查询资源记录

各类型解析资源记录介绍:

  • NS 记录:用来指定域名由哪个 DNS 服务器进行解析;
  • CNAME 记录:用来定义域名的别名,方便实现将多个域名解析到同一个 IP 地址;
  • A 记录:用来指定主机名对应的 IPv4 地址;
  • AAAA 记录:用来指定主机名对应的 IPv4 地址;
  • MX 记录:用来指定收件人域名的邮件服务器,SMTP 协议会根据 MX 记录的值来决定邮件的路由过程;
  • PTR 记录:常用于反向地址解析,将 IP 地址解析到对应的名称;
  • SOA 记录:称为起始授权机构记录,不同于 NS 记录用于标识多台域名解析服务器,SOA 记录用于在多台 NS 记录中哪一台是主 DNS 服务器。

DNS 服务器的主从架构

DNS 服务器通常以集群的方式提供服务,一台主服务器和多台从服务器,从服务器启动时从主服务器进行解析库的完全同步,运行时以一定的时间间隔进行增量刷新同步,继而记录的保证一致性,若从服务器超过一定的时间无法与主服务器同步刷新则从服务器记录会过期失效,无法提供解析服务。SOA 记录保存于主服务器,记录字段包括主 DNS 服务器名称,DNS 服务器管理员,序列号,从 DNS 服务器刷新间隔,从 DNS 服务器与主服务器断线后重连的时间间隔,从 DNS 服务器与 主 DNS 服务器断线后的过期时间间隔,记录的缓存生存周期。

到目前为止,我们对 DNS 解析的过程以及 DNS 服务器的架构已经有所了解,下一篇文章我们将讨论一个有趣的问题,为什么全球只有13台 DNS 服务器

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

redis 学习笔记(6)-cluster集群搭建

上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,...

24050
来自专栏MoeLove

用正确的姿势开源Python项目

一般我们都会选择在项目的顶层包含较基础的文件,比如setup.py,requirements,README等文件。 一般情况下,一个预发布的Python项目中应...

19330
来自专栏曾倩倩的专栏

su命令cannot set groups: Operation not permitted的解决方法

问题场景: user_00@hadoop-10-125-224-102:> su root Password: su: cannot set groups:...

74380
来自专栏Aloys的开发之路

如何发布Maven依赖到中央仓库

平时我们都是从Maven中央仓库下载依赖,如果我们想发布我们自己写的Maven依赖到中央仓库供别人下载使用应该怎么办?这里以上传自己写的simian-maven...

36330
来自专栏偏前端工程师的驿站

Chrome Extension in CLJS —— 搭建开发环境

前言  磨刀不误砍柴工,本篇将介绍如何搭建Chrome插件的ClojureScript开发环境。 具体工具栈:vim(paredit,tslime,vim-c...

29760
来自专栏互联网技术栈

Log4j1升级Log4j2实战

新的Log4j 2.0版本有了大幅的性能提升、新的插件系统,以及配置设置方面的很多改善。Log4j 1.x 在高并发情况下出现死锁导致cpu使用率异常飙升,而L...

22530
来自专栏Java架构沉思录

揭秘JDBC超时机制

在遭到DDos攻击后,整个服务都垮掉了。由于第四层交换机不堪重负,网络变得无法连接,从而导致业务系统也无法正常运转。安全组很快屏蔽了所有的DDos攻击,并恢复了...

21530
来自专栏张伟博客

windows7 下,在CMD命令模式下,如何添加永久路由?

双网卡之间互相访问原理其实很简单,互相设置对方的IP为自己的这张网卡的网关就足够了。为了让机器重启动后依然有效,在使用route 命令添加路由的时候加上 -p ...

1.3K10
来自专栏大魏分享(微信公众号:david-share)

对,俺差的是安全! | 从开发角度看应用架构18

在Gartner定义的“第三平台”盛行的年代,html5大行其道。所以http方式访问的应用很多。因此,谈到应用的安全,我们先要了解http的几种认证方式。

10910
来自专栏菩提树下的杨过

redis 学习笔记(6)-cluster集群搭建

上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,...

22650

扫码关注云+社区

领取腾讯云代金券