为什么学习 DNS

什么是 DNS

DNS 的全称是 Domain Name System,直译成中文就是 域名系统
比如 quanduan.com 是一个域名.com 后缀是比较传统的域名,也有新兴的类型,比如 markdown.app 也是一个域名,它的后缀是 .app,由 Google 公司负责运维。
我们访问一个网站时,基本上是通过域名进行的,而不是 IP。而网站的背后是服务器,服务器真正的地址,是 IP。DNS 的作用,主要是完成域名的解析,从而我们在访问域名的时候,可以直指对应的 IP

域名 -> IP 并非 DNS 的唯一作用,DNS 中除了 A 记录、AAAA 记录、CNAME 记录可以实现域名到 IP 的解析,同样也有其它的类型,比如 TXTMX (与电子邮箱相关)。

互联网级别的软件

软件一般都需依附于一个 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 显然就是这种级别的软件。虽然对于大多数人来说,根本意识不到它正在自己的设备上运行着。

什么是 DNS Server

不论是 Windows,还是 Linux、MacOS、iOS,系统都内置了 DNS 的客户端
客户端的作用,是负责解析域名。
如果没有服务端的数据支持,那么客户端的 DNS 解析的过程,就是无源之水了。
跟 Web Server 一样,我们看到的网页本身可以视为客户端浏览器访问 Web Server 的结果,DNS 的客户端也需要从 DNS Server 上查询信息。

为什么学习 DNS

本课程学习的内容,主要是指 Server 端,也就是 DNS Server。
大多数人可以不去了解 DNS 就能上网,完全不影响日常电脑设备的使用。
而如果需要自己做一个网站,涉及到域名绑定,DNS 记录需要设置,光这一块了解起来,就已经有些晦涩了。
DNS Server ,自然会更加难懂,何况还是去开发一个 DNS Server,难度可想而知。

如此晦涩的 DNS Server,为什么还要作为学习的内容,并且是 Python 的入门教学?
因为 DNS 非常实用吗?倒不是,它固然实用,但它的实用性,像空气一样,无处不在,却又不需要特别的强调。
真正的原因,是因为它非常基础,却又太容易被忽略。当我们捋完这个课程的时候,脑海中对互联网是什么,潜移默化中,会有更加深刻一些的认知。

另外,学习 Python 的入门过程中,选择一个硬核一些、又基础到被忽略的技术作为入口,应该也会有趣、有成就一些。