我们在上网时如果想要访问到另一台机器上的内容,通常只需要直接输入一串地址,例如:www.upyun.com,就能够准确访问到自己想要访问的网站。但是实际上这只是方便我们记忆的字符形式网络标识,真正让我们的机器和另一台机器进行沟通的是 IP 地址。只不过 IP 地址无论是输入还是记忆都非常麻烦,因此才诞生了域名系统。那么域名是怎么连接到那个服务器的 IP 呢?这就和我们今天要说的域名系统 DNS 有关了。

DNS 是什么?

因为有意义的名字可以表示主机的账号、工作性质、所属的地域和组织等,从而便于记忆和使用。所以用户会更倾向于用名字来标识主机,DNS 就是为这种需要而开发的。DNS 代表域名系统(Domain Name System)。该系统会将域名(example.com)翻译成实际的 IP 地址。

DNS 的逻辑结构是一个分层的域名树,由 Internet 网络信息中心(InterNIC)管理着域名树的根,称为“根域”,根域用句号“.”表示,不过这个通常是省略的。需要注意的是全世界一共只有 13 台 IPv4 根域名服务器。

根域下面是顶级域(TLD),分为国家顶级域(ccTLD)和通用顶级域(gTLD)。国家顶级域使用国家和地区缩写代码,例如“cn”代表中国。通用顶级域就是我们常见的 com/net/org 等。

顶级域下面是二级域,这是正式注册给组织和个人的唯一名称,例如 www.upyun.com 中的 upyun 就是又拍云注册的域名。在二级域之下,组织机构还可以划分子域,用于各分支部门使用。但是标准规定,一个域名的长度通常不超过 63 个字符,最多不能超过 255 个字符。

当然了,DNS 不仅仅能指向 IP 地址,同时还支持其他形式的记录。常见的 DNS 记录形式有:

  • A 记录:域的 IPv4 地址的记录。

  • AAAA 记录:域的 IPv6 地址的记录。

  • CNAME 记录:别名,将一个域或子域转发到另一个域,不提供 IP 地址。

  • MX 记录:将邮件定向到电子邮件服务器。

  • TXT 记录:可使管理员在记录中存储文本注释。

  • NS 记录:存储 DNS 条目的名称服务器。

一个有特色的域名,可以让用户将公司品牌“深深印在脑海里”。尽管域名可能是永恒不变的,但记录指向的地址及使用的 DNS 服务器却会因为需求经常变动。有时我们也会遇到修改了 DNS 记录后,实际访问到的地址却没有更新的情况,这就涉及到了 DNS 传播。

什么是 DNS 传播?

一般我们对网站的域名解析记录或 DNS 服务提供商进行更改后,全球所有的服务器都需要一段时间才能采用新的记录值,这段时间可能是几小时,也可能是几天,这个过渡阶段就是 DNS 传播。

DNS 传播因 DNS 服务器的负载情况而异。服务器越旧所需要更新时间就越长,因此在过渡期间,会出现其他提供商已经使用了新的地址,但一些旧服务器的服务商可能还未更新的。这是因为持续查询新的地址会导致负载过高,所以 DNS 服务器不会将更新信息临时存储在缓存中,只有当所有服务器都更新了此缓存,才会在所有地方同步上新新地址。

除了服务器负载,还有一些因素也会影响 DNS 传播。

影响 DNS 传播的因素

DNS 区域和 TTL 值

DNS 被分成许多不同的区域,是 DNS 命名空间的一部分,由特定组织或管理员加以管理。区域文件是存储在 DNS 服务器中的纯文本文件,它包含区域的实际表示,和区域内每个域的所有记录。

我们可以为域名区域文件中的每个 DNS 设置 TTL。TTL 代表“生存时间”,是服务器缓存 DNS 信息的时间段。它可以定义设置临时缓存、存储多久以及何时进行更新。TTL 值对于 DNS 传播是很关键的,如果 TTL 值为 24 小时,则更改后需要 1 天才能生效。当然,为了更新可以更快生效,我们可以调整 TTL 值。但是,此调整必须在更新之前进行,因为调整 TTL 也属于 DNS 传播,也需要一段时间才能生效。另外注意切勿将 DNS TTL 设置为 0,因为标准中没有定义数字 0,它可能会导致 DNS 信息被忽略或拒绝。

如果使用云解析修改域名的解析记录,最终生效时间取决于各地运营商的 DNS 服务器缓存刷新时间,一般情况下等同于设置解析时的 TTL 时间。例如解析设置中 TTL 值为 10 分钟,修改解析后将在 10 分钟内实现全球生效。

