从0开始学习Linux——第七部分:DNS(1)

DNS(Domain Name System)是互联网上的一项服务,它作为将域名和 IP 地址相互映射的一个分布 式数据库,能够使人更方便的访问互联网。
DNS 系统使用的是网络的查询,因此需要有监听的 port。DNS 使用的是 53 端口号,在 /etc/services(搜索domain)这个文件中能看到。通常 DNS 是以 UDP 这个较快速的数据传输协议 来查询的,但是没有查询到完整的信息时,就会再次以 TCP 这个协议来重新查询。所以启动 DNS 时, 会同时启动 TCP 以及 UDP 的 53 端口。
DNS 实际上是域名解析协议,将域名转化为 IP 地址。

1.DNS的作用

通常识别主机的方式为主机名或者 IP 地址。人们更倾向于去记忆主机名,类似于 www.baidu.com
,而 IP 地址复杂且难记。为了解决这种问题,我们使用 DNS 域名解析服务,对 IP 地址进行解析,将可用的 IP 地址转化为域名,域名系统作为将域名和 IP 地址进行相互映射的一个分布式数据库,基 于 C/S 架构,服务端口号为 tcp53 和 udp53。实际上每台 DNS 域名解析服务器都只负责一个有限的范围(只负责自己范围内的解析)。

2.解析过程

域名解析包含两种查询方式,分别是递归查询迭代查询 ,两种查询方式都可以得到结果,但是递归只需要询问一次即可得到结果,迭代需要询问多次才可以得到结果。

2.1 递归查询

是指 DNS 服务器在收到用户发起的请求时,必须向用户返回一个准确的査询结果。如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结构提交给用户。

一般是客户机和本地 DNS 服务器之间属于递归查询,即当客户机向 DNS 服务器发出请求后,若 DNS服务器不能解析,则会向另外的 DNS 服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询。

递归算法:客户端向 LocaIDNS 发起域名查询 -> locaIDNS 不知道域名对应的 IP -> 但它知道谁

知道 -> 他代为帮客户端去查找 -> 最后再返回最终结果。

递归:客户端只发一次请求,要求对方给出最终结果。

2.2 迭代查询

是指 DNS 服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台 DNS 服务器的地址,用户再向这台 DNS 服务器提交请求,这样依次反复直到返回查询结果。

一般情况下(有例外)本地的 DNS 服务器向其它 DNS 服务器的查询属于迭代查询。如若对方不能返回权威的结果,则它会向下一个 DNS 服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,直到返回查询结果为止。此查询的源不变,但查询的目标不断变化,因此查询结果一般需要发起多次查询。

迭代算法:客户端向 LocaIDNS 发起域名查询 -> locaIDNS 不知道域名对应的 IP -> 但它知道谁

知道并推荐客户端应该找谁 -> 客户端自己去找它。

迭代:客户端发出一次请求,对方如果没有授权回答,它就会返回一个能解答这个查询的其它名称服务器列表,客户端会再向返回的列表中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果。

3.语法格式

3.1 记录格式

DNS 记录(RR,Resource Record)定由一系列语法编写的文本文件组成,每个 DNS 记录都是一个单独的行。记录通常遵循以下格式:

bash 复制代码
NAME [TTL] CLASS TYPE VALUE

参数说明:

  • NAME:要解析的域名,可以使用"@"符号表示引用当前区域的域名
  • TTL:"生存时间",表示记录可以临时存储在缓存中的时间,默认单位为秒,可以是天(D)、小时(H)、周(W)等,可从全局继承
  • CLASS:理论上 DNS 记录有不同的类别,但实际中记录通常是 Internet(即 IN)
  • TYPE:记录类型
  • VALUE:解析出的域名信息(例如 IP 地址),同一个名字可以通过多条记录定义多个不同的值,此时 DNS 服务器会以轮询方式响应
bash 复制代码
www.example.com. 69288 IN A 93.184.216.34

这代表着该条记录可以在缓存中存储 69288 秒,它涉及 Internet 上的 DNS 记录(IN),并指向了

A 类记录,同时域名被解析为 IP 地址(93.184.216.34)。

3.2 记录类型

3.2.1 SOA 记录

SOA(Start Of Authority)起始授权记录包含区域文件或 DNS 服务器的区域信息。因为 DNS 区域

传输是将 DNS 记录数据从一个主名称服务器发送到一个辅名称服务器的过程,而 SOA 记录会首先被传输,所以每个 DNS 区域都需要一个 SOA 记录。一个区域解析库有且仅能有一个SOA(起始授权)记录,且必须为解析库的第一条记录。

