晚上好,我是老杨。
我们知道,TCP/IP提供了通过IP地址来连接到设备的功能。
但对用户来讲,记住某台设备的IP地址是相当困难的,因此,有人专门设计了一种字符串形式的主机命名机制,这些主机名与IP地址相对应。
在IP地址与主机名之间需要有一种转换和查询机制,提供这种机制的系统就是域名系统DNS(Domain Name System)。
可能还有小白对DNS的概念有那么一点不清晰,老杨今天这篇文章就从几个方面入手,都给你说道说道。
今日文章阅读福利:《DNS与BIND(第5版)》
需要的小友,可以私信老杨,备注“DNS”,前20名无偿送出该资源。
01 到底啥是DNS?
DNS就相当于电话簿, 电话簿可以根据人名查找对应的电话号码,而DNS可以根据域名查找对应的IP地址。
展开全文
有小白可能会问:为啥非要整个IP地址,就域名不行吗?这就要从互联网通信协议相关知识讲起。
简单的讲,IP地址是每一个计算机的唯一标识, 就像每个人的身份证号一样是独一无二的, 只有通过IP地址才来唯一确定一台计算机。
但是由于IP地址一连串的数字, 记忆麻烦,因此就产生了域名, 域名相当于IP地址的昵称,但它和IP地址是一对多的关系,即一个域名可能对应多个IP地址, 用户访问时,只会被导向其中一个。
所以,通过DNS查询IP地址是必要的。那DNS到底是怎么工作的?
简单举个例子来说明DNS的工作流程,就用为例吧:
com被称为”顶级域名“(top-level domain);
baidu和被称为”次级域名“(second-level domain);
www被称为主机名, 也叫做“三级域名”。
常见的域名往往只显示了三个层级, 比如上面所说的, 所以平时都省略了。
实际上应该是:
因此,域名实际上是一个拥有四个层级的层级结构,即:
主机名.次级域名.顶级域名.根域名,也就是host.sld.tld.root
DNS解析域名时就是按照层级结构, 从根域名开始逐级向下分级查询,比如咱们来查查。
首先访问根域名服务器, 查询.com(顶级域名)由哪一个顶级域名服务器维护;
根据返回结果, 访问顶级域名服务器, 查询.baidu(次级域名)由哪一个次级域名服务器维护;
根据返回结果, 访问次级域名服务器, 查询地址;
上述的查询流程是由本地的DNS服务器完成, 而并非本地主机。
本地主机通过浏览器访问一个域名时:
首先会查询本地主机的/etc/hosts文件, 查看是否进行了域名和IP映射自定义设置 (比如在/etc/hosts文件中将时访问的将是本地主机)
如果没有相应的自定义设置, 则会访问本地DNS服务器。
本地DNS服务器的IP地址可查看/etc/resolv.conf文件
本地DNS服务器会先查看本地缓存, 是否有对应域名和IP的映射,如果有则直接返回给本地主机,如果没有则进行上述查询流程。
02 DNS根服务器又是什么?
DNS 根服务器,是负责 DNS 和整个 Internet 功能的名称服务器,它们是确定任何域名名称的第一步,DNS可以将域名转换为 IP 地址。
根区是顶级域的全局列表,它包含通用顶级域(.com、.net、.org)、国家代码顶级域(.no、.se、.uk)和国际化的顶级域名,即以各国本地字符编写的 ccTLD,根区来自互联网号码分配机构 (IANA),它是互联网名称与数字地址分配机构 (ICANN) 的一部分。
域名到 IP 地址的映射是使用 DNS 区域以分层顺序完成的,根服务器为根区域提供服务,根区域位于层次结构的顶部并发布根区域文件,根区域文件又包含所有 TLD 授权服务器的资源记录。
因此,它们可以通过两种方式工作:
直接响应对根区域中的此资源记录的请求
将请求转发到所请求 TLD 的适当名称服务器
尽管在后一种情况下它们不直接参与名称解析,但根服务器位于整个 Internet 基础结构的根目录中,没有它们,你今天所了解和使用的大部分网络都将无法使用。
目前全球共计拥有13台DNS服务器,其中一台主根服务器在美国,由美国互联网机构运作。其余12台根服务器为辅助根服务器,有9台同样在美国,还有2台在欧洲,1台在亚洲。
由于本地 DNS 基础设施的限制,它使用的是 32 字节 IPv4,IP 地址必须对应一个数据包,当时数据包限制为 512 字节,所以每个IPv4地址是32位,其中13位是416字节,剩下的96字节是协议信息。
起初,13 个 IP 地址中的每一个都有一个服务器,每个 IP 地址赋予一个服务器集群,使用广播路由创建了一个由全球数百台服务器组成的网络。
这有助于平衡去中心化并确保可靠性,即使其中一个根服务器由于 DDoS 攻击或其他类型的 DNS 攻击也可以保证网络的可用性。
2016年推出“雪人计划”之后,全球16个国家,将会完成25台IPv6根服务器建设,也就意味着将来会拥有更多的根服务器。
为啥这么多根服务器,没有一台是中国的?
因为,原先的DNS服务器所包含协议,没有这么强大的能力单独分给中国一台。
也就是说,由于技术能力有限,全球13台根服务器,没有办法分给中国,这也就意味着,曾经我国在DNS根服务器领域的确是四面楚歌。
当然,在中国,还有26个根域名服务器节点:
北京市I、L、J、K、F
香港特别行政区A、I、H、F、F、E、J
台北市I、E、F、F、K、L
澳门特别行政区E、F
上海市L
杭州市F
郑州市L
武汉市L
西宁市L
贵阳市K
但是,这并不意味着未来中国的根服务器没有发展空间,毕竟,我国已经在IPv6根服务器中占据了一席之地。
随着国家对ipv6的支持,中国在ipv6网络建设上已经有了惊人的速度。随之而来的ipv6根DNS服务器中,中国拥有4台服务器,其中,一台为主根,其他三台为辅根。
所以,未来在根服务器领域中,必定会有中国的位置。
03 6个好用的DNS服务器,哪个是你的菜?
01 阿里 DNS (Alidns)
这组 DNS 是由阿里巴巴提供的,国内连通性还是不错的,海外部分地区连通性不是特别好,具体可以测试一下。
阿里 DNS 同时提供了 IPv4/IPv6 DNS 和 DoT/DoH 服务。
IPv4:
223.5.5.5
223.6.6.6
IPv6:
2400:3200::1
2400:3200:baba::1
DoH 地址:
DoT 地址:
02 腾讯 DNS (DNSPod)
由 DNSPod 提供的公共免费 DNS,后来 DNSPod 被腾讯(Tencent)收购,现在属于腾讯公司所有,稳定性和连通性也是不错的,经测试海外也可以使用。
DNSPod 除了 IPv4,现在同时支持 IPv6 DNS 和 DoT/DoH 服务。
IPv4:
119.29.29.29
IPv6:
2402:4e00::
DoH 地址:
DoH (国密 SM2,基于腾讯云政企国密解决方案) 地址:
DoT 地址:
dot.pub
03 Google Public DNS
Google Public DNS 是最流行的免费DNS服务器之一,它的服务器托管在全球各地的数据中心,一旦连接到他们的IP地址,它会自动分配距离最近的服务器,能够为不同地区的人们都提供稳定和快速的访问体验
谷歌DNS拥有非常好记的IP地址 8.8.8.8,通过将你的默认DNS改为谷歌的公共DNS服务器,你可以拥有更快的浏览速度和更高的安全性,而且它提供了两个DNS服务器地址,你可以分别设置为自己的首选和备用DNS服务器
地址:
8.8.8.8
8.8.4.4
04 360 安全 DNS
360 提供的 DNS 服务,只提供了 IPv4 和 DoT/DoH 服务。
针对中国电信/铁通/移动的 IPv4:
101.226.4.6
218.30.118.6
针对中国联通的 IPv4:
123.125.81.6
140.207.198.6
DoH 地址:
DoT 地址:
中国电信 IPv6 DNS
如果用中国电信的宽带应该会自动分配这两个IP
240e:4c:4008::1
240e:4c:4808::1
中国联通 IPv6 DNS
如果用中国联通的宽带应该会自动分配这两个IP
2408:8899::8
2408:8888::8
中国移动 IPv6 DNS
中国移动宽带自动分配的两个IP
2409:8088::a
2409:8088::b
114DNS
114.114.114.114
114.114.115.115
05 百度 DNS
中国最大的搜索引擎百度提供的公共 DNS,经测试海外连通性也是不错的,暂时百度只提供了一组 IPv4 和 IPv6 DNS 地址。
IPv4:
180.76.76.76
IPv6:
2400:da00::6666
06 CNNIC DNS
是由中国互联网信息中心 CNNIC 提供的免费公共 DNS,同时支持 IPv4 和 IPv6。
IPv4:
1.2.4.8
210.2.4.8
IPv6:
2001:dc7:1000::1
整理:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部