一、背景知识

CNAME

CNAME 是 Canonical Name 的缩写,它是 DNS(域名系统)记录的一种类型。CNAME 记录用于将一个域名映射(别名)到另一个域名。换句话说,当你访问一个设置了 CNAME 记录的域名时,你实际上被重定向到了另一个域名。

例如,假设你有一个域名 www.baidu.com,你想让用户通过 example.com 访问你的网站。你可以为 example.com 设置一个 CNAME 记录,将其映射到 www.baidu.com。这样,当用户访问 example.com 时,他们实际上访问的是 www.baidu.com

CNAME 记录在以下情况下非常有用:

  • 当你希望多个域名解析到同一个 IP 地址时。
  • 当你的域名托管在第三方服务(如 GitHub Pages 或 Heroku)并且该服务可能更改其 IP 地址时。

注意,CNAME 记录不能与任何其他数据共享同一个名称。也就是说,如果一个域名有 CNAME 记录,那么它不能有其他类型的记录(如 A 记录或 MX 记录)。

A 记录

A 记录是“地址记录”的缩写,它用于将域名映射到一个 IPv4 地址。当你在浏览器中输入一个网址时,浏览器首先会查找该网址对应的 A 记录,以获取网站的实际 IP 地址。例如,如果你有一个域名 example.com,并且你希望它指向你的服务器 IP 地址(如 192.0.2.1),你就需要为 example.com 设置一个 A 记录,指向 192.0.2.1。

AAAA 记录

AAAA 记录与 A 记录类似,但它用于将域名映射到 IPv6 地址,而不是 IPv4 地址。IPv6 是一个新的 IP 地址版本,提供了更多的可用地址。例如,如果你的服务器有一个 IPv6 地址(如 2001:0db8:85a3:0000:0000:8a2e:0370:7334),并且你希望你的域名 example.com 指向这个地址,你就需要为 example.com 设置一个 AAAA 记录,指向这个 IPv6 地址。

MX 记录

MX 记录是“邮件交换记录”的缩写,它用于指定处理一个域名的邮件服务的服务器。例如,如果你有一个域名 example.com,并且你希望所有发送到 @example.com 的邮件都被送到一个特定的邮件服务器(如 mail.example.com),你就需要为 example.com 设置一个 MX 记录,指向 mail.example.com。

NS 记录

NS 记录是"Name Server 记录"的缩写,它指定了托管特定域名的 DNS 服务器。换句话说,NS 记录告诉互联网哪些 DNS 服务器被授权为特定域名的官方服务器。例如,如果你的域名是 example.com,并且你的 DNS 服务提供商是 dnsprovider.com,那么你的 NS 记录可能会指向 ns1.dnsprovider.com 和 ns2.dnsprovider.com。

二、DNS 解析过程

DNS(Domain Name System)解析过程是一个将域名解析为 IP 地址的过程。以下是 DNS 完整的解析过程:

(1)本地解析

用户在浏览器中输入一个 URL,如 <www.baidu.com> ,首先,计算机会在本地的 hosts 文件中查找是否有该域名与 IP 地址的映射关系,如果有,则直接访问对应的 IP 地址。

(2)浏览器缓存

如果本地 hosts 文件中没有找到,浏览器会查找自己的 DNS 缓存(浏览器会缓存一些 DNS 记录),看是否有对应的 DNS 记录。

(3)系统缓存

如果浏览器缓存中也没有找到,操作系统会查找自己的 DNS 缓存,看是否有对应的 DNS 记录。

(4)路由器缓存

如果系统缓存中也没有找到,计算机会向本地路由器发送一个 DNS 查询请求,看路由器是否有对应的 DNS 记录。

(5)ISP DNS 服务器

如果路由器中也没有找到,计算机会向 ISP 的 DNS 服务器发送一个 DNS 查询请求,看 ISP 的 DNS 服务器是否有对应的 DNS 记录。

(6)根域名服务器

如果 ISP 的 DNS 服务器中也没有找到,ISP 的 DNS 服务器会向根域名服务器发送一个 DNS 查询请求。

(7)顶级域名服务器

根域名服务器收到请求后,会返回一个顶级域名服务器(TLD)的地址。ISP 的 DNS 服务器收到这个地址后,会向 TLD 发送查询请求。

