工具

简明入门讲义——DNS 域名系统

2021-05-23  本文已影响0人  FesonX

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. Amazon - GeoLocation Routing
  2. GeoLocation Routing
  3. DNS Architecture

WeChat Official Account: 程序员的碎碎念

上一篇下一篇

猜你喜欢

热点阅读