# DNS
:域名系统(Domain Name System)协议,用于将域名解析到对应的 IP 地址。
- 属于应用层协议,基于 UDP 通信,默认使用 53 端口。
# 域名
域名(Domain name ,DN)是一个字符串,映射到一个 IP 地址,相当于该 IP 地址的别名。
- 使用 IP 可以定位一个主机,但是 IP 不方便记忆,因此 1980 年代发明了域名。
- 一个域名可以映射到多个 IP ,一个 IP 可以被多个域名映射。
- 例:用户在浏览器中输入域名
baidu.com
或其对应的 IP ,都可以访问百度网站。- 但计算机必须先在本机解析出域名对应的 IP ,才能进行基于 IP 协议的 TCP 通信。
- 用户可以找某个域名服务商购买一个域名,配置 DNS 解析规则。
域名的格式为
xx[.xx]...
,由多个字段组成,字段之间用点号分隔。- 只能包含小写字母、数字、连字符 - ,有的情况会包含下划线 _ 。
- 国际化域名(Internationalized Domain Name ,IDN)支持使用 Unicode 字符,以 ASCII 码存储。
域名中的各个字段像目录路径一样划分层级,不过方向是从右向左,级别递减。
- 所有域名从根域名 . 开始。
- 根域名通常可以省略。例如域名
baidu.com.
通常简写为baidu.com
。 - 美国 ICANN 组织管理根域名,有权分配顶级域名。
- 根域名通常可以省略。例如域名
- 域名中最右侧的一个字段称为顶级域名。
- 目前因特网存在 1k 多个顶级域名,例如:
- com 表示商业组织。
- cn 表示中国,由中国因特网信息中心(CNNIC)管理。
- edu 表示教育机构。
- gov 表示政府机构。
- 管理顶级域名的机构有权分配二级域名,管理二级域名的机构有权分配三级域名,以此类推。
- 目前因特网存在 1k 多个顶级域名,例如:
- 例:用户可以向管理顶级域名 com 的机构申请一个二级域名
test.com
,然后自己划分三级域名www.test.com
、ftp.test.com
,还可以划分四级域名、五级域名等。- 这里的子域名 www 通常表示网站内部一个提供 Web 服务的主机。
- 用户管理自己的域名时,可能使用域名的相对路径,比如
www
、img.www
,比较简短,但是存在歧义。向 DNS 服务器查询域名时,只能使用 FQDN 格式。
- 完全限定域名(Fully Qualified Domain Name,FQDN):从顶级域名开始的完整域名路径,例如
www.test.com
。
- 所有域名从根域名 . 开始。
# DNS 服务
- DNS 服务的一般流程:
- 当计算机要解析一个域名时,先查询自己的 DNS 缓存。若没有命中缓存,则向本地 DNS 服务器发送查询请求。
- 如果本地 DNS 服务器也没有缓存该 DNS 记录,则将查询请求转发给上游的 DNS 服务器。
- 以此类推,最上游的是有权注册该域名的 DNS 服务器,称为权威 DNS 服务器。
- 下游的 DNS 服务器通常会缓存上游的 DNS 记录。
- DNS 协议是明文通信,因此可能泄露隐私、被篡改。有几种加密 DNS 的方案:
- DoT(DNS over TLS):基于 TLS 协议加密传输 DNS 消息,默认使用 TCP 853 端口。
- DoH(DNS over HTTPS):基于 HTTPS 协议加密传输 DNS 消息,默认使用 TCP 443 端口。
- DoQ(DNS over Quic):基于 QUIC 协议加密传输 DNS 消息,默认使用 UDP 8853 端口。
# DNS 服务器
:用于为其它主机提供 DNS 服务。
DNS 服务器主要通过 UDP 广播信息,有时也会通过 TCP 发送和接收 DNS 数据库。
DNS 服务器会记录一些域名的解析规则,称为 DNS 记录。
- DNS 记录分为多种类型,例如:
A # Address ,将域名解析到一个 IPv4 地址 AAAA # 将域名解析到一个 IPv6 地址 CNAME # Canonical Name ,将域名解析到另一个域名 MX # Mail eXchange ,将域名解析到一个邮件服务器 NS # Name Server ,记录管理该域名的下游 DNS 服务器的域名 PTR # Pointer ,将 IP 地址反向解析到域名 SRV # Service ,将域名解析到 IP 地址和 TCP/UDP 端口 TXT # 将该域名解析到一段字符串
- 例:
www.test.com A 1.1.1.1 www.test.com A 1.1.1.2 # 可以给同一个域名添加多条 DNS 记录,解析到多个 IP 地址,然后根据权重随机生效,实现负载均衡 ftp.test.com A 1.1.1.3 *.test.com A 1.1.1.4 # 可以使用通配符,表示匹配任意子域名。这不会匹配主域名 test.com
- 每条 DNS 记录可以设置 TTL(Time to live),表示建议下游服务器缓存它的时长,通常为 10 分钟。
- 可以给不同网络线路,添加不同的 DNS 记录。比如对于电信用户、联通用户,将域名解析到不同的 IP 。对于中国用户、美国用户,将域名解析到不同的 IP 。
- DNS 记录分为多种类型,例如:
目前因特网存在 13 组根域名服务器。
- 可通过三级域名
[a-m].root-servers.net
查询到根域名服务器的 IP 地址。- 不过这些 IP 地址一般不会变化,会被下游 DNS 服务器长时间缓存。
- 根域名服务器记录了各个顶级域名的 DNS 服务器的地址,而后者记录了各个二级域名的 DNS 记录。
- 可通过三级域名
例如
8.8.8.8
是 Google 公司公开提供的 DNS 服务器。
# 备案
- 如果将域名解析到 IP 位于中国大陆的服务器,则需要办理 ICP 备案。
- 如果使用国外服务器,则不需要备案。
- 主域名备案之后,子域名不需要备案。
- 提供云服务器的平台一般拥有 ICP 接入商的资格,可以协助用户办理备案。
- 备案时,需要说明网站用途,提交个人或企业的证件资料。
- 经营性网站需要办理 ICP 许可证,非经营性网站需要办理 ICP 备案。
- 中国政府要求 ICP 接入商履行以下义务:
- 受理用户的备案申请。
- 检查所有的 HTTP 请求,如果发向未经备案的服务器,则断开其 TCP 连接。
- 定期检查已备案网站的内容,是否符合备案用途。