Skip to content
大纲

域名系统

域名系统(Domain Name System,DNS),是将域名与 IP 地址相互映射的分布式数据库
DNS 运行在应用层上,基于 UDP 协议,默认端口 53

域名层级

  • 根域名:最高一级的域名节点,管理顶级域名(可在顶级域名后添加 '.',但一般不写)
  • 顶级域名(一级域名)
    • 国际顶级域名:表示注册人类别和功能
      • .com:表示工商企业
      • .net:表示网络提供商
      • .rog:表示非营利组织
    • 国家顶级域名:表示注册地理或国家,个人不能随意申请(如 .cn,)
  • 二级域名
    • 国际顶级域名下:注册人指定的域名
    • 国家顶级域名下:表示注册人类别和功能(如 .com.cn)
  • 三级域名:作为二级域名的子域名,无需单独申请

一个完整的域名至少包含顶级域名与二级域名

域名解析

静态映射:通过本地查询各种缓存或配置进行查询

mermaid
graph LR
  A[客户端]
  B[浏览器缓存]
  C[本地host]
  D[本地DNS解析器缓存]
  E[本地DNS服务器]
  A --> B -.-> C -.-> D -.-> E
  B -.-> A
  C -.-> A
  D -.-> A
  E -.-> A

动态映射:通过本地向其他域名服务器查询

mermaid
graph LR
  A[客户端]
  B[本地DNS服务器]
  C[根域名服务器]
  D[顶级域名服务器]
  E[权威域名服务器]
  A -- 1 --> B
  B -- 8 --> A
  B -- 2 --> C
  C -- 3 --> B
  B -- 4 --> D
  D -- 5 --> B
  B -- 6 --> E
  E -- 7 --> B

本地服务器查询是递归查询过程;客户端发出一次请求

本地 DNS 服务器向其他域名服务器为迭代查询过程;本地 DNS 服务器发出多次请求

负载均衡

通常,具有一定规模的服务由多台服务器组成,DNS 服务器可以循环返回这些 IP 地址从而实现负载均衡

为何基于 UDP 协议

UDP 相比 TCP 具有更高的效率

  • UDP 无连接,无需三次握手
  • 使用 UDP 可以降低服务器开销和网络流量

DNS 解析要求的是快,加上 DNS 服务器网络通常比较稳定,故基于 UDP 具有更好的效率

注意:当报文长度超过 512 字节时,应当转为 TCP 进行传输

  • 客户端认为响应包超过 512 字节时,应主动转为 TCP 协议
  • 服务端发现相应包超过 512 字节时,在截断 UDP 响应报文中将 TC 设为 1,客户端受到后再次发起一次 TCP 请求