sequenceDiagram Client ->> DNSResolver: Request to resolve domain name activate DNSResolver DNSResolver ->> RootDNS: Request root DNS server activate RootDNS RootDNS -->> DNSResolver: Respond with TLD DNS address deactivate RootDNS DNSResolver ->> TLDNS: Request TLD DNS server activate TLDNS TLDNS -->> DNSResolver: Respond with Authoritative DNS address deactivate TLDNS DNSResolver ->> AuthoritativeDNS: Request Authoritative DNS activate AuthoritativeDNS AuthoritativeDNS -->> DNSResolver: Respond with IP address deactivate AuthoritativeDNS DNSResolver -->> Client: Return IP address deactivate DNSResolver
浏览器解析完键入的 URL 并生成 HTTP 报文之后,需要委托给 OS 将报文发送给 Web 服务器。
我们知道,键入的域名其实是无法找到目标服务器的,需要使用 DNS 技术,查询服务器域名对应的 IP 地址,OS 才能够发送消息给正确的 Web 服务器。
域名的层级结构
graph TD; A[Top-Level Domain] --> B[.com]; B --> C[server.com]; B --> D[example.com]; A --> E[.org]; E --> F[example.org]; E --> G[website.org]; C --> H[www.server.com];
DNS 中的域名都是用句点(.)来分隔的,比如
www.server.com
,这里的句点代表了不同层次之间的界限。
在域名中,越靠右的位置表示其层级越高。
实际上域名最后还有一个点,比如
www.server.com.
,这个最后的一个点代表根域名。也就是说,.
根域是在最顶层,它的下一层就是 .com
顶级域,再下面是
server.com
。
所以域名的层级关系类似一个树状结构:
- 根 DNS 服务器(.)
- 顶级域 DNS 服务器(.com)
- 权威 DNS 服务器(server.com)
根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。
因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。
域名解析的工作流程
flowchart TD; A[客户端] --> B[本地 DNS 服务器]; B --> |缓存命中| C["返回缓存中的 IP 地址"]; B --> |缓存未命中| D[根域名服务器]; D --> E[".com 顶级域名服务器"]; E --> F["权威 DNS 服务器"]; F --> G[IP 地址]; G --> B; C --> A; G --> A;
- 当客户端首次发出 DNS 查询时,查询目标是获取域名"www.server.com"对应的IP地址。该查询被发送至本地DNS服务器,即客户端TCP/IP设置中指定的DNS服务器地址。
- 本地DNS服务器接收到查询后,首先检查缓存,查看是否已经解析过"www.server.com"的IP地址。若已存在缓存记录,则直接返回缓存中的IP地址给客户端;若没有缓存记录,则执行下一步骤。
- 缺乏"www.server.com"的缓存记录,本地DNS服务器向根域名服务器发出查询。此次查询的目标是获取负责顶级域名".com"的权威DNS服务器的地址。根域名服务器在响应中提供".com"顶级域名DNS服务器的地址。
- 获得".com"顶级域名DNS服务器地址后,本地DNS服务器向该服务器发出查询,以获取负责"www.server.com"区域的权威DNS服务器地址。
- ".com"顶级域名DNS服务器回复本地DNS服务器,提供了负责"www.server.com"区域的权威DNS服务器地址,指引本地DNS服务器进一步查询。
- 本地DNS服务器联系"www.server.com"的权威DNS服务器,即"server.com"域名的权威DNS服务器。该服务器持有关于"www.server.com"对应IP地址的权威信息。
- "server.com"的权威DNS服务器解析查询,将相应的IP地址(例如X.X.X.X)提供给本地DNS服务器。
- 本地DNS服务器缓存解析后的IP地址,并将其返回给客户端。客户端获取IP地址后,便可与目标服务器建立连接,实现通信。