如果我们在上网的时候想要访问另一台机器上的内容,我们通常只需要直接输入一串地址,例如:www.upyun.com,就可以准确的访问到我们想要访问的网站.但实际上,这只是一个方便我们记忆的字符形式的网络标识符。真正让我们的机器与另一台机器通信的是IP地址。只是IP地址输入或记忆起来很麻烦,于是域名系统诞生了。那么域名如何连接到那个服务器的IP呢?这和我们今天说的域名系统DNS有关。什么是域名系统?因为一个有意义的名字可以代表主人的账号、工作性质、所属地区和组织等,便于记忆和使用。因此,用户更倾向于使用名字来标识主机,DNS就是为这种需要而开发的。DNS代表域名系统。系统将域名(example.com)翻译成实际的IP地址。DNS的逻辑结构是一个层次化的域名树。域名树的根由因特网网络信息中心(InterNIC)管理,称为“根域”。根域由句点“.”表示,但通常被省略。需要注意的是,全球只有13台IPv4根域名服务器。根域下面是顶级域(TLD),分为国家级顶级域(ccTLD)和通用顶级域(gTLD)。国家顶级域名使用缩写的国家代码,例如“cn”代表中国。通用顶级域名就是我们常见的com/net/org等。顶级域名下面是二级域名,是正式向组织和个人注册的唯一名称。例如www.upyun.com中的upyun就是友拍云注册的域名。二级域名下,机构还可以划分子域名供各分支机构使用。但标准规定域名的长度通常不超过63个字符,最大不能超过255个字符。当然,DNS不仅可以指向IP地址,还支持其他形式的记录。常见的DNS记录形式有:A记录:域的IPv4地址的A记录。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传播的一部分,需要一段时间才能生效。还要注意不要将DNSTTL设置为0,因为数字0在标准中没有定义,它可能会导致DNS消息被忽略或拒绝。如果使用阿里云DNS修改域名的解析记录,最终生效时间取决于当地运营商DNS服务器的缓存刷新时间,一般等于设置解析时的TTL时间。例如分辨率设置中的TTL值为10分钟,则修改后的分辨率将在10分钟内全局生效。如果修改了DNS服务器,生效时间取决于该域名DNS服务器名在本地DNS缓存中的TTL时间,例如“.com”的顶级域名为48小时,而“..cn"是24小时。由于不同顶级域DNS服务器的TTL时间不同,理论上域名DNS服务器全局解析生效最长需要48小时。ISP(互联网服务提供商)影响DNS传播持续时间的另一个因素是所使用的互联网服务提供商(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的路由树
