youyichannel

志于道,据于德,依于仁,游于艺!

0%

DNS Parsing Process

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地址后,便可与目标服务器建立连接,实现通信。