自学教程 从零学编程

DNS 协议

一、DNS 是什么

DNS(Domain Name System,域名系统),属于应用层协议。
DNS 的核心作用:域名 ↔ IP地址 相互解析。

IP地址是互联网主机的数字编号(如 180.101.49.11),不方便人类记忆;域名(www.baidu.com)是给人看的名字。DNS就像互联网的电话本,把域名翻译成IP地址,浏览器才能找到目标服务器。

默认端口:53
DNS 既可以使用 UDP,也支持 TCP。

  • UDP:短查询,绝大多数域名解析请求,速度快;
  • TCP:DNS报文过大、区域传输、DNSSEC场景使用。

二、DNS 域名层级结构

域名采用树状分层结构,从右往左层级依次降低:
www.baidu.com.

  • . 根域名(根服务器)
  • com 顶级域名(TLD)
  • baidu 二级域名
  • www 主机名

域名末尾的.代表根,写域名时通常省略。

三、DNS 服务器分类

  1. 根域名服务器
    全球一共13组根服务器,只保存顶级域名服务器地址,不保存具体域名记录。
    作用:收到请求,返回对应顶级域名服务器地址。
  2. 顶级域名服务器(TLD)
    负责 .com、.org、.cn 这类后缀,保存二级域名的权威服务器地址。
  3. 权威域名服务器
    保存某个域名(如 baidu.com)的真实解析记录,是域名记录的最终来源。
  4. 递归域名服务器(本地DNS)
    也就是我们电脑配置的DNS服务器(如 114.114.114.114、8.8.8.8)。
    客户端只和递归服务器交互;递归服务器代替客户端,逐层去查询根、TLD、权威服务器,拿到结果返回给客户端,并缓存结果。

区分:

  • 递归查询:客户端 → 本地DNS(本地DNS帮你查到底)
  • 迭代查询:本地DNS → 根 → TLD → 权威服务器(一层层自己去问)

四、DNS 完整查询流程(以访问 www.baidu.com 举例)

  1. 客户端(电脑/手机)检查本地hosts文件,如果有域名IP映射,直接使用,不走DNS;
  2. 若无,检查本机DNS缓存;缓存命中直接返回IP;
  3. 缓存未命中,客户端向本地递归DNS服务器发送UDP查询请求;
  4. 本地DNS检查自己缓存,有记录直接返回;没有则发起迭代查询:
    1. 询问根服务器:www.baidu.com 去哪里查;根服务器返回 .com 顶级域名服务器地址;
    2. 询问 .com顶级域名服务器,得到 baidu.com 的权威服务器地址;
    3. 询问 baidu.com权威服务器,拿到 www.baidu.com 对应的IP;
  5. 本地DNS把IP结果返回给客户端;
  6. 本地DNS缓存这条解析记录(受TTL控制),客户端也在本机缓存;
  7. 客户端拿到IP,发起TCP连接访问网站。

TTL(Time To Live,生存时间):控制DNS记录在缓存中保留多久,过期重新查询。

五、常见DNS资源记录类型

DNS服务器保存多条类型的记录,最常用:

记录类型含义作用
A记录IPv4地址记录域名 → IPv4地址
AAAA记录IPv6地址记录域名 → IPv6地址
CNAME别名记录一个域名指向另一个域名
MX邮件交换记录指定域名对应的邮件服务器(SMTP使用)
NS域名服务器记录该域名由哪台权威服务器负责解析
TXT文本记录存放SPF、DKIM等邮件验证、域名所有权验证

六、DNS 报文结构

DNS请求与响应报文格式相同,分为头部、问题段、回答段、授权段、附加段。
重点字段:

  • ID:请求与响应匹配编号;
  • Flags:标志位,区分查询/响应、递归请求等;
  • QNAME:要查询的域名;
  • QTYPE:查询的记录类型(A/AAAA/MX)。

七、DNS 两种查询方式

  1. 递归查询
    客户端只向本地DNS发一次请求,本地DNS负责完成全部查询,最后返回结果给客户端。

客户端 ↔ 本地DNS 是递归查询。

  1. 迭代查询
    本地DNS服务器依次询问根、TLD、权威服务器;每一级服务器只返回下一级服务器地址,不会直接返回最终IP。

本地DNS 和根/TLD/权威服务器之间是迭代查询。

八、DNS 相关安全问题

  1. DNS劫持:篡改DNS返回结果,把域名解析到恶意IP;
  2. DNS缓存投毒:污染DNS服务器缓存,让缓存内域名指向错误IP;
  3. 中间人窃听:传统UDP DNS查询明文传输,可以被抓包看到查询的域名;

安全方案:DNS over HTTPS(DoH)、DNS over TLS(DoT)、DNSSEC(域名记录签名防篡改)。

九、hosts 文件

hosts是本机静态域名映射文件,优先级高于DNS查询。
Windows路径:C:\Windows\System32\drivers\etc\hosts
Linux/macOS路径:/etc/hosts
可以手动写域名与IP映射,用来本地调试网站。

十、小结

  1. DNS应用层协议,默认端口53;UDP为主,TCP用于大报文;
  2. 核心功能:域名和IP互相转换;
  3. 服务器分层:根服务器→顶级域名服务器→权威服务器;递归服务器帮用户代查并缓存;
  4. 两种查询:递归查询(客户端到本地DNS)、迭代查询(DNS服务器之间);
  5. 解析顺序:hosts文件 → 本机DNS缓存 → 递归DNS查询;
  6. 常用记录A、AAAA、CNAME、MX、TXT。

思考题:DNS查询大部分用UDP,为什么设计成UDP而不是TCP?

标签:

0 条笔记