头图

DNS 系列(一):为什么更新了 DNS 记录不生效?

我们在上网时如果想要访问到另一台机器上的内容,通常只需要直接输入一串地址,例如: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.h...),可以快速查出不同地区不同网络下域名解析的速度,及域名 DNS 信息。

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

推荐阅读

什么是走索引?

关于 GIN 的路由树


云叔
-- 隐于云端,静闻天籁 --

又拍云是专注CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商。

5.7k 声望
4.6k 粉丝
0 条评论
推荐阅读
一文读懂 Kubernetes 存储设计
在 Docker 的设计中,容器内的文件是临时存放的,并且随着容器的删除,容器内部的数据也会一同被清空。不过,我们可以通过在 docker run 启动容器时,使用 --volume/-v 参数来指定挂载卷,这样就能够将容器内部的...

云叔_又拍云阅读 323

封面图
JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...

jenemy46阅读 5.9k评论 12

从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...

乌柏木66阅读 6.1k评论 16

再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...

libinfs39阅读 6.3k评论 12

封面图
从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...

乌柏木43阅读 7.3k评论 6

CSS 绘制一只思否猫
欢迎关注我的公众号:前端侦探练习 CSS 有一个比较有趣的方式,就是发挥想象,绘制各式各样的图案,比如来绘制一只思否猫?思否猫,SegmentFault 思否的吉祥物,是一只独一无二、特立独行、热爱自由的(>^ω^&lt...

XboxYan42阅读 2.9k评论 14

封面图
从零搭建 Node.js 企业级 Web 服务器(二):校验
校验就是对输入条件的约束,避免无效的输入引起异常。Web 系统的用户输入主要为编辑与提交各类表单,一方面校验要做在编辑表单字段与提交的时候,另一方面接收表单的接口也要做足校验行为,通过前后端共同控制输...

乌柏木33阅读 6.1k评论 9

又拍云是专注CDN、云存储、小程序开发方案、 短视频开发方案、DDoS高防等产品的国内知名企业级云服务商。

5.7k 声望
4.6k 粉丝
宣传栏