简明入门讲义——DNS架构是如何发展的

DNS 简史

远古计算机时期(1972~1989),联网的电脑还可以数的过来。后来,单靠人脑记忆 IP 地址不可靠,于是有南加州大学实验室大佬建了一个表格(实际是个 TXT),写一个程序,将服务器的名称和 IP 一一对应填进去。需要访问时,只需要填个名称,就可以通过表格映射一个 IP 地址访问了!

###################
# Mac 上的 hosts 示例
# cat /etc/hosts
###################
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost

# Added by Docker Desktop
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section

后来,其他实验室和大学的朋友纷纷表示这个有点东西,打电话让大佬把他们的服务器地址也加进去。大佬发现 HOSTS 文本越来越大,除了研究还要天天接电话,说好的偷懒不用记 IP,最后小丑竟是我自己

于是,聚集一群大佬提了几个草案,决定解决以往的单点、中心化、受限于单台服务器性能人工 HOSTS 文件改造为一个扩展性强而快的自动命名系统,于是域名系统(Domain Name System)的萌芽开始生长,随后的 1983 年,RFC 882、883 正式发布,域名系统正式诞生。

在伯克利大学,另一群大佬根据 RFC 做了一个的 Unix 实现,以自己的母校命名为 BIND 沿用至今。

DNS 基本原理

Source: http://www.slideshare.net/srikrupa5/dns-security-presentation-issa

当我们查询访问 Google,首先会查一下本地有没有记录或者 DNS 缓存,发现没有,随即发起一个递归查询(Recursion Query)向上级汇报。上级服务器收到后,发起一个迭代查询(Iteration Query),搞个类似 For 循环看看 Zone 文件有没有对应的资源记录RR,Resource Record)。就这样一级一级的递归、迭代,到了根域名服务器,终于找到了。更新一下各级的域名记录缓存,将 Google 的地址发回来,然后就可以访问了。

加速和水平扩展 DNS 服务器

然而进度条告诉我们事情并没有这么简单,因为 DNS 服务器每天的查询量实在是太大了。有句话说得好,技术跟不上时,流量来了都以为是 DDoS 攻击

根域名服务器的请求量太大,很快就扛不住,数据库有主备,DNS 服务器也整一个主次节点(Primary-Second次节点只读,全量复制主节点的数据。此外,还有一种缓存服务器(Caching servers)只缓存查询结果,不维护 Zone 数据文件 (是不是与我们今天很多 Web 服务器很像?)。

Wikipedia - Domain Name Space

虽然这样能用了,但大佬还是觉得不行,不够快。于是又搞了几个负载均衡策略来提速。分别是基于权重轮询(Weighted Round-Robin Based)、基于延迟(Latency-based)和基于地理位置(Geo-based)菜鸡表示看不懂但大受震撼。

基于权重轮询:简单的说,以往是简单的轮询,给几台 DNS 服务器,按顺序把请求发给能用的服务器。后来发现为了水平扩展,服务器的性能并不是每一台都一致。服务器 A 每秒搞定 100 条请求,服务器 B 才 25,B 表示根本忙不过来,于是运维指定一个权重 1 给 B,4 给 A,这样,大概每 4 轮才到一次 B,压力就平衡了

**基于延迟:**通过 Ping 等方式记录一次来回的时间,用户请求时优先到延迟低的服务器

**基于地理位置:**通过 IP 地址识别到所在地区,就近分配服务器来加速请求。甚至可以定制本地化内容,或者限制某些地区的访问。

DNS 污染

事情似乎到此为止了,而菜鸡们发现,有时候输入网址还是很慢,但查了对应域名的服务器 IP 是能访问的啊。直到有一天看到自己平时访问的页面出现莫名其妙的广告,才发现有些运营商是真的狗,把 DNS 污染了,指向了一个错的地址。

除了大骂一顿,对于普通的用户(企业可能会采用私有的 DNS 服务器 (Private DNS Server)),这时候可以手动添加我们要访问的域名和 IP 的映射填写到本地的 HOSTS 文件中,或者花点心思配几个口碑好的 DNS 服务器列表

没办法,免费的东西是最贵的,不能指望别人不作恶,否则交钱上网费还得替别人赚外快!

Ref

  1. DNS Architecture
  2. GeoLocation Routing
  3. DNS Architecture

WeChat Official Account: 程序员的碎碎念

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值