前言

我们在上一篇说到,IP 地址的发明把我们纷乱复杂的网络设备整齐划一地统一在了同一个网络中。

但是类似于 192.168.1.0 这样的地址并不便于人类记忆,于是发明了 域名(Domain Name) 来帮助解决这样的问题。

对应的,我们也需要一个系统来帮助"翻译":

Part 1. DNS 是什么?

DNS (Domain Name System 的缩写) 的作用非常简单,就是根据域名查出对应的 IP 地址,你可以把它想象成一本巨大的电话本

换句话说,DNS 是将域名映射到响应 IP 地址的服务。

Part 2. DNS 是如何工作的?

DNS 是我们今天使用 Internet 的核心。

最新报告显示,2020 年第三季度有 3.71 亿个域名,如果没有 DNS 将其对应解析成对应的 IP 地址,我们将会在网络世界中迷路。

当宁想要使用手机打电话给某人,宁几乎不太可能背出确切的电话号码,而是直接使用此人的名字进行搜索和拨号。

当宁想要加载网站时,DNS 会执行类似的操作。

解析域名或者主机名需要经历几个不同的阶段。

在某些情况下,DNS 解析是一个一步就完成的过程,而某些情况下,则需要联系多个 DNS 服务器。

下图就展示了这一过程必要的步骤,并且没有考虑浏览器缓存:

过程可能有些复杂,为了便于理解,我们在进一步说明之前需要先说明两点:「DNS 服务器和域名的分级」 以及 「DNS 缓存」

Part 3. 域名和 DNS 服务器的分级

域名的分级

我们日常上网输入的网址,比如:https://www.google.com,其实可以拆成几个部分看待:

默认支持的服务类型(HTTP/ HTTPS)、主机名(www)、端口号(80)、默认文档(index.html)是可以省略的,所以以上网址可以省略为:google.com

严格来说,google.com 才被称为域名(全球唯一)www 是主机名,对应着一种服务,google.com 域名下不同的主机服务器,可以提供很多不同的服务:

wwwblog 等很多服务可以部署在同一台服务器上,而一台服务器独占着一个 IP 地址,可见,域名和 IP 地址的对应关系可以是多对一的,或者一对多(负载均衡),也可以一对一

所有的域名都有一个的概念,所以整个互联网的域名空间看起来会是这样:

DNS 分级

把全世界所有的电话号码存储在同一个通讯录里面既不现实也效率低下。

DNS 也是类似,对应域名空间,DNS 也有类似的结构:

整个域名系统采取分布式存储

全世界根域名服务器总共有 13 个,其中 10 个在美国,英国瑞典各 1 个,日本 1 个:

这是逻辑上的数量,这 13 个根域名器服务器背后其实还是有很多台物理的服务器在工作。

根域名服务器只负责管理顶级域名服务器(Top Level Domain,简称 TLD),记录所有 TLD 的位置。

而 TLD 则对应管理着所有注册在当前顶级域名下的所有权限服务器,也就是真实提供服务的服务器的真实 IP 地址。

这有点儿类似于我们真实的通讯录,比如我们想要给 香克斯 打电话:

可以这样想象:全世界的域名被根域名服务器逻辑的统一在一个通讯录中,而根域名服务器就像右边的导航一样,存储着不同标识对应列表的位置信息;

而这些标识类似于顶级域名服务器,存储着注册其下所有的权限服务器(比如 google.com 对应的服务器)信息;

只有查询权限服务器,你才能拿到详细的 IP 地址(不考虑缓存的情况下);

Part 4. 为什么需要 DNS 缓存?

通过上面通讯录的例子,我们已经足够理解 DNS 查询的主要过程了:(再来看一眼)

但实际上,真正访问 DNS 服务器之前,我们会在多个地方缓存域名与 IP 之间的对应关系:

  1. 这样可以减少对 DNS 服务器的访问,减缓 DNS 服务器的访问压力;
  2. 这样也能够加快域名解析的过程;

涉及 DNS 的地方就会有缓存,包括浏览器、操作系统、本地 DNS 服务器、路由器、ISP 提供的递归路由器、根域名服务器等,它们都会对 DNS 结果做一定程度的缓存。

但是,DNS 缓存也存在一些问题:

  1. DNS 更改刷新需要时间来传播,这意味着每一台 DNS 服务器缓存更新到最新的 IP 需要一段时间;
  2. DNS 缓存也是黑客潜在的攻击手段;