(8)权威 DNS 服务器

顶级域名服务器收到请求后,会返回对应的权威 DNS 服务器的地址。ISP 的 DNS 服务器收到这个地址后,会向权威 DNS 服务器发送查询请求。

(9)获取 IP 地址

权威 DNS 服务器收到请求后,会返回对应的 IP 地址。ISP 的 DNS 服务器收到这个 IP 地址后,会将其返回给计算机,计算机就可以通过这个 IP 地址访问目标网站。

(10)缓存 IP 地址

在这个过程中,每个参与 DNS 查询的 DNS 服务器,都会将查询结果缓存一段时间。这样,下次查询同一个域名时,就可以直接返回结果,加快解析速度。

三、dig 命令

功能简介

用于查询 DNS 名称服务器以获取有关网络主机的信息。

配置参数

dig(选项)(参数)

@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip 地址>:当主机具有多个 IP 地址,指定使用本机的哪个 IP 地址向域名服务器发送域名查询请求;
-f<文件名称>:指定 dig 以批处理的方式运行,指定的文件中保存着需要批处理查询的 DNS 任务信息;
-P:指定域名服务器所使用端口号;
-t<类型>:指定要查询的 DNS 数据类型,含 A、MX 记录。
-x<IP 地址>:执行逆向域名查询;
-4:使用 IPv4;
-6:使用 IPv6;
-h:显示指令帮助信息。

常见用法

(1)常规用法,不加任何参数

dig www.baidu.com

(2)+noall+answer:这两个选项通常一起使用,用于只显示查询的答案部分,不显示其他信息。

dig www.baidu.com +noall +answer

(3)+trace:这个选项用于显示查询的详细过程,可以用来跟踪 DNS 解析的路径。

dig www.baidu.com +trace

结果详解

(1)常规查询

root@41:/home/chow# dig www.baidu.com

; <<>> DiG 9.16.1-Ubuntu <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16579
;; flags: qr rd ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available ;; QUESTION SECTION:
;www.baidu.com. IN A ;; ANSWER SECTION:
www.baidu.com. 0 IN CNAME www.a.shifen.com.
www.a.shifen.com. 0 IN A 110.242.68.3
www.a.shifen.com. 0 IN A 110.242.68.4 ;; Query time: 0 msec
;; SERVER: 172.21.96.1#53(172.21.96.1)
;; WHEN: Mon Jul 01 20:14:48 CST 2024
;; MSG SIZE rcvd: 122

结果说明:

  1. HEADER 部分opcode: QUERY表示这是一个查询操作,status: NOERROR表示查询没有出错,id: 16579是这个查询的唯一标识。

  2. flags 部分qr表示这是一个查询响应,rd表示请求递归查询,ad表示在响应中包含了验证数据。QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0表示这个查询请求了 1 个问题,得到了 3 个答案,没有权威记录和额外记录。

  3. WARNING 部分:这部分表示尽管请求了递归查询,但是服务器并没有提供递归查询。

  4. QUESTION 部分:这部分显示了查询的问题,这里是查询www.baidu.com的 A 记录。

  5. ANSWER 部分:这部分显示了查询的答案。www.baidu.com的 CNAME 记录是www.a.shifen.com,然后www.a.shifen.com的 A 记录是110.242.68.3110.242.68.4

  6. Query time 部分:这部分显示了查询的时间,这里是 0 毫秒。

  7. SERVER 部分:这部分显示了进行查询的 DNS 服务器的地址,这里是172.21.96.1#53

  8. WHEN 部分:这部分显示了查询操作的时间,这里是 2024 年 7 月 1 日 20:14:48。

  9. MSG SIZE 部分:这部分显示了接收到的消息大小,这里是 122 字节。

总的来说,这个查询的结果表示www.baidu.com实际上是www.a.shifen.com,其 IP 地址是110.242.68.3110.242.68.4

(2)trace 路径追踪

root@chow:/home/chow# dig www.baidu.com +trace