如果是修改 DNS 服务器,那么生效时间取决于本地 DNS 缓存的域名 DNS 服务器名称的 TTL 时间,例如“.com”顶级域是 48 小时,“.cn”是 24 小时。因为不同顶级域 DNS 服务器的 TTL 时间是不同的,所以理论上修改域名 DNS 服务器全球解析生效时间最长需要 48 小时。

ISP(Internet 服务提供商)

另一个影响 DNS 传播持续时间的因素是使用的 Internet 服务提供商(ISP)。ISP 会将 DNS 数据缓存在本地,每次请求是在缓存检索数据而非 DNS 服务器。这种做法的好处是响应更快,同时也减少了数据流量的产生。但是,这可能会对 DNS 传播产生影响。此外,一些 ISP 会直接忽略 TTL 设置,并且固定每两到三天才更新一次缓存记录。

服务器的位置

服务器的位置也会对 DNS 传播产生影响。记录的更改短时间内可以在就近的 DNS 服务器生效,但到世界另一端的服务器通常需要更久。因为不同的服务器需要一个接一个地通知对方记录有更改。而且就像第二条里提到的,由于一些服务器可能仅在特定的时间间隔内更新,这就导致全部更新会需要很长时间。

DNS 传播的时间

那实际的 DNS 传播需要多长时间?本地服务器通常会在几分钟或几小时内更新。但是,要让全球所有服务器都知晓这些更改,并使其生效可能需要相当长的时间,通常 1 至 2 天内才生效都是可能的。而且根据服务提供商的设置,还可能出现 72 小时之后才全部更新的情况。因此,当需要更改或切换记录时,提前安排 DNS 传播非常重要。

在某些情况下,DNS 传播会对网站的访问产生影响,这是没办法完全避免的,不过可以通过一些方法最小化持续时间。比如在更改 DNS 服务器之前,我们可以修改解析记录中的 TTL 值,将其设置得小一点。等TTL值更新后,再修改 DNS 服务器。不过就算未传播完,也不影响域名解析记录的修改。即便 DNS 服务器仍然是旧的,但是解析记录会实时更新,网站内容也会是最新的。

当然了,若解析记录修改之后,过了 TTL 时间发现还是访问到旧的记录,可以尝试清除一下本地 DNS 缓存。或本地修改为公共 DNS (114.114.114.114/8.8.8.8)后再试一下。

DNS 传播检查

如果没有工具来确定网站的 DNS 传播是否已完成。可以通过几种对本地的 DNS 进行 DNS 传播检查的方法来确认。例如,Windows、macOS 和 Linux 默认安装了 nslookup,它可以显示当前 DNS 服务器的解析状态。Dig 工具也是一个不错的选择。

