人类很难记忆纯粹的数字,但是现在的互联网又不认识人类认知的字母。DNS的作用就是将人类可读的URL转为机器认识的IP地址。这可使用nslookup
或者dig
软件命令进行查看转化。不过张立霞教授的NDN(Named Data Network,命名数据网络)或许已经不需要DNS转换URL和IP地址了,只是大概率只能成为实验网络,而不能正式替代互联网。
在1983年之前,互联网域名和IP地址的匹配都只是位于本机的一个文件中,Linux是/etc/hosts
,Windows是C:\\Windows\System32\drivers\etc\hosts
。这两个文件的维护方式是手动进行的,通过向Stanford Research Institute发送mail进行收录,终端通过FTP协议定期从中获取最新的hosts文件。这种中心化的方式扩展困难,也很难保持一致性和唯一性。如今这两个文件依旧还在,只是不再是这种方式进行维护了。
如今的DNS协议,使用UDP 53端口,当然关注最新的标准,貌似开始使用DNS over HTTPS了RFC 8484 - DNS Queries over HTTPS (DoH),先不细究,用时再看。DNS是一种层次式的分布式系统,ICANN是根域名.
,顶级域名则是各种如net\edu\com\org\nl\etc.
等,二级、三级继续向下划分。域名构成的树被划分为了zone,每个zone都有一个administrator,以及一个DNS server。
全球有13个根域名服务器,全部由ICANN管理,命名从A-M,都是anycast,也就是全球备份(保持一致)Root Server Technical Operations Association。根域名服务器用于维护root zone文件,列出所有的top-level domain(TLD)以及所有者,目前文件大小大约有2MB。实际中大部分域名系统都会缓存这些信息,实在不行的时候就会访问根域名服务器了。
DNS是迭代查询的。首先是终端询问local DNS server,然后local DNS server有缓存就返回,没缓存就去问root DNS server,得到com的地址;同样local DNS server再问com DNS server,得到ns1.google.com的地址;local DNS server再问得到www.google.com的地址,返回给终端,终端就可以进行访问了。DNS缓存时间看配置,大概就是1-72小时。
DNS的匹配称之为记录,A字段是IPv4地址,AAAA字段是IPv6地址,CNAME是canonical hostname(alias),NS是partial name,MX是查找mail server。