域名系统的前世今生 一文读懂互联网的 门牌号

IP 协定的责任是网络互联,它在 MAC 层之上运转,经常使用 IP 地址将 MAC 地址转换为四位数,形象出物理网卡的 MAC 地址,从而开收回许多“新玩法”。

例如,它被分为五种类型:A、B、C、D 和 E;公共和私有地址;子网掩码分段。只需每个小网络都赞同 IP 地址的概念,无论它们在 MAC 层有如许不同,它们都可以访问 TCP/IP 协定栈,并最终会聚到整个互联网中。

但是,随着越来越多的计算机衔接到互联网,IP 地址的缺陷暴显露来。关键疑问是它“不够用户友好”。虽然它比 MAC 地址的十六进制数稍好,但依然难以记住和输入。

如何处置这个疑问?

处置打算在于“以火攻火”,在 IP 地址之上减少另一层形象,将数值 IP 地址转换为更无心义且易于记住的称号。这引入了一种字符串级别的新玩法。于是,DNS(域名系统)应运而生。

域名的方式

域名是一个分层结构,由多个用‘.’分隔的单词组成。最左边的单词是顶级域名,其次是二级域名,层级从右向左递减。

最左边的局部是主机名,通罕用于批示主机的用途。例如,“www”示意 Web 服务,“mail”示意邮件服务。不过,这并不是相对的,关键是让咱们容易记住。

域名不只是 IP 地址的替代品,还有许多其余用途。

在像 Apache 和 Nginx 这样的 Web 主机中,域名可以用来识别虚构主机,并确定哪个虚构主机提供外部服务。例如,在 Nginx 中可以经常使用server_name指令:

server {listen 80;server_nametime.geekbang.org;...}

域名实质上是一个命名空间系统,经常使用多级域名来划分不同的国度、地域、组织、公司和部门。每个域名都是惟一的,可以作为身份标识。

例如,假定公司 A 有一个名叫 Garb 的人,公司 B 也有一个名叫 Joe 的人。他们可以区分称为 “Garb.Company A” 和 “Joe.Company B”。即使公司 B 也有一个名叫 Garb 的人,他们也可以被标志为 “Garb.Company B”,从而有效处置重复命名的疑问。

由于这个个性,域名已裁减到其余运行畛域。例如,Java 的包机制经常使用域名作为命名空间,但顺序相反。假设极客期间要开发一个 Java 运行程序,其包名或者是org.geekbang.time。

在 XML 中,URI 被用作命名空间,这直接触及域名的经常使用。

域名解析

就像访问主机要求将 IP 地址转换为 MAC 地址一样,域名也要求转换为 IP 地址。这个环节称为域名解析。

目前,环球有数十亿个网站,数十亿的互联网用户,每天在网络上出现的 HTTP 流量是天文数字。大少数恳求在访问网站时是基于域名的,这使得 DNS 成为互联网的一个关键基础设备,必定确保稳固、牢靠、极速和高效的域名解析。

DNS 的外围系统是一个三层树状散布式服务,对应域名的结构:

其中,根域名主机至关关键。它必定是妇孺皆知的,否则对高层主机的探讨是无法能的。目前,环球共有 13 组根域名主机,领有数百个镜像以确保可访问性。

有了这个系统,任何域名都可以在这个树结构中从上到下查问。就像从右到左顺序遍历域名,最终取得相应的 IP 地址。

例如,假设你想访问www.apple.com,你要求启动三次查问:

虽然外围 DNS 系统是环球散布的,具备弱小而稳固的服务才干,但假设全环球的互联网用户都涌入这个系统,即使不会因拥挤造成瘫痪,访问速度也会变慢。

因此,除了外围 DNS 系统之外,还有两种方法可以缓解域名解析的压力并更快地取得结果——关键经过缓存。

首先,许多大公司和网络运营商建设了自己的 DNS 主机,作为用户 DNS 查问的代理,而不是直接经过外围 DNS 系统访问。这些“家养”主机称为“非威望称号主机”,可以缓存以前的查问结果,这样假设记载曾经存在,就不要求再次发送查问,而是可以直接前往相应的 IP 地址。

这些 DNS 主机的数量远远超越外围系统中的主机,而且大少数天文上接近用户。一些出名的 DNS 主机包含 Google 的8.8.8.8、Microsoft 的4.2.2.1、CloudFlare 的1.1.1.1。

其次,操作系统也会缓存 DNS 解析结果,这样当你再次在阅读器中输入www.apple.com时,不会回到更高档次查问,而是直接从操作系统本地失掉其 IP 地址。

此外,操作系统中有一个不凡的主机映射文件,通常是一个可编辑的文本文件。在 Linux 中,它位于“/etc/hosts”,在 Windows 中,它位于C:\WINDOWS\system32\drivers\etc\hosts。假设操作系统无法在缓存中找到 DNS 记载,它会查找此文件。

有了上述家养 DNS 主机、操作系统缓存和 hosts 文件,许多域名解析上班可以轻松地在本地或本地计算机上处置。这不只繁难了用户,还减轻了各级 DNS 主机的压力,大大提高了效率。

下图提供了 DNS 架构的一个相当片面的示意。

111111111111

在 Nginx 中,有一个名为“resolver”的性能指令,用于性能 DNS 主机。假设没有它,Nginx 将无法查问域名对应的 IP,因此无法反向代理到外部网站。

resolver 8.8.8.8 valid=30s;# 指定 Google's DNS,缓存 30 秒。

域名的新玩法

有了域名和稳固的解析系统,咱们如今可以成功比仅经常使用 IP 地址更多的新玩法。

重定向

第一个也是最繁难的方法是重定向。由于域名取代了 IP 地址,外部服务可以坚持相反的域名,而主机的 IP 地址可以自在更改。当要求下线或迁徙主机时,可以更改 DNS 记载以将域名指向另一台机器。

例如,假设你有一个主机为buy.tv,要求暂时保养关机,可以通知 DNS 主机:“我的 buy.tv 域名地址已更改。以前是 1.2.3.4,如今是 5.6.7.8,请降级。”而后,DNS 将修正其外部的 IP 映射相关,使得任何对 buy.tv 的恳求不再发送到主机 1.2.3.4,而是由 5.6.7.8 处置,确保业务服务不连续。

外部 DNS

第二种方法触及应用 bind9 或其余开源软件设置外部 DNS 作为称号主机,由于域名是命名空间。这样,咱们可以对一切外部开发的服务经常使用域名;例如,数据库服务可以经常使用mysql.inner.app,产品服务可以示意为goods.inner.app。当启动网络通讯时,不再要求硬编码 IP 地址,而是可以直接经常使用域名,这也联合了第一种方法的好处。

负载平衡

第三种方法联合了前两种方法——基于域名成功负载平衡。

这有两种方法可以成功,可以联合经常使用:

上述一切内容都是关于可信任的 DNS。假设存在一些恶意 DNS 主机,它们还可以窜改域名,启动更多的恶意优惠。这里有两个例子:

幸运的是,互联网有许多恶人,DNS 是互联网的基础设备。恶意 DNS 并不经常出现,所以你在阅读互联网时不要求过于担忧。

这些是域名中的一些技巧和常识,了解这些有助于更好地经常使用和治理域名,提高互联网的经常使用体验。

您可能还会对下面的文章感兴趣: