【网络篇——DNS】

DNS是互联网上的命名系统,用于将域名转换为IP地址。它采用分层、分布式结构,具有高可靠性和高效性,通过缓存和递归查询机制提高查询速度。DNS协议支持TCP和UDP,域名注册由ICANN管理。解析过程包括本地缓存、hosts文件查询、递归查询等步骤,智能DNS解析能根据用户位置返回最佳IP。

1. 概念
DNS全称为Domain Name System,即域名系统,是互联网上的一种命名系统。它的主要功能是将域名转换为IP地址,以便于网络之间的通信。

2. 设计目的
DNS的设计目的是为了解决互联网上的命名问题。由于人们难以记住大量的IP地址,因此DNS将这些IP地址与易于识别的域名进行映射,使人们可以通过域名来访问对应的网站或服务。

3. 特点
分层结构:DNS采用分层的结构设计,每个层次的域名系统都被划分为若干个区域,这样可以实现分而治之的管理。
分布式数据库:DNS中的域名信息被分散存储在数以百万计的DNS服务器中,这些服务器可以根据需要相互交换和更新信息。当把一个域委派给一个nameserver后,这个域下的管理权都交由此nameserver处理。这种设计一方面解决了存储压力,另一方面提高了域名管理的灵活性
高可靠性:DNS采用冗余机制,即在不同地理位置和网络环境下部署多台服务器,确保即使某些服务器发生故障,其他服务器仍能正常工作,保证了整个系统的可靠性。
高效性:DNS采用了缓存机制,当一台DNS服务器查询某个域名时,结果会被缓存到本地,下次再查询相同的域名时就可以直接返回结果,提高了查询效率。

4. 协议
协议支持 TCP 和 UDP,最早的时候,DNS 的 UDP 报文上限大小是 512 字节, 所以当某个 response 大小超过512 (返回信息太多),DNS 服务就会使用 TCP 协议来传输。后来 DNS 协议扩展了自己的UDP 协议,DNS client 发出查询请求时,可以指定自己能接收超过512字节的 UDP 包, 这种情况下,DNS 还是会使用 UDP 协议。

5. 域名
像 com 这样的顶级域名,由 ICANN (互联网名称与数字地址分配机构)严格控制,是不允许随便创建的。顶级域名分两类:通用顶级域名常见的如.com、.org、.edu等;国家顶级域名我国的.cn, 美国的.us等。
注册域名需要找域名注册商,比如说我想注册 hello.com,那么要找com域名注册商注册hello域名。com的域名注册商不止一家, 这些域名注册商也是从ICANN 拿到的注册权。
域名注册商都会自建权威域名解析服务器,比如在godaddy上申请一个.com下的二级域名,你并不需要搭建nameserver, 直接在godaddy控制中心里管理你的域名指向就可以了, 原因就是你新域名的权威域名服务器默认由域名注册商提供。当然你也可以更换,比如从godaddy申请的境外域名,把权威域名服务器改成DNSPod,一方面加快国内解析速度,另一方面还能享受DNSPod 提供的智能解析功能。

6. 解析流程
标准 glibc 提供了 libresolv.so.2 动态库,我们的应用程序就是用它进行域名解析(也叫 resolving)的, 它还提供了一个配置文件/etc/nsswitch.conf来控制 resolving 行为,配置文件中最关键的是这行:

hosts: files dns myhostname

它决定了 resolving 的顺序,默认是先查找 hosts 文件,如果没有匹配到,再进行 DNS 解析。
① 输入域名:用户在浏览器中输入域名,如www.example.com。
② 查询本地DNS缓存:本地计算机会先查询本地DNS缓存中是否存在这个域名所对应的IP地址,如果存在则直接返回对应的IP地址。
③ 查询本地hosts文件:如果本地DNS缓存中不存在对应的IP地址,则会查询本地hosts文件中是否存在与输入域名对应的IP地址,如果有,则直接返回。
④ 查询本地DNS服务器:如果本地缓存和hosts文件中都没有找到对应的IP地址,则会向本地DNS服务器发送一个查询请求,询问它是否知道该域名对应的IP地址。
⑤ 递归查询:如果本地DNS服务器没有目标域名的映射关系,则会向根域名服务器发出查询请求,并沿着域名链逐级查询,直到找到最终的IP地址并返回给本地DNS服务器。
⑥ 缓存查询结果:本地DNS服务器从根域名服务器获取到目标域名对应的IP地址后,会将该结果缓存下来,便于下一次查询时加速速度。
⑦ 返回IP地址:本地DNS服务器将查询结果返回给用户的计算机,完成域名解析。

7. 递归解析服务器 vs 权威域名服务器
递归解析服务器和权威域名服务器的区别主要在于其所承担的责任和查询方式上。客户端直接访问的是递归解析服务器,递归解析服务器从根域名服务器开始递归查询,直到找到所需信息并返回给客户端;而权威域名服务器则是存储着某个域名的全部DNS记录,并根据其存储的信息返回查询结果。
递归解析服务器一般由 ISP(互联网服务提供商) 提供,除此之外也有一些比较出名的公共递归解析服务器, 如谷歌的 8.8.8.8,联通的 114,BAT 也都有推出公共递归解析服务器,但性能最好的应该还是你的ISP提供的,只是可能会有 DNS劫持的问题。

8. 缓存
由于整个解析过程非常复杂,所以 DNS 通过缓存技术来实现服务的鲁棒性。当递归nameserver 解析过 www.example.com 域名后,再次收到 www.example.com 查询时,它不会再走一遍递归解析流程,而是把上一次解析结果的缓存直接返回。并且它是分级缓存的,也就是说,当下次收到的是 www.chinaz.example.com 的查询时, 由于这台递归解析服务器已经知道 example.com 的权威 nameserver,所以它只要再向 example.com nameserver 发送一个查询 www.chinaz. 的请求就可以。
根域名服务器递归解析服务器是怎么知道根域名服务器的地址的呢?根域名服务器的地址是固定的,目前全球有13个根域名解析服务器,这13条记录持久化在递归解析服务器中:rootnameserver配置
为什么只有 13 个根域名服务器呢,不是应该越多越好来做负载均衡吗?之前说过 DNS 协议使用了 UDP 查询, 由于 UDP 查询中能保证性能的最大长度是 512 字节,要让所有根域名服务器数据能包含在512字节的UDP包中, 根服务器只能限制在13个, 而且每个服务器要使用字母表中单字母名

9. 智能解析

智能解析,就是当一个域名对应多个 IP 时,当你查询这个域名的 IP,会返回离你最近的 IP。
由于国内不同运营商之间的带宽很低,所以电信用户访问联通的IP就是一个灾难,而智能 DNS 解析就能解决这个问题。
智能解析依赖 EDNS 协议,这是 google 起草的 DNS 扩展协议, 修改比较简单,就是在 DNS 包里面添加 origin client IP, 这样 nameserver 就能根据 client IP 返回距离 client 比较近的 server IP 了。国内最新支持 EDNS 的就是 DNSPod 了,DNSPod 是国内比较流行的域名解析厂商,很多公司会把域名利用DNSPod 加速, 它已经被鹅厂收购。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值