bash 复制代码
example.com. 86400 IN SOA ns1.example.com. admin.example.com. (
                                            2024091801 ; 序列号,每次修改值要变大,不能超过10位,格式为 yyyymmddnn
                                                    1D ; 刷新时间,表示从服务器向主服务器一天拉取一次数据库
                                                    1H ; 重试时间,当从服务器向主服务器拉取数据库失败后,一小时后再次尝试拉取
                                                    1W ; 过期时间,当从服务器始终联系不到主服务器时,一周以后放弃从主服务器同步并停止向外提供服务
                                                    1D ; 否定答案的缓存时长,表示一天之内不需要查询上次没查到的记录
)


上面的定义可使用如下的来替换:
@ 86400 IN SOA ns1.example.com. admin.example.com. ( 2015042201 1D 1H 1W 1D
)

3.2.2 NS 记录

NS(域名服务器)记录会明确特定区域的管辖权,用于标明当前区域的 DNS 服务器。一个域通常会有多个 NS 记录,这些记录可指示该域的主要和辅助域名服务器。正确配置的 NS 记录能告诉互联网可从哪里找到域的 IP 地址,从而完成加载网站或应用程序。简单来说:一个 NS 记录对应一个 DNS 服务器,每个 NS 记录应该有一个 A 记录。作用是专用于标明当前区域的DNS服务器

bash 复制代码
example.com. 86400 IN NS ns1.example.com.

ns1 86400 IN A 192.168.72.11

3.2.3 MX 记录

MX 记录是指邮件交换或 SMTP 电子邮件服务器,MX 记录可以存在多个,通过指定优先级来确定使用顺序,取值范围 0-99,值越小优先级越高。每个 MX 记录应该有一个对应的 A 记录。

bash 复制代码
example.com. IN MX 5 mail1.example.com.

mail1 86400 IN A 192.168.72.13

3.2.4 A 记录

Internet 上大部分 DNS 解析都是通过 A 类记录进行的,并指向一个 IPv4 地址。通过这个记录,

用户在浏览器中输入域名后,客户端向相应的 IP 地址发送 HTTP 请求。由于 IPv4 地址的大小始终为 4 个字节,因此 rdlength 的值始终为 4。作用是将特定的主机名映射到对应主机的IP地址上

bash 复制代码
# 轮询
web.example.com. IN A 192.168.10.13
web.example.com. IN A 192.168.10.14
# 一个IP可配置多个主机名
bbs.example.com. IN A 192.168.10.15
ftp.example.com. IN A 192.168.10.15
# 通过泛域名解析进行解析至某特定地址
$GENERATE 17-200 server$ IN A 192.168.10.$
*.example.com. IN A 192.168.10.16

上述配置中最后倒数第二行表示将server17.example.com. 解析的地址为192.168.10.17,

server18.example.com. 解析的地址为192.168.10.18,server19.example.com. 解析为

192.168.10.19,....,server200.example.com. 解析为192.168.10.200。

3.2.5 AAAA 记录

AAAA 记录,也称为"quad A",功能与 A 记录相同。但是,它指向的是 IPv6 地址。因为 IPv6 的

长度为 128 位(16 字节),所以这里也预定义了 rdlength 为 16。

bash 复制代码
web.example.com IN AAAA ff03:0:0:0:0:0:0:c1

3.2.6 CNAME 记录

CNAME 记录也叫别名记录,是将记录值指向一个别名域而不是 IP 地址。对于这种类型,域名可以继续指向下一个域名或 IP 地址。

bash 复制代码
w .example.com. IN A 192.168.10.10
w .example.com. IN CNAME w .example.com.

3.2.7 PTR 记录

PTR 记录是允许反向查找的 DNS 记录。与"A"记录恰好相反,它可以通过 IP 地址来查找对应的域

名。

bash 复制代码
# 实例
10.10.168.192.in-addr.arpa. IN PTR w .example.com.
# 简写网络地址
10 IN PTR w .example.com.
相关推荐
yiyeguzhou10040 分钟前
论文解读:Overcoming the IOTLB wall for multi-100-Gbps Linux-based networking
linux·运维·服务器
Y淑滢潇潇1 小时前
RHCE Day 7 SHELL概述和基本功能
linux·前端·rhce
妄想出头的工业炼药师1 小时前
cuda如何安装卸载
linux·运维·服务器
柳鲲鹏1 小时前
LINUX下载编译libcamera
linux·运维·服务器
梁bk1 小时前
Redis网络模型 - 从fd和I/O模型到redis网络模型,再到I/O多线程,7000字长文预警
网络·数据库·redis
Embedded-Xin1 小时前
Linux架构优化——spdlog实现压缩及异步写日志
android·linux·服务器·c++·架构·嵌入式
Once_day2 小时前
Linux之netfilter(1)基础介绍
linux·netfilter
TL滕2 小时前
从0开始学算法——第四天(练点题吧)
数据结构·笔记·学习·算法
一只特立独行的猪6112 小时前
大模型学习4
学习