; <<>> DiG 9.16.1-Ubuntu <<>> www.baidu.com +trace
;; global options: +cmd
. 0 IN NS l.root-servers.net.
. 0 IN NS b.root-servers.net.
. 0 IN NS d.root-servers.net.
. 0 IN NS j.root-servers.net.
. 0 IN NS k.root-servers.net.
. 0 IN NS i.root-servers.net.
. 0 IN NS f.root-servers.net.
. 0 IN NS e.root-servers.net.
. 0 IN NS a.root-servers.net.
. 0 IN NS g.root-servers.net.
. 0 IN NS c.root-servers.net.
. 0 IN NS h.root-servers.net.
. 0 IN NS m.root-servers.net.
l.root-servers.net. 0 IN A 199.7.83.42
l.root-servers.net. 0 IN AAAA 2001:500:9f::42
b.root-servers.net. 0 IN A 170.247.170.2
b.root-servers.net. 0 IN AAAA 2801:1b8:10::b
d.root-servers.net. 0 IN A 199.7.91.13
d.root-servers.net. 0 IN AAAA 2001:500:2d::d
j.root-servers.net. 0 IN A 192.58.128.30
j.root-servers.net. 0 IN AAAA 2001:503:c27::2:30
k.root-servers.net. 0 IN A 193.0.14.129
k.root-servers.net. 0 IN AAAA 2001:7fd::1
i.root-servers.net. 0 IN A 192.36.148.17
i.root-servers.net. 0 IN AAAA 2001:7fe::53
;; Received 804 bytes from 172.21.96.1#53(172.21.96.1) in 10 ms com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 86400 IN DS 19718 13 2 8ACBB0CD28F41250A80A491389424D341522D946B0DA0C0291F2D3D7 71D7805A
com. 86400 IN RRSIG DS 8 1 86400 20240715050000 20240702040000 20038 . GnDoxEAaH770WTMRpN/KvmhPbqrO2DLCffgsixXh24ooBvKSmQqc1FMd KX45wku8TaXZkfp4k+Yy/I8IDddQbbhV32aMd/oAJ5EqJPVZnEX50fTY iDAadzEEEdMv4tVh0C25SowAcHlqONWlFIi2udDCZjskkUDP/LZH0V+w WA7xjE1sRzEze+olN0P+zBfxfecVo5csOVa85G6UMyEYsvEjfHSygb64 v7TOmHpLt/YEUHDNwvQTsJ0yOXVCq1PIQusPkY4Lk7/a7xt9BcHs6t1+ WTK2CyXrA++HqJNs9oMnWYCqc7j25/QnQTAbUzfQnX7LLEXi0sXkR0aq efxPtA==
;; Received 1173 bytes from 192.58.128.30#53(j.root-servers.net) in 0 ms baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns1.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 13 2 86400 20240707002457 20240629231457 956 com. fUqDTwkfdL3McvJaDUQI8nJAOwYVk7quI5jYU4rLvVQofgJEZ7GJjNZL 7BY4hkQh/xmIjp1M5Ec+n5vVLxAt7A==
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN NSEC3 1 1 0 - HPVVP23QUO0FP9R0A04URSICJPESKO9J NS DS RRSIG
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN RRSIG NSEC3 13 2 86400 20240706005132 20240628234132 956 com. 1MtU07lj/BUIRTop6izDQ2p/7o6qoWR+OGxt1jP0SJjR0eBx2ArpmVEg d3+UJBi4vx3sX/DFnSoJLxi32PHwFA==
;; Received 657 bytes from 192.55.83.30#53(m.gtld-servers.net) in 219 ms www.baidu.com. 1200 IN CNAME www.a.shifen.com.
;; Received 100 bytes from 180.76.76.92#53(ns7.baidu.com) in 10 ms

以上结果说明了 <www.baidu.com> 域名的 DNS 解析完整路径。首先从根 DNS 服务器(.root-servers.net)开始,然后到顶级域名服务器(.gtld-servers.net),再去权威 DNS 服务器查询(ns*.baidu.com)具体 IP 地址。www.baidu.com 是一个别名(CNAME),实际上它指向的是 <www.a.shifen.com> 。

其中 172800、86400 表示 TTL 时间。

四、其他说明

1. VS nslookup