Part 5. 一次请求的详细过程

这一次我们来跟踪一次详细的过程,例如我们在浏览器输入网址 www.example.com 并回车:

  1. 查询浏览器缓存,有结果则返回;(如果你使用 Chrome 浏览器可以输入 chrome://net-internals/#dns 自行查看)
  2. 查询系统缓存,通常存在于 host 文件中,有结果则返回;
    • Mac:/etc/hosts
    • Windows:C:\Windows\System32\drivers\etc\hosts
  3. 本地 DNS 服务器,通常是路由器,有结果则返回,否则向上查询直连 ISP 的递归 DNS 服务器;
  4. 查询 ISP 提供的 「递归 DNS 服务器」,有缓存则返回,否则一直递归查询到 「根服务器」
  5. 「递归 DNS 服务器」「根服务器」 查询 .com 权威 DNS 服务器」 的地址;
  6. 「递归 DNS 服务器」.com 权威 DNS 服务器」 查询 example.com 所使用权威 DNS 服务器」 的地址;
  7. 「递归 DNS 服务器」example.com 所使用权威 DNS 服务器」 查询解析获得 DNS 记录并缓存
  8. 「递归 DNS 服务器」 向浏览器返回结果;
  9. 浏览器拿到 IP 地址并向 www.example.com 发送请求;(完毕)

结合上面的内容,我相信你已经对 DNS 如何工作不再陌生。

相关问题

为什么根 DNS 只有 13 台?

简而言之:由于历史和技术原因,对于 IPv4 来说,根 DNS 只能有 13 个。

不简而言之的简而言之

DNS 消息使用 UDP 协议进行传输,这规定了消息最大的长度在 512 字节(不包含 IP 头部、UDP 头部)。

有了最大长度限制之后,一个 UDP 协议传输的 DNS 响应能够返回的资源记录数量就是有限的。

要让所有的根服务器数据能包含在一个 512 字节的 UDP 包中,根服务器只能限制在 13 个。(事实上改进之后才能容纳 13 个,最开始也没有 13 个这么多)

(扩展阅读(下3))

当键入网址后,到网页显示,其间发生了什么?

本文涉及输入网址访问,这是自然而然会联想到的问题。但本文只是详细说明了 DNS 查询域名背后 IP 的过程。

该问题涉及浏览器原理、网络协议等细节问题,感兴趣可以戳这里(下4)

美国如果把根域名服务器封了,中国会从网络上消失吗?

美国拥有最多的根域名服务器,如果美国把根域名服务器封了,中国会从网络上消失吗?

答案是:不会。 因为虽然根不在我们手里,但是我们有镜像(备份)。

扩展阅读(下5)

后记

这一篇文章我们又进一步揭开了一点网络关于 DNS 一角的神秘面纱:

也是使用了 PPT 制作了动图帮助大家理解,希望大家能够有所收获。

后续也会继续跟大家一起学习计算机网络的基础知识,也会尝试着跟着后端学习路线图的脚步跟着大家一起学习进阶。

(完)

参考资料

  1. What Is A Domain Name System (DNS) & How Does It Work? - https://phoenixnap.com/kb/what-is-domain-name-system-works
  2. 域名报告 - https://www.verisign.com/assets/domain-name-report-Q32020.pdf
  3. 根域名服务器只有 13 台? - https://zhuanlan.zhihu.com/p/107492241
  4. 30张图解:当键入网址后,到网页显示,其间发生了什么? - https://zhuanlan.zhihu.com/p/113702574
  5. 美国如果把根域名服务器封了,中国会从网络上消失? - https://segmentfault.com/a/1190000023696737
  • 本文已收录至我的 Github 程序员成长系列 【More Than Java】,学习,不止 Code,欢迎 star:https://github.com/wmyskxz/MoreThanJava
  • 个人公众号 :wmyskxz,个人独立域名博客:wmyskxz.com,坚持原创输出,下方扫码关注,2020,与您共同成长!

Hi,这里是 我没有三颗心脏,2021,与您在 Be Better 的路上共同成长!

DNS 是什么?如何运作的?相关推荐

  1. DNS 教育訓練教程

    本课程目之目的主要在于让使用者了解网域名称及DNS的作用,能够设定一个基本的DNS服务 主要内容分为下列五个部分: 1.域名介绍:网域名称的概念及其应用方式的介绍 2.DNS基本概念及运作:DNS发展 ...

  2. 计算机网络的总体认知——互联网

    写在前面 本文参考视频:Youtube 原视频:资源指路 Github资源:资源指路 b站有翻译视频:资源指路 上篇文章:资源指路 上篇讲到,你的计算机和一个巨大的分布式网络连在一起,这个网络叫互联网 ...

  3. dns是指网络域名系统_域名系统(DNS)是Internet的骨干。 这就是全部的运作方式。...

    dns是指网络域名系统 by Nikolas O'Donnell 由Nikolas O'Donnell 域名系统(DNS)的工作方式以及如何使其变得更好. (How the Domain Name S ...

  4. 高速缓冲DNS相关配置详情

    1.DNS总揽 1)权威名称服务器 – 存储并提供某区域 ( 整个 DNS 域或 DNS 域的一部分 ) 的实际数据.权威名称服务器的类型包括: • Master : 包含原始区域数据.有时称作 &q ...

  5. 42岁著名黑客去世,曾拯救互联网:揭开索尼“罪行”、发现DNS漏洞

    子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一则噩耗席卷了黑客圈: 著名黑客丹·卡明斯基(Dan Kaminsky)于当地时间4月23日离世,年仅42岁. 我想现在无法再掩饰了.昨天, ...

  6. 在Windows平台架设DNS服务器

    ISC (Internet Systems Consortium) 在二零零七年八月二十七日宣布了 Bind 8 历史使命的终结.ISC 鼓励还在使用 Bind 8 的用户从安全方面考虑要迅速迁移到 ...

  7. ChinaDNS 结合DNSMasq防dns挟持

    ChinaDNS 与 DNSMasq 结合起来用,使其更加稳定并且可以支持 TCP 查询,防止dns污染和挟持,DNSMasq 作为主 DNS 服务端,将 ChinaDNS 作为 DNSMasq 的上 ...

  8. 超清晰的 DNS 原理入门指南

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 来源:8rr.co/7Num DNS 是互联网核心协议之一.不管是 ...

  9. windows如何添加本机dns记录_运维必看!超清晰的 DNS 原理入门指南

    来源:阮一峰的网络日志 作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2016/06/dns.html DNS 是互联网核心协议之一.不管是上网浏览,还是编程开发, ...

最新文章

  1. python使用matplotlib可视化、移除可视化图像X轴坐标轴的刻度线和标签( remove the default axis ticks and labels of x axis)
  2. 【错误记录】VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 ② | 删除交换空间 )
  3. jQuery Easing 动画效果扩展--使用Easing插件,让你的动画更具美感。
  4. Linux常用命令和服务器配置
  5. Hql中使用in参数
  6. SEO人生衔接后用户可随时随地同他的合作伙伴协同工作
  7. Android基础 写给新手的Android环境配置
  8. 如何成为一个C++高级程序员
  9. 传统高斯模糊与优化算法(附完整C++代码)
  10. java接口测试工具_接口模拟测试利器,moco server工具的介绍
  11. hibernate二级缓存作用、配置
  12. 详解Photoshop中标尺工具和参考线的使用方法
  13. 08cms php5.4,08CMS - 内容管理CMS - PHP开源项目 - 开源吧
  14. html怎么快捷复制粘贴,怎么快速复制粘贴文本?快速粘贴文本教程
  15. MAYA安装未完成,某些产品无法安装的解决方法
  16. mysql analyze_MySQL 案例:analyze,慢查询,与查询无响应
  17. 互联网产品设计思路参考
  18. 语言处理 之 melgan
  19. Nginx性能优化(十八)
  20. 网站打开很卡是为什么?

热门文章

  1. Python练手小项目(8)判断三条线能否围成三角形
  2. 域名备案与空间备案有什么关系吗,域名备案又是怎么回事?
  3. 华为电脑管家下载(非华为电脑)
  4. ADM485ANZ ADI
  5. 计算机硬盘类型及特点,硬盘有几种类型其特点分别是什么
  6. html页面中常见的特殊符号,收集的web页面html中常用的特殊符号大全分享
  7. 【代码审计】任意文件读取漏洞实例
  8. 寻找几种常见的推广模式
  9. 牛客网-4 腾讯2016笔试题
  10. vue相关的面试题应该怎么答