域名解析那些事
在移动互联网一统天下前的互联网时代,一个好的域名是非常重要的品牌。哪怕在以App为代表的移动互联时代,域名也是最重要的基础设施。可以说,离开了域名的机制,绝大部分网络相关的服务都会瘫痪。
既然域名如此重要,竟让我们仔细的盘一盘域名的那些事情吧。
什么是域名
首先,让我们看看wiki上的解释
网域名称(英语:Domain Name,简称:Domain),简称域名、网域,是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。域名可以说是一个IP地址的代称,目的是为了便于记忆后者。
说句大白话,就是为了方便记忆和管理,用一段文字,代替数字组成的IP地址。
相当于手机通讯录一样,我只要在通讯录里找到张三的名字,就不需要去背那一长串的手机号了。
至于IP地址,本质上是一个大整数,用于标识互联网上的网络地址。为了方便记忆和管理,IPV4和IPV6有不同的形式,分别是127.0.0.1和2001:0db8:0000:0000:0000:8a2e:0370:7334,具体可以参考wiki。
使用域名必须要花钱吗?
出乎你的直觉的,你自己使用域名,并不用花钱。
你的电脑在访问一个域名时,一般会走两个途径将域名转换为IP。
- 查询本地配置,一般叫做hosts文件,一行一个写死的配置。具体文件位置,Windows在%WinDir%\System32\Drivers\Etc\Hosts下,Linux系统一般在/etc/hosts里
- 根据网络配置中的DNS服务器进行查询。如果你在大型企业内,很可能DNS服务器是网络内部的,管理员可以设置所有的域名指向的地址,可以使用内部域名,甚至可以出于管理的目的,将知名域名解析取消甚至篡改。
对于程序员来说,通过修改host文件进行应用程序开发是一个很常见的手段。在网络情况不佳时,也经常有通过修改host文件,将域名指向到容易访问的地址的操作。
既然自己使用域名不需要费用,那为什么有很多域名供应商,还有很多域名交易呢?
因为,虽然自己使用域名不需要花钱,你要让别人能通过域名找到你,是需要花钱的。
还是以手机通讯录为例,你在自己手机上怎么存电话号码都不用钱,但你要想把自己的联系方式登上电话黄页(很古老的一个名词了),还是需要缴纳一定的费用的。
域名注册是怎么一回事情。
没有规矩,不成方圆,整个互联网能蓬勃发展,离不开背后的各种管理机构。
其中,域名是由ICANN来进行管理的。
互联网名称与数字地址分配机构(Internet Corporation for Assigned Names and Numbers),简称ICANN,是位于美国加利福尼亚的非营利社团,主要由互联网协会的成员组成,创建于1998年9月30日,目的是接管包括管理域名和IP地址的分配等与互联网相关的任务,这些任务曾由其它组织(特别是IANA)代表美国政府来执行,但ICANN仍受美国政府及法律管理。ICANN同时也负责L.root-servers.net这组根域名服务器的运作。
其中,具体的域名注册由IANA来管理
域名注册局(英语:domain name registry;也称域名注册数据库等)是顶级域名下注册的域名的数据库。注册数据库操作者(registry operator,也称注册操作者),即网络信息中心(Network Information Center,NIC)是互联网域名系统(DNS)的一部分。它保存了域名的数据,并生成区域文件,以转换域名到IP地址。每个NIC都是一个组织,它管理顶级域名下的域名注册,负责控制域名分配政策,在技术上运作顶级域名。因此它和域名注册商(domain name registrar)有明显的不同。
管理域名的最高级别的是互联网号码分配局(Internet Assigned Numbers Authority,IANA),它管理根域名服务器的数据,从而管理DNS树。IANA也管理像.int、.arpa和一些争议性域名如root-servers.net等。
IANA委托了所有的域名给域名注册局管理,比如VeriSign。
国家及地区顶级域(Country code top-level domains,ccTLD)被IANA委托给国家性的域名注册局来管理,比如德国的DENIC、英国的Nominet、中国大陆的CNNIC、台湾的TWNIC等。
这就是域名注册的最顶层的架构。
在注册域名时,我们的第一个决定就是注册一个什么顶级域名,顶级域名一般是一个域名的最右方的部分,比如.com,.net,.io,有时候顶级域名也可以包含.,比如.com.cn。
选择了顶级域名后,也就决定了你的域名的注册局。不同的域名的注册局可能有不同的对注册人的要求,也会有不同的费用标准。
在注册时,我们一般会需要确认一个域名是否被注册,或者有需要时可能会需要查询一个域名的注册状态,这时候我们就会使用一个叫做Whois的数据库查询服务。
一个域名的所有者可以通过查询WHOIS数据库而被找到;对于大多数根域名服务器,基本的WHOIS由ICANN维护,而WHOIS的细节则由控制那个域的域注册机构维护。
对于240多个国家代码顶级域名(ccTLDs),通常由该域名权威注册机构负责维护WHOIS。例如中国互联网络信息中心(China Internet Network Information Center)负责.CN域名的WHOIS维护,香港互联网注册管理有限公司(Hong Kong Internet Registration Corporation Limited)负责.HK域名的WHOIS维护,台湾网络信息中心(Taiwan Network Information Center)负责.TW域名的WHOIS维护。
当然,现在大部分域名代理商都提供了隐私保护功能,直接查询whois可能只能查看到域名注册时间和到期时间,注册商,Nameserver等基本信息,其他的的信息都会被保护。
域名的解析设置
域名的解析是一个很技术细节的工作了。
正常的互联网解析的第一步是查找根域名服务器(hosts文件和内部解析服务器不需要这一步)。
全球有13台根域名服务器(IPV4),储存了所有顶级域名的解析服务器的地址。
域名解析时会根据域名的顶级域名,查找到对应注册局的权威解析服务器地址。
通过第一部的权威服务解析,我们的解析就开始递归查询了。
在成功的注册了域名后,我们就拥有了域名最基本的控制权。其中最最重要的就是能够设置NameServer。
NameServer指具体你完整的域名由哪个解析服务器来解析。一般域名注册商都会提供基础的解析服务,也有很多Dnspod这类专门提供专业域名解析服务的,大型公司也可能使用自建域名解析。
当我们设置了正确的NameServer后,正常的查询很快就会递归到我们设置的解析服务器上,然后就开始我们的解析操作了。
一般而言,我们会在解析服务器上对域名添加多条记录,记录一般包括记录名,记录类型,记录值,记录TTL,记录优先级。
记录名一般时你的域名的.之前的部分。比如tech.herbrhythm.com的记录名就是tech。记录名也可以有多层,比如level2.tech.herbrhythm.com,记录名既可以是herbrhythm.com的level2.tech记录,也可以是tech.herbrhythm.com的level2记录。特别的,有一种记录叫做泛解析,一般是*记录,代表如果没有查询到普通记录的话,就以这个记录的值作为查询结果。
记录类型很重要,常用的记录类型包括一下几种:
- A记录 一个固定的IPV4记录
- AAAA记录 一个固定的IPV6记录
- CNAME 别名记录 以一个其他域名作为查询结果
- MX记录 邮件交换记录 邮件服务器地址 设置邮件服务器时使用的记录。由于历史原因,这个记录可能与CNAME记录冲突,又由于邮件服务器域名一般是裸域名(herbrhythm.com这样不带自域名的形式),所以一些比较传统的域名解析服务器裸域名使用别名时可能和邮件服务冲突
- TXT记录 文本记录 任意文本 一般用于域名所有权认证,常见于HTTPS证书申请以及邮箱反垃圾邮件认证等领域。
- NS记录 域名服务器记录 可以设置主/子域名的域名服务器信息
记录TTL是生命的记录有效时间。可以认为是解析记录的缓存时间。域名解析是客户端按层级一层一层向上 进行域名的递归查询的,所以一般的记录查询都会在不同的层级有缓存。这个TTL可以认为是解析服务器的参考缓存时间,但实际解析记录未必严格按照TTL实效
记录优先级是部分记录类型(比如 MX记录 NS记录),对对应的服务器进行优先查询的优先级设定,可以区分主要/辅助服务器。
除了普通的解析操作外,部分解析服务器还支持分线路记录,可以根据不同的访问者线路(基于IP)返回不同的返回值。
现在很常见的CDN服务,本质也是通过这个形式来实现的,通过访问者的IP不同,返回一个网络位置最近的缓存服务器的地址,直接从缓存服务器上就近返回资源。
域名的查询
一般来说,域名的查询流程是从本地网络设置的DNS开始,查找对应的记录。本地网络DNS如果无法查询到本地或者缓存的记录,会向更上一层的DNS服务器查询,直到无法查询到记录,或者有确切的返回值。
最标准的查询域名可以使用nslookup指令, 使用nslookup可以时定具体的类型,解析服务器经行查询。
比如
nslookup -type=record_type tech.herbrhythm.com 8.8.8.8
unknown query type: record_type
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: tech.herbrhythm.com
Address: 101.34.200.196
查询一般是通过udp的53端口进行的。当然,由于部分安全性的问题,也有不走53端口,走在加密协议层上的查询,这部分使用场景特殊,就不深入讨论了。
域名与证书
最近几年,随着大家对网络安全的愈发重视,以及let’s encrypt为代表的免费证书的流行,证书进入大家的事先,不光在网页领域,在很多APP和小程序中,证书也成了服务开发的必选项。
那么,SSL证书和域名的关系,又是怎么样的呢?
SSL证书本身的出现就和域名的机制息息相关。在上面的域名解析流程中,很明显,所有的查询的结果都是基信任的。我信任你的结果,我就直接采用了你的答案。当互联网承载了越来越多的经济角色后,这种朴素的机制明显失效了。证书就是通过另一个个维度来确保安全。操作系统开发者,以及浏览器开发者,配合证书的签发机构,以商业信誉为背书,建立起了证书的验证机制。签发机构负责认证证书所有者是域名/组织所有人,操作系统和浏览器负责认证域名签发机构。这套机制,能保证最低限度的解析出的服务器地址和域名的匹配。
SSL证书都是基于域名的,一张证书可以包含一个或多个域名,也可以包含泛域名(通配符域名)。
除了这一整套认证和授信的机制,也可以采用信任自签证书,或者在客户端制定证书的机制来确保安全(这里有谷歌和wosign的一场公案,有兴趣的可以在网络上查询下)
除了使用SSL证书确保安全外,证书认证本身和域名解析也息息相关。
SSL证书分为 DV OV 和EV三个类型
- DV是最基本最常用的,就是验证域名型,只确保域名所有权和证书一致。
- OV是组织认证,还对证书进行了组织身份的认证。
- EV是对大企业还进行了业务身份的认证
其中最常见的DV认证,最早期是通过域名的管理员信箱进行身份确认,现在也转化为通过服务器文件,或者域名解析记录添加制定的TXT记录进行认证。
这三点都是验证申请人能对域名的记录进行相应的操作权限。
因此,对于一般非敏感请求,可以认为,只要能获取有效的证书,就是解析到了正确的服务器。
由此可见,SSL证书是对域名机制的一种必要的补充,是在互联网时代利用域名进行基础建设时的基础保证。