域名背后那些事儿
第一节:概念理解
1.1:IP地址是什么
IP 地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
IP 地址是 IP 协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
位于网络上的每个服务器都有一个唯一的IP地址,例如61.135.169.125
就是百度的官网地址之一,如果每次访问百度都输入 IP 的话,估计到今天互联网还没有走出鸿蒙阶段!
1.2:域名是什么
域名就是 IP 地址的别名!在网络发展历史上,最开始确实就是直接使用 IP 地址来访问远程主机的。早期联网的每台计算机都是采用主机文件(即我们俗称的 hosts 文件)来进行地址配置和解析的,也就是将主机的域名和IP的对应关系配置在主机文件中。这样,在地址栏输入更容易记忆的域名,就可以解析成 IP 地址,就可以实现连接访问。
域名比 IP 地址更容易记忆,本质上只是为数字化的互联网资源提供了易于记忆的别名,就像在北京提起“故宫博物院”就都知道指的是“东城区景山前街4号”的那个大院子一样。如果把 IP 地址看成电话号码,那域名系统就是通讯录。我们在通讯录里保存了朋友和家人的信息,每次通过名字找到某人打电话的时候,通讯录就会查出与之关联的电话号码再拨号过去。我们可能记不下多少完整的电话号码,但是联系人的名字却是一定记得的。
1.3:DNS是什么
域名系统(DNS)就是用来将域名解析成 IP 地址的网络服务!
后来联网机器越来越多,主机文件的更新和同步就成了很大的问题。于是,1983 年保罗·莫卡派乔斯发明了域名解析服务和域名系统,在 1985 年 1 月 1 日,世界上第一个域名 nordu.net 才被注册成功。单凭这一个名字我们并不能访问到正确的地址,只有能将域名解析成实际的网络地址,网络访问才能成功。这种解析工作由专门的「域名系统」(Domain Name System,简称 DNS)完成,DNS 也是互联网的核心基础服务之一。
第二节:域名解析
2.1:域名层次结构
我们经常听到有人说「顶级域名」、「一级域名」、「二级域名」等概念,域名级别究竟是怎么划分的呢?
根域名
所有域名的根域名都是一样的,就是
.root
!以百度为例,通过一些域名解析工具,我们可以看到百度的官方域名显示为www.baidu.com.
,细心的人会注意到最后有一个点,这不是 bug,而是所有域名的尾部都有根域名,所以百度真正的域名是www.baidu.com.root
,简写为www.baidu.com
,又因为根域名对于所有的域名都一样,所以平时是省略的,最终就变成了我们常见的样子www.baidu.com
。一级域名(TLD),也叫顶级域名
根域名的下一级叫做顶级域名,也叫做一级域名,常见的如
.com
、/ .net
、/ .org
、/ .cn
等等。二级域名(SLD),也叫主域名
一级域名的下一级就是二级域名,比如
baidu.com
。次级域名,也叫主机名
二级域名的下一级域名就是三级域名,比如
www.baidu.com
。
一般来说我们购买一个域名就是购买一个二级域名(SLD)的管理权(如 leancloud.cn),有了这个管理权我们就可以随意设置三级、四级域名了。
2.2:域名解析过程
DNS系统也是一个树状结构,不同级别的域名由不同的域名服务器来解析,整个过程是一个层级式的。
- 层级式域名解析体系的第一层就是根域名服务器,全世界IPv4根域名服务器只有 13 台(名字分别为 A 至 M),其中1 个为主根服务器在美国,其余 12 个均为辅根服务器,它们负责管理世界各国的域名信息。一个域名必须首先经过根数据库的解析后,才能转到顶级域名服务器进行解析;
- 根域名服务器下面是顶级域名服务器,即相关国家域名管理机构的数据库,比如我们中国的互联网络信息中心(CNNIC);
- 然后是再下一级的权威域名服务器和 ISP 的缓存服务器;
举个例子,来模拟一下这个流程!假设北京市设立了一个专门的“道路咨询局”,里面设置了局长、部长、处长、科员好几个级别的公务员,不同的部门、科室、人员负责解答不同区域的道路问题。这里的人都有一个共同特点,信奉“好记性不如烂笔头”的哲理,喜欢将自己了解到的信息记录到笔记本上。但是有一点遗憾的是,他们写字用的墨水只有一种,叫“魔术墨水”,初写字迹浓厚,之后会慢慢变淡,1 小时之后则会完全消失。道路咨询局门口还有一个门卫大爷,所有的人要问路都需要通过他来传达和回复,市民并不能进入办公楼。
如果市民 A 先生来找门卫大爷询问“北海公园”的地址,门卫大爷会先看一下自己的笔记本,找找看在此之前的一个小时内有没有人问过北海公园。如果没有,他就会拨打内线去找局长求助。局长说北海是西城区,你去问负责西城区道路信息的赵部长吧。门卫大爷又去问赵部长,赵部长查了一下,说这个地址你去问负责核心区的钱处长吧。门卫大爷又给钱处长打过去电话,钱处长说这个地址我也不掌握啊,你去问一下负责景山片区的科员小孙吧。门卫大爷从小孙那里终于知道了北海公园地址,他赶紧记到自己的小本本上,然后把结果告诉了市民 A 先生。接下来一小时内,如果还有市民 B 先生再来问北海公园的话,门卫大爷就直接用笔记本上记载的结果回复了。当然,如果市民 C 女士过来问别的地址的话,门卫大爷就要把处理 A 先生问询的流程再走一遍了。
2.3:分级查询实例
举个例子来说明域名解析的分级查询。比如,现在我在谷歌浏览器的地址栏输入一个网址https://news.qq.com
,那么浏览器会从接收的URL中抽取出域名字段(news.qq.com
),然后将它传给DNS客户端(操作系统提供的)来解析。
在Linux系统中,/etc/resolv.conf
文件中,制定了本地DNS服务器的地址,Windows系统会有所不同:
1 | $ cat /etc/resolv.conf |
然后我们用dig工具查看一下new.qq.com的解析结果(其中中文部分是解释说明):
1 | $ dig news.qq.com |
从这个结果可以看到,我们得到的结果不是权威回复,只是本地DNS服务器从缓存中给出的答案。
接下来我们在dig命令中新增一个参数+trace
,看看完整的分级查询过程:
1 | $ dig +trace news.qq.com |
总结:
实际的流程里面,本地 DNS 服务器相当于门卫大爷,根域名服务器相当于局长同志,其余以此类推。客户端与本地 DNS 服务器之间的查询叫递归查询,本地 DNS 服务器与其他域名服务器之间的查询就叫迭代查询。
2.4:域名记录类型
域名服务器之所以能知道域名与 IP 地址的映射关系,是因为我们在域名服务商那里提交了域名记录。我们购买了一个域名后,需要在域名服务商那里设置域名解析的记录,域名服务商把这些记录推送到权威域名服务器,这样我们的域名才能正式生效。在添加域名记录时,会遇到A 记录
、CNAME记录
等不同类型,这些类型是什么意思,它们之间又有什么关系和区别呢?
A 记录:
A记录用来直接指定主机名(或域名)对应的IP地址。常见有如下几种:
- www:解析后的域名为
www.yourdomain.com
,一般用于网站地址; - @:直接解析主域名;
- *:泛解析,指将
.yourdomain.com
解析到同一 IP;
- www:解析后的域名为
CNAME 记录
CNAME的全称是Canonical Name,通常称别名记录。如果需要将域名指向另一个域名,再由另一个域名提供IP地址,就需要添加CNAME记录。
MX 记录
邮件交换记录,用于将以该域名为结尾的电子邮件指向对应的邮件服务器以进行处理。
NS 记录
域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。
AAAA 记录
用来指定主机名(或域名)对应的 IPv6 地址,不常用。
TXT 记录
可以填写任何东西,长度限制 255。绝大多数的 TXT 记录是用来做 SPF 记录(反垃圾邮件),MX 记录的作用是给寄信者指明某个域名的邮件服务器有哪些。SPF 的作用跟 MX 相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。
显性 URL
从一个地址 301 重定向(也叫「永久性转移」)到另一个地址的时候,就需要添加显性 URL 记录。
隐性 URL
从一个地址 302 跳转(也叫「临时跳转」)到另一个地址,需要添加隐性 URL 记录。它类似于显性 URL,区别在于隐性 URL 不会改变地址栏中的域名。
在填写各种记录的时候,我们还会碰到一个特殊的设置项——TTL
,生存时间(Time To Live)。
TTL
表示解析记录在 DNS 服务器中的缓存时间,时间长度单位是秒,一般为3600秒。比如:我们在访问news.qq.com
时,如果在 DNS 服务器的缓存中没有该记录,就会向某个 NS 服务器发出请求,获得该记录后,该记录会在 DNS 服务器上保存TTL
的时间长度,在TTL
有效期内访问news.qq.com
,DNS 服务器会直接缓存中返回刚才的记录。
2.5:DNS智能解析
DNS主要的工作就是完成域名到 IP 的映射,但是也不是简单到查查字典就可以搞定的程度。在设置 DNS 解析的时候,我们还有一些额外的需求,例如:将一个域名解析到多个 IP!
例如我们一个网站有多台前端机,希望用户访问的时候,可以随机分散到这些机器上,以增加网站承载能力。有一种解决的办法就是对同一个域名设置多条 A 记录,分别指定到不同的 IP 上。
~~
~~
~~