868-超详细 DNS 协议解析

0. 前言

为了保证网址的正常访问,域名解析协议(DNS)其实在背后做出了很多努力,本文将透彻讲解 DNS 协议的原理,了解我们每天都在接触的网址到底是怎么工作的。
868-超详细 DNS 协议解析

1. 什么是 DNS 协议

在学习 DNS 协议之前,我们先区分一下域名和 IP 地址这个两个概念:

IP 地址」:一长串能够唯一地标记网络上的计算机的数字
域名」:又称网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)比如 www.baidu.com

不知道有没有同学会混淆域名和「网址」的概念,可以这样理解,网址里面含有域名。举个例子:www.gitee.com/veal98 就是一个网址,而 www.gitee.com 就是域名

由于 IP 地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并「通过域名解析协议(DNS,Domain Name System)来将域名和 IP 地址相互映射」,使人更方便地访问互联网,而不用去记住能够被机器直接读取的 IP 地址数串。将域名映射成 IP 地址称为正向解析,将 IP 地址映射成域名称为反向解析。

DNS 协议可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。但「大多数情况下 DNS 都使用 UDP 进行传输」。

2. 域名详解

❓ 那么域名由谁来规定和管理呢?不能是随便写吧?

全世界域名的最高管理机构,是一个叫做 ICANN (Internet Corporation for Assigned Names and Numbers)的组织,总部在美国加州。「ICANN 负责管理全世界域名系统的运作」。
868-超详细 DNS 协议解析
域名其实是具有一定的层次结构的,从上到下依次为:「根域名」、「*域名」(top level domain,TLD)、「二级域名」、(三级域名)
868-超详细 DNS 协议解析
① *域名
先来讲讲「*域名」(TLD),即最高层级的域名。简单说,就是网址的最后一个部分。比如,网址www.baidu.com 的*域名就是 .com。ICANN 的一项主要工作,就是规定哪些字符串可以当作*域名。截至 2015 年 7 月,*域名共有 1058 个,它们大致可以分成两类:
一类是「通用*域名」(gTLD),比如.com、.net、.edu、.org、.xxx等等,共有 700 多个。
另一类是「国家*域名」(ccTLD),代表不同的国家和地区,比如.cn(中国)、.io(英属印度洋领地)、.cc( 科科斯群岛)、.tv(图瓦卢)等,共有 300 多个。

当然,ICANN 自己不会去管理这些*域名,因为根本管不过来。想想看,*域名有1000多个,每个*域名下面都有许多批发商,如果每个都要管,就太麻烦了。ICANN 的政策是,每个*域名都找一个「托管商」,该域名的所有事项都由托管商负责。ICANN 只与托管商联系,这样管理起来就容易多了。举例来说,.cn 国家*域名的托管商就是中国互联网络信息中心(CNNIC),它决定了 .cn 域名的各种政策。

② 二级域名
而「二级域名」(Second Level Domain,SLD) 在通用*域名或国家*域名之下具有不同的意义:

通用*域名下的二级域名:一般是指域名注册人选择使用的网上名称,如 yahoo.com(商业组织通常使用自己的商标、商号或其他商业标志作为自己的网上名称,如 baidu.com)
国家*域名下的二级域名:一般是指类似于通用*域名的表示注册人类别和功能的标志。例如,在 .com.cn 域名结构中,.com 此时是置于国家*域名 .cn 下的二级域名,表示中国的商业性组织,以此类推。

三级域名」是形如 www.baidu.com 的域名,可以当做是二级域名的子域名,特征为域名包含两个 .。对于域名所有者/使用者而言,三级域名都是二级域名的附属物而无需单独费用。「三级域名甚至不能称为域名,一般称之为域名下的 “二级目录”」。

③ 根域名
❓ 那么「根域名」在哪里呢?在层次结构中根域名不是最*的吗?域名中怎么没有看见它?

由于 ICANN 管理着所有的*域名,所以它是最高一级的域名节点,被称为根域名(root domain)。在有些场合,www.xxx.com 被写成 www.xxx.com.,即最后还会多出一个点。这个点就是根域名。
868-超详细 DNS 协议解析
理论上,「所有域名的查询都必须先查询根域名」,因为只有根域名才能告诉你,某个*域名由哪台服务器管理。事实上也确实如此,「ICANN 维护着一张列表(根域名列表),里面记载着*域名和对应的托管商」。
868-超详细 DNS 协议解析
比如,我要访问abc.xyz,也必须先去询问根域名列表,它会告诉我 .xyz 域名由 CentralNic 公司托管。根域名列表还记载,.google由谷歌公司托管,.apple由苹果公司托管等等。

由于根域名列表很少变化,大多数 DNS 服务商都会提供它的缓存,所以根域名的查询事实上不是那么频繁。

3. 域名服务器详解

域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的域的相关信息。一个域名服务器所负责管里的分层叫作 「区 (ZONE)」。域名的每层都设有一个域名服务器:

根域名服务器
*域名服务器
权限域名服务器
下面这幅图就很直观了:
868-超详细 DNS 协议解析
除了上面三种 DNS 服务器,还有一种不在 DNS 层次结构之中,但是很重要的 DNS 服务器,即「本地域名服务器」。下面我们分别讲解这四种服务器都是用来干什么的

上一篇:acme.sh 使用泛域名|阿里云DNS |免费申请证书


下一篇:读文献——一些专有名词的学习记录