DNS 的全称是 Domain Name System
,直译成中文就是 域名系统
。
比如 quanduan.com
是一个域名
, .com
后缀是比较传统的域名,也有新兴的类型,比如 markdown.app
也是一个域名,它的后缀是 .app
,由 Google 公司负责运维。
我们访问一个网站时,基本上是通过域名
进行的,而不是 IP。而网站的背后是服务器
,服务器真正的地址,是 IP
。DNS 的作用,主要是完成域名的解析,从而我们在访问域名的时候,可以直指对应的 IP
。
域名
-> IP
并非 DNS 的唯一作用,DNS 中除了 A 记录、AAAA 记录、CNAME 记录可以实现域名到 IP 的解析,同样也有其它的类型,比如 TXT
、MX
(与电子邮箱相关)。
软件一般都需依附于一个 OS (操作系统) ,这个 OS 可能是 Windows、MacOS,安卓、iPadOS .etc。
如果所有 OS 都运行了同一个软件,那么就相当于创建了一种共识。共识的价值,不言而喻,且说比特币就能想象。
自互联网诞生起,TCP、SMTP、HTTP 这些基础协议支撑了整个世界的发展。协议,从某种角度上来说是停留在纸面上的,只有用代码实现它们,才会有产品的实体。
这些产品的实体,基本上不会以 整个互联网
为格局,浏览器
勉强算,但现实情况下,浏览器已经衍生出各种品牌了,比如 Chrome、Safari、IE、FireFox .etc,一家独大的局面已难以再做到。
如果可以在 互联网级别
的层面上实现一家独大,也就实现了垄断。浏览器
在初始的年代,是 网景 垄断的,接下来,微软通过用 Windows 系统绑定 IE 的方法迅速干掉网景 (1997 年微软还因此被美国司法部给告了),当然也为后来迎来技术界很长一段 IE6 黑暗时代做了铺垫。
DNS 本质上是数据库,它是分布式的,但又有自己默认的中心,这个中心,就是 DSN 的根服务器。
根服务器早期时九成位于美国,没中国什么事情。如果在互联网的早期,美国可以将来自中国的解析全部断掉,那么中国的互联网就会崩溃,这倒不算夸张的说法。而现实世界又不是如此,DNS 是分布式的,也就意味着在某个局部就能自成系统,没了根服务器,未必就会挂掉。
后来,根服务器有点我们国家什么事情了,结果在 2010 年的时候被撤销了 (镜像),原因你猜?2019 年的时候,似乎又要重新架设了 (镜像)。重要的东西,就好好保护,不要糟践了。当然,这个问题也说明,根服务器之上还是有一个更加集权的组织存在,不然谁有能力去制裁别人?
权力和滥用,各自弊端。完全分布式的互联网,在很长的时间内,是并不现实的。
听起来有些晦涩?
简而言之,如果一个软件可以做到互联网的级别,那么它的力量是巨大的,甚至一个环节的变动就能产生毁灭性的力量。
而 DNS 显然就是这种级别的软件。虽然对于大多数人来说,根本意识不到它正在自己的设备上运行着。
不论是 Windows,还是 Linux、MacOS、iOS,系统都内置了 DNS 的客户端。
客户端
的作用,是负责解析域名。
如果没有服务端
的数据支持,那么客户端
的 DNS 解析的过程,就是无源之水了。
跟 Web Server 一样,我们看到的网页本身可以视为客户端浏览器访问 Web Server 的结果,DNS 的客户端也需要从 DNS Server 上查询信息。
本课程学习的内容,主要是指 Server 端,也就是 DNS Server。
大多数人可以不去了解 DNS 就能上网,完全不影响日常电脑设备的使用。
而如果需要自己做一个网站,涉及到域名绑定,DNS 记录需要设置,光这一块了解起来,就已经有些晦涩了。
DNS Server ,自然会更加难懂,何况还是去开发一个 DNS Server,难度可想而知。
因为 DNS 非常实用吗?倒不是,它固然实用,但它的实用性,像空气一样,无处不在,却又不需要特别的强调。
真正的原因,是因为它非常基础,却又太容易被忽略。当我们捋完这个课程的时候,脑海中对互联网是什么,潜移默化中,会有更加深刻一些的认知。
另外,学习 Python 的入门过程中,选择一个硬核一些、又基础到被忽略的技术作为入口,应该也会有趣、有成就一些。