dig 和 nslookup 都是用于查询 DNS 服务器的工具。dig 提供更详细的输出,更多的选项和灵活性,并且在处理错误时通常会提供更多的信息。nslookup 的输出相对较少,选项和灵活性也较少。虽然 nslookup 在许多系统上仍可用,但许多组织(包括 ISC 和微软)都推荐使用 dig 来代替 nslookup。

dig 命令详解及使用示例的更多相关文章

  1. Linux lsof命令详解和使用示例【转】

    所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接 ...

  2. dig 命令详解(转载) - 阿权的书房

    在 unix 和 linux 下,建议大家使用 dig 命令来代替 nslookup. dig 命令的功能比 nslookup 强大很多,不像 nslookkup 还得 set 来 set 去的,怪麻 ...

  3. dig命令详解

    dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常 语法 dig(选项)(参数) 选项 @<服务器地址>:指定进行域名解析的域名服务器: -b<ip地址>:当主机 ...

  4. Linux route命令详解和使用示例(查看和操作IP路由表)

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...

  5. ls(list)命令详解及生产使用示例

    文件有文件名与数据,在linux上被分为两个部分:用户数据(user data)与元数据(metadata) 用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方,我们将其称 ...

  6. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  7. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  8. DOS命令详解

    DOS命令详解 命令 \? 可以进入命令帮助 1.md命令创建目录. MKDIR [drive:]pathMD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MKD ...

  9. Linux命令详解之—tail命令

    tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...

  10. IIS7.0 Appcmd 命令详解和定时重启应用池及站点的设置

    IIS7.0 Appcmd 命令详解 废话不说!虽然有配置界面管理器!但是做安装包的时候命令创建是必不可少的!最近使用NSIS制作安装包仔细研究了一下Appcmd的命令,可谓是功能齐全. 上网查了些资 ...

随机推荐

  1. goland配置在远程linux里运行代码开发,并debug调适

    环境: windows 10 phpstudy8.1.1.3 Vmware安装centos7.6 场景 window10里goland开发,在远程linux里运行,并debug断点调适 步骤: win ...

  2. Docker 必知必会2----跟我一步步来执行基本操作

    通过前文(https://www.cnblogs.com/jilodream/p/18177695)的了解,我们已经大致明白了什么是docker,为什么要用docker,以及docker的基本设计思路 ...

  3. 当字符遇上 scanf() 要当心

    当字符遇上 scanf() 要当心 看一下程序 char ch1,ch2; printf("请输入ch1,ch2的值:"); scanf("%c %c",&am ...

  4. C语言:输入一串字符串,统计字符串中有多少个数字

    gets函数会在输入完字符后自动补上一个\0,所以用这个特性可以计算出字符串是否结束. 因为数字在字符中对应的ascii码就是0~9,只要遇到小于9的字符就是数字,所以计数器加一 #include&l ...

  5. debug技巧之远程调试

    一.前言 大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦. 当我们的应用发布到线上之后,就不能随意 ...

  6. typora不支持mermaid 问题记录

    typora不支持mermaid 问题记录 注意: 使用不了最新版本js,目前我测的最高版本9.3,有些复杂的图表不能用,不过已经满足我使用的需求了.知足了 本文只做记录,如有问题请联系删除!!!感谢 ...

  7. java学习之旅(day.04)

    运算符 算术运算符:+ ,- ,* ,/,%(取余或模运算), ++(自增),-- (自减) 赋值运算符:= 关系运算符:>, <,>=, <=, ==, !=(不等于),in ...

  8. 【漏洞复现】金蝶OA-EAS系统 uploadLogo.action 任意文件上传漏洞(0day)

    阅读须知         此文所提供的信息只为网络安全人员对自己所负责的网站.服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作.利用此文所提供的 ...

  9. webapi创建WCF WebService+WCF WebService远程服务调用

    首先需要引入soapcore包 这个包提供了所需的类和soap终结点中间件. 引入这个这个包之后,我们需要定义提供的服务. 这里我写了一个用于查询省份面积的服务. 省份信息服务 /// <sum ...

  10. linux文件的三个时间,修改文件时间为任意时间

    目录 一.文件的三个时间 二.修改文件的三种时间为任意时间 一.文件的三个时间 当我们在linux中创建了文件或文件夹,文件/文件夹就有了时间属性,而且linux中的文件具有三个时间,可以通过stat ...