Optimization
Lookup
Recursive
Recursive resolvers, root nameservers, TLD nameservers, and authoritative nameservers
Iterative
the client communicates directly with each DNS server involved in the lookup.
Non-ASCII
对于非 ASCII 域名,使用一种叫 punycode 的规则,将 Unicode 字符转换为 ASCII 字符串
Punycode
- 对国际化域名中的每个非 ASCII 字符,分配一个唯一的前缀字符串 “xn—”。
- 对非 ASCII 字符进行 Punycode 编码,转换为一个 ASCII 字符串。Punycode 算法会尽量产生一个较短的编码。
- 将每个非 ASCII 字符的 Punycode 串连接起来,插入到国际化域名对应的位置,形成一个 ASCII 域名。
例如中文域名“中文.公司”的 Punycode 是:
xn—fsq.xn—55qx5d
其中“中文”对应的 Punycode 是“xn—fsq”,“公司”对应的是“xn—55qx5d”。
通过这个 Punycode 编码,国际化域名可以无缝映射到 ASCII 域名,实现国际化域名的解析。DNS 服务器在收到 Punycode 编码的域名时,会转换回对应的 Unicode 字符,从而支持多语言域名。
- 由谁完成:
- DNS 服务器,完成解析和记录
- 客户端(浏览器,各类库,API 等),完成转换
- 域名注册商,注册时完成转换