Optimization

Lookup

Recursive

Recursive resolvers, root nameservers, TLD nameservers, and authoritative nameservers image.png

Iterative

the client communicates directly with each DNS server involved in the lookup.

Non-ASCII

对于非 ASCII 域名,使用一种叫 punycode 的规则,将 Unicode 字符转换为 ASCII 字符串

Punycode

  1. 对国际化域名中的每个非 ASCII 字符,分配一个唯一的前缀字符串 “xn—“。
  2. 对非 ASCII 字符进行 Punycode 编码,转换为一个 ASCII 字符串。Punycode 算法会尽量产生一个较短的编码。
  3. 将每个非 ASCII 字符的 Punycode 串连接起来,插入到国际化域名对应的位置,形成一个 ASCII 域名。

例如中文域名“中文.公司”的 Punycode 是:

xn—fsq.xn—55qx5d

其中“中文”对应的 Punycode 是“xn—fsq”,“公司”对应的是“xn—55qx5d”。

通过这个 Punycode 编码,国际化域名可以无缝映射到 ASCII 域名,实现国际化域名的解析。DNS 服务器在收到 Punycode 编码的域名时,会转换回对应的 Unicode 字符,从而支持多语言域名。


  • 由谁完成:
    • DNS 服务器,完成解析和记录
    • 客户端(浏览器,各类库,API 等),完成转换
    • 域名注册商,注册时完成转换