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 基本原理

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

加速和水平扩展 DNS 服务器

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

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

虽然这样能用了,但大佬还是觉得不行,不够快。于是又搞了几个负载均衡策略来提速。分别是基于权重轮询(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: 程序员的碎碎念

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

  1. 《数据竞赛入门讲义》下载,北航计算机硕士两年经验总结

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:阿水,北京航空航天大学,Datawhale成员 数据竞赛近几年在国 ...

  2. 北航学长的《数据竞赛入门讲义》分享:我是靠这些拿到冠军的

    数据竞赛近几年在国内发展迅速,参加数据竞赛对于参赛者来说可以锻炼数据分析,算法建模的能力,运气好的话还可以获得不菲的奖金:对于公司来说,也可以从众多优秀的方案中选取有价值的部分用于自己的生产,是一件互 ...

  3. 互联网协议入门及DNS原理入门

    互联网协议入门及DNS原理入门 互联网协议入门 作者: 阮一峰 日期: 2012年5月31日 我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信.上海的某一块网 ...

  4. python简单入门_Python简明入门教程

    本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数--整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数 ...

  5. python新手入门教程-Python简明入门教程

    本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数――整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数 ...

  6. 重视B/S架构系统的发展和开发设计理念

    重视B/S架构系统的发展和开发设计理念   随着网络技术的快速发展,b/s架构的系统也更加流行和突出.很多从c/s架构或者没有涉及B/S开发的程序员都普遍认为Web开发只是小菜一碟,而往往带着这种思想 ...

  7. OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  8. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  9. 简明python教程-Python简明入门教程

    本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数――整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数 ...

最新文章

  1. Linux 下使用命令行查看 內核版本 | 系統版本 | cpu 位數 | 內存使用
  2. MySQL Cluster 用户权限共享 (各sql节点同步)
  3. Neural Networks for Machine Learning by Geoffrey Hinton (1~2)
  4. Redis的内存回收机制和数据过期淘汰策略
  5. ashx获取input file 文件_前端战五渣学前端——FileReader预览本地文件
  6. 不会部署并调试SpringBoot源码?一看必会IDEA操作
  7. windows temp用户问题
  8. 网络转载 ! 不保证网站安全 谨慎!
  9. 安川机器人外部信号怎么接线_安川机器人通用输入输出信号定义.pdf
  10. aws ecs 理解元数据和mock本地测试环境
  11. 数学建模:预测性模型学习——灰色预测模型(GM(1,1)模型)
  12. WinRAR(去广告)中文繁体
  13. 【Linux防火墙】iptables基础用法及高级用法
  14. C305例会-电脑攒机
  15. Linux系统端口映射(路由转发)
  16. 墨菲定律 二八法则 马太效应 手表定理
  17. 《乔布斯传》经典摘录(一)
  18. 计算机可视化视景仿真,计算与仿真、三维设计、图像处理、视景仿真、4k视频剪辑工作站介绍2015版.pptx...
  19. 20万到100万年薪的算法工程师有什么区别?
  20. 小米2013招聘笔试题:朋友圈

热门文章

  1. 期权的隐含波动率—python方法求解
  2. QN – 全能看图插件
  3. 教程二:go语言windows gui界面开发之walk 控件学习第一节
  4. 软考 | 1.5新一代信息技术
  5. GO并发编程基础- 如何使用channel
  6. SI5351到货MSOP10/I²C可编程任意频率输出CMOS时钟发生器
  7. HSTS 防止网站劫持
  8. 计算机专业硬件,什么是计算机硬件?
  9. 【华为OD机试真题 python】竖直四子棋【2022 Q4 | 200分】
  10. python 实现链表