客户端启动时要做的第一件事情就是通过互联网与机房建立连接,然后用户才可以在客户端与后台服务器进行网络通信。目前在计算机网络中应用较为广泛的网络通信协议是TCP/IP,它的通信基础是IP地址,因为IP地址有如下两个主要功能。
- 标识设备:接入网络的设备必须有一个独一无二的IP地址,这样才能唯一标识一个网络目标。
- 网络寻址:将数据包从一个网络设备发送到另一个网络设备,需要携带目标网络设备的IP地址,通过TCP/IP中的IP路由寻址功能,数据包最终可以到达目标网络设备。
客户端要与机房建立连接,就需要知道机房公网IP地址(暴露在互联网中可访问的IP地址),但是IP地址通常由一串冰冷的数字组成,没有可读性,不方便记忆,于是人们又制定出另一套字符型的地址方案:域名地址。“域名”是大家都很熟悉的名词,在浏览器中输入简单易记的域名(如www.baidu.com
),就可以访问到对应的网站,它的底层其实是由DNS来实现的。
1.2.1 DNS的意义
DNS( Domain Name System,域名系统)是互联网中的核心服务,它维护域名与对应 IP地址的映射关系,并提供将域名翻译为IP地址的域名解析功能。DNS在互联网中有非常广泛的应用,它为用户和互联网公司带来了很多便利。例如:
- 互联网公司可以创建简单、便于用户记忆的域名并注册到DNS服务器,用户仅需输入域名就能访问到对应的网站。
- 通过维护域名与多个IP地址的映射关系,DNS可以将针对同一个域名的不同用户请求解析到不同的IP地址,从而缓解单一后台服务器的资源压力。
- 互联网公司因架构升级、网络改造等需要变更机房公网IP地址时,仅需在DNS服务器中重新配置最新的IP地址,而不会对用户造成任何干扰。
- 基于DNS可以实现灵活的负载均衡策略,比如DNS服务器可以对IP地址进行监测——如果发现机房某公网IP地址对应的服务器宕机,那么DNS服务器可以将这个IP地址及时摘除,防止用户无法访问后台。
接下来详细介绍DNS的技术原理。
1.2.2 域名结构
如图1-2所示,域名采用了层次化的树形结构来命名。树的顶端节点为根,根的下一层称为顶级域名,指的是域名的后缀部分,如最常见的.com
、.net
等通用域或者.cn
、.us
等国家域;顶级域名的下一层是二级域名,指的是域名的倒数第二部分,一般表示域名注册人或主体所使用的网络名称,如google.com
、apple.com
;二级域名的下一层是三级域名, 指的是域名的倒数第三部分,表示二级域名的子域名。实际上,域名可能还包括四级域名、五级域名等,它们的含义根据上文类推,每一级域名都控制下一级域名的分配。
对于域名mail.google.com
来说,顶级域名是.com
,二级域名是google.com
,三级域名 是mail.google.com
。
1.2.3 域名服务器
按照域名的层级结构,可以把域名服务器分为4种不同的类型。
(1)根域名服务器(根DNS服务器)
根域名服务器是全球互联网的中枢神经,它负责互联网顶级域名的解析,即它掌握着全部顶级域名的名称与IP地址的映射关系。目前全球仅有13台IPv4根域名服务器,其中主根域名服务器部署在美国,其余12台辅根域名服务器有9台部署在美国、2台部署在欧洲、1台部署在日本。根域名服务器由美国政府授权的互联网名称与数字地址分配机构(ICANN)统一管理。
(2)顶级域名服务器(顶级DNS服务器)
顾名思义,顶级域名服务器负责管理在每个顶级域名下注册的二级域名解析工作,即它可以根据二级域名寻找到二级域名服务器的IP地址。顶级域名服务器就相当于一个朝代的封疆大吏。
(3)权威域名服务器(权威DNS服务器)
权威域名服务器负责对特定的域名进行解析,它管理顶级域名下的二级域名、三级域名、四级域名等的服务器。从名字中的“权威”可以看出,权威域名服务器最终决定了一个域名到底应该被解析成哪个IP地址,它是DNS中最核心的部分。
每个域名对应的权威域名服务器都可能不同,每个权威域名服务器仅可解析它负责的域名,比如负责google.com
域名的权威域名服务器无法解析域名apple.com
。大型互联网公司一般会自建权威域名服务器,而中小型企业一般会将域名托管给知名的权威域名服务商。
(4)本地域名服务器(本地DNS服务器)
本地域名服务器不属于域名层次结构中的任何一层,但是它对DNS非常重要,相当于域名解析的缓存。任何一台主机在进行网络地址配置时,都会配置一台域名服务器作为本地域名服务器,它是主机在进行域名查询时首先要查询的域名服务器。本地域名服务器一般由网络运营商提供,它作为主机访问网络时域名解析的总代理,会将域名解析结果缓存到本地,以便加速主机后面的域名解析过程。
1.2.4 域名解析过程
域名解析一般采用递归查询方式执行,一个完整的域名解析过程如图1-3所示。
- 当客户端访问某个域名时,会先在设备的本地缓存中查找是否有此域名对应的IP地址。本地缓存包括浏览器缓存和计算机系统Hosts文件DNS缓存。
- 如果本地缓存中没有对应的IP地址,则客户端向本地域名服务器发起域名解析请求。如果本地域名服务器保存了域名对应的IP地址,则可以直接返回;否则,本地域名服务器作为客户端的全权代理,递归地完成域名解析。
- 本地域名服务器先向根域名服务器发起域名解析请求。根域名服务器收到请求后,会根据所要查询的域名的后缀将所对应的顶级域名服务器(如
.com
)地址返回给本地域名服务器。 - 本地域名服务器根据返回结果向所对应的顶级域名服务器发起查询请求。顶级域名服务器会先查看自己的缓存中是否有此域名的解析记录,如果有,则将IP地址解析结果返回给本地域名服务器,本地域名服务器再将其返回给客户端,域名解析完成。而如果顶级域名服务器的缓存中没有解析记录,则将域名对应的权威域名服务器地址返回给本地域名服务器。
- 本地域名服务器继续向权威域名服务器发起域名解析请求。权威域名服务器最终将与域名关联的IP地址返回给本地域名服务器,本地域名服务器再将其返回给客户端,域名解析完成。
可以看到,除客户端查询本地缓存和本地域名服务器发起请求之外,域名解析的其余各环节均以本地域名服务器为中心进行递归查询,本地域名服务器在域名解析的整个环节中承担了代理的角色。
需要额外说明的是,一旦本地域名服务器获得域名解析记录,它就会在本地进行记录缓存,以便下次客户端再向它查询同一个域名时可以直接获得结果,而不用再进行递归查询了。被缓存的域名解析记录格式大致如图1-4所示。
当查询域名(如www.baidu.com
)时,域名解析记录会包含如下数据。
- 生存周期(TTL):表示这条记录在本地域名服务器中被缓存的时长。
- 协议类型(Class): 一般标识为IN,表示因特网。
- 记录类型(Type ): A表示IPv4地址,AAAA表示IPv6地址。
- 记录数据(Rdata ):与域名关联的地址信息。
总结
什么是DNS?
- DNS( Domain Name System,域名系统)是互联网中的核心服务,它维护域名与对应 IP地址的映射关系,并提供将域名翻译为IP地址的域名解析功能。
域名服务器的类型?
- 根域名服务器
- 顶级域名服务器
- 权威域名服务器
- 本地域名服务器
DNS解析流程?
- 当客户端访问某个域名时,会先在设备的本地缓存中查找是否有此域名对应的IP地址。本地缓存包括浏览器缓存和计算机系统Hosts文件DNS缓存。
- 如果本地缓存中没有对应的IP地址,则客户端向本地域名服务器发起域名解析请求。如果本地域名服务器保存了域名对应的IP地址,则可以直接返回;否则,本地域名服务器作为客户端的全权代理,递归地完成域名解析。
- 本地域名服务器先向根域名服务器发起域名解析请求。根域名服务器收到请求后,会根据所要查询的域名的后缀将所对应的顶级域名服务器(如
.com
)地址返回给本地域名服务器。 - 本地域名服务器根据返回结果向所对应的顶级域名服务器发起查询请求。顶级域名服务器会先查看自己的缓存中是否有此域名的解析记录,如果有,则将IP地址解析结果返回给本地域名服务器,本地域名服务器再将其返回给客户端,域名解析完成。而如果顶级域名服务器的缓存中没有解析记录,则将域名对应的权威域名服务器地址返回给本地域名服务器。
- 本地域名服务器继续向权威域名服务器发起域名解析请求。权威域名服务器最终将与域名关联的IP地址返回给本地域名服务器,本地域名服务器再将其返回给客户端,域名解析完成。