除了本地查询,其他外部 DNS 检查需要通过选择随机服务器并在那里查询 DNS 信息来测试。由于服务器分布在世界各地,因此不能 100% 确定 DNS 传播已在所有地方完成,但至少可以确认大致的传播情况。例如,使用 Myssl 的 DNS 检测工具(https://myssl.com/dns_check.html#dns_check),可以快速查出不同地区不同网络下域名解析的速度,及域名 DNS 信息。

读到这里,大家是不是对 DNS 修改后不生效的问题有了答案呢?进行 DNS 服务器或与域名系统相关的更改时,还是要优先考虑到 DNS 传播。尽管可以通过 TTL 缩短传播时间,但由于一些不稳定因素,仍然需要一些时间才能使全球的每台服务器都更改为最新状态。

推荐阅读

什么是走索引?

关于 GIN 的路由树

DNS 系列(一):为什么更新了 DNS 记录不生效?的更多相关文章

  1. DNS 系列(二):DNS 记录及工作方式,你了解吗?

    在上一篇<DNS 系列(一):为什么更新了 DNS 记录不生效?>中,我们主要讲解了 DNS 和 DNS 传播,知道了网络通信主要通过 IP 地址来进行,而域名系统(DNS)则是保证用户在 ...

  2. DNS 系列(三):如何免受 DNS 欺骗的侵害

    互联网上每一台设备都会有一个 IP 地址,我们在访问网站或发送信息时,其实都是通过 IP 地址达成准确请求的.但是这个 IP 地址由很长一串数字组成,记忆起来相当困难,所以我们创造了更实用的域名来代替 ...

  3. <转>详解DNS的常用记录(下):DNS系列之三

    在上篇博文中我们介绍了DNS服务器中几种不可或缺的记录,包括A记录,NS记录和SOA记录.本篇博文中我们将继续为大家介绍DNS的另外几种常用记录,希望能对大家了解DNS有所帮助. 四 MX记录 MX记 ...

  4. <转>详解DNS的常用记录(上):DNS系列之二

    详解DNS的常用记录(上) 在上篇博文中,我们介绍了DNS服务器的体系结构,从中我们了解到如果我们希望注册一个域名,那么必须经过顶级域名服务器或其下级的域名服务器为我们申请的域名进行委派,把解析权委派 ...

  5. DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录

    相关学习资料 http://baike.baidu.com/link?url=77B3BYIuVsB3MpK1nOQXI-JbS-AP5MvREzSnnedU7F9_G8l_Kvbkt_O2gKqFw ...

  6. <转>揭秘DNS后台文件:DNS系列之五

    揭秘DNS后台文件 在前面的博文中我们介绍了DNS的体系结构,常用记录,还介绍了辅助服务器的配置,今天我们来介绍一下DNS服务器背后的几个文件.其实DNS服务器的工作完全依靠这几个文件,了解了DNS的 ...

  7. <转>配置DNS辅助服务器:DNS系列之四

    配置DNS辅助服务器   在前面的博文中,我们介绍了如何在DNS服务器中创建常用的DNS记录,本文中我们要为大家介绍如何配置DNS的辅助服务器,同时也要介绍一下和辅助区域类似的存根区域. DNS辅助服 ...

  8. <转>浅谈DNS体系结构:DNS系列之一

    浅谈DNS体系结构 DNS是目前互联网上最不可或缺的服务器之一,每天我们在互联网上冲浪都需要DNS的帮助.DNS服务器能够为我们解析域名,定位电子邮件服务器,找到域中的域控制器……面对这么一个重要的服 ...

  9. DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录(转)

    http://www.cnblogs.com/LittleHann/p/3828927.html 相关学习资料 http://baike.baidu.com/link?url=77B3BYIuVsB3 ...

随机推荐

  1. PAT练习——1094 The Largest Generation (25 point(s))

    题目如下: #include<iostream> #include<vector> #include<algorithm> using namespace std; ...

  2. 有意思的CVE-2022-0337复现

    前言 前两天在刷tw,看到了个比较有意思的一个CVE漏洞,价值奖励是10000美刀,比较好奇的是价值10000美刀的漏洞是什么样子的,漏洞利用就是需要在浏览器中进行用户交互才能触发该漏洞,但由于 Wi ...

  3. CAS如何解决ABA问题

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. CAS如何解决ABA问题 什么是ABA:在CAS过程中,线程1.线程2分 ...

  4. 在jupyterlab中实现实时协同功能

    1 简介 当你在使用jupyter时,有没有想象过如果我们可以把正在编写代码的jupyter界面共享给其他人,使得别人可以在其他地方实时看到与你同步的jupyter界面,这样一来无论是与他人沟通代码逻 ...

  5. zabbix 添加监控交换机温度item

    首先需要获取到交换机温度对应的OID,可以官方文档进行查询(多为私有OID),以盛科为例 官方文档查询到温度节点对于的OID为 10.0.3.102 1.3.6.1.4.1.27975.37.1.3. ...

  6. IE 浏览器将停止服务,这是真的吗?

    浏览器通常是指用来检索.展示以及传递 Web 资源信息的一种应用程序,它能将网页.图片.视频等等 Web 上的信息呈现给我们. 如果现在发起一个投票:"你觉得好用的浏览器是什么?" ...

  7. js循环调用axios异步请求,实现同步

    准备: const axios = require('axios'); // axios请求 const res = []; const arr = ["a", "b&q ...

  8. Linux详解(基础、环境配置、项目部署入门)

    Linux(CentOS 7)操作系统 消息队列(Kafka.RabbitMQ.RocketMQ),缓存(Redis),搜索引擎(ES),集群分布式(需要购买多台服务器,如果没有服务器我们就只能使用虚 ...

  9. plt.figure()的使用,plt.plot(),plt.subplot(),plt.subplots()和图中图

    参考:https://blog.csdn.net/m0_37362454/article/details/81511427 matplotlib官方文档:https://matplotlib.org/ ...

  10. 超详细干货!Docker+PXC+Haproxy搭建高可用强一致性的MySQL集群

    前言 干货又来了,全程无废话,可先看目录了解. MySQL搭建集群最常见的是binlog方式,但还有一种方式是强一致性的,能保证集群节点的数据一定能够同步成功,这种方式就是pxc,本篇就使用图文方式一 ...