导语:如果昨天下午(1月21日)你想上网刷刷微博看看视频,那有点费事。几乎全中国的大网站都上不去了。实际上,这并不是因为你家的网络有什么毛病。看一下新闻就会知道,是国内互联网根域名服务器出现了问题,导致域名都被指向了一个错误的IP地址,进而影响到这些域名的访问。这具体是怎么回事?为什么根域名服务器的问题会有这么大的影响,这个服务器是何方神圣?
如果昨天下午(1月21日)你想上网刷刷微博看看视频,那有点费事。几乎全中国的大网站都上不去或者上着上着就“页面错误”了。实际上,这并不是因为你家的网络有什么毛病。看一下新闻就会知道,是国内互联网根域名服务器出现了问题,导致域名都被指向了一个错误的IP地址,进而影响到这些域名的访问。等等,为什么根域名服务器的问题会有这么大的影响,这个服务器是何方神圣?
要弄清这个问题,我们首先要知道域名解析服务(DNS)是如何工作的。一开始的时候,互联网上并不存在域名这种简单快捷的访问途径。想要访问千里之外的一个网站或者是一台服务器,使用的都是IP地址,也就是类似于65.49.2.178这样的一串数字。IP地址就像生活中的电话号码,可以精确地定位到某个特定的机器或服务。但是用着用着,人们就觉得实在是太不方便了。就像电话号码很难记住一样,想要靠脑袋记住大量网站的IP简直是天方夜谭。所以,DNS就承担起了“电话查号台”的工作,负责帮我们将简单好记的域名转化为正确的IP地址,免去了记忆“电话号码”的烦恼。只要我们知道DNS服务器的IP地址,就能查到其它所有网站的IP地址。所以我们在浏览器里输入域名的时候,访问的其实还是IP地址,只不过浏览器帮我们从DNS上查到了正确的IP地址,而我们平时却不知道这个过程。
但是所有人都去同一台DNS服务器上面查询,也会出现问题。想像一下,有成千上万的人同时向一个电话查号台打电话查询,会出现什么情况呢?少部分人打通了电话,而大多数则一直占线,查不到想要的电话号码。同时,全世界的电话号码都存在一个电话查号台里,查电话的过程也会非常缓慢。为了解决这两个问题,DNS做了这样两件事:首先,搭建许多DNS服务器,使它们构成树状结构。在查询的时候从根域名服务器开始,一层一层地查下去。其次,为每个区域分配一台本地域名服务器,由这台服务器负责向根域名服务器查询,由于本地域名服务器可以缓存,这也可以极大地减轻根服务器的负担。
所以,我们只需要知道本地域名服务器的IP地址,并给本地域名服务器“打电话”查询。在正常访问某个域名的时候,如果本地域名服务器恰好没有缓存,过程会是这样的:
小王给本地域名服务器“打电话”:你好,我想查询一下https://www.baidu.com对应的“电话号码”。
本地域名服务器接线员:请稍候。
接线员查询了手头的记录,发现没有https://www.baidu.com的IP地址,于是给根域名服务器“打电话”。
本地域名服务器接线员:根域名服务器你好,我想查一下https://www.baidu.com对应的“电话号码”。
根域名服务器接线员查阅了一下手头的记录:我手头没有具体的“电话号码”,但是我知道.com域名服务器上可以找到。我可以给你.com域名服务器的“电话号码”。
本地域名服务器接线员拿到.com域名服务器的“电话号码”,继续给它打电话。
本地域名服务器接线员:.com域名服务器你好,我想查一下https://www.baidu.com对应的“电话号码”。
.com域名服务器的接线员在手头的记录上依旧找不到具体的“电话号码”,于是告诉本地域名服务器接线员,baidu.com域名服务器上可以查到这个电话。
本地域名服务器接线员第三次拨通电话:baidu.com域名服务器你好,我想查一下https://www.baidu.com对应的“电话号码”。
baidu.com域名服务器接线员发现手里有这个域名对应的记录,就将https://www.baidu.com的正确“电话号码”告诉了本地域名服务器接线员。
最后,本地域名服务器接线员把这个正确的“电话号码”记到自己的本子上,再告知小王,才算完成了这次查询。
当下一次另一个用户小李给本地域名服务器“打电话”查询https://www.baidu.com的“电话号码”时,本地域名服务器接线员会发现自己手里的本子上已经有了上次小王查询时留下的记录。这次他就不需要兴师动众地给根域名服务器“打电话”了,只需要将自己本子上记录的“电话号码”告诉小李,就可以完成查询。当然,如果小李和小王的查询之间隔了很长时间,为了防止https://www.baidu.com的“电话号码”发生改变,本子上的这条记录会被当作无效记录,接线员还是会去向根域名服务器重新查询。
在了解了DNS的工作原理之后,为什么根域名服务器会有这么大的影响就显而易见了。即使有本地域名服务器的存在,归根结底,域名和IP地址的对应关系还是从根域名服务器提供的,本地域名服务器只起到一个缓存的作用。所以,一旦根域名服务器出现错误,所有想要解析域名的用户,最终拿到的都会是一个错误的IP地址。既然查号台告诉我们的是一个错误的电话,我们自然就打不通了。
昨天的这次事故,原因还不得而知。有可能是DNS服务器的内部故障,也有可能是由黑客攻击导致。但无论原因如何,DNS服务器对于整个互联网的重要程度已经显而易见,如何保护根域名服务器不受攻击,也会成为安全专家在今后需要特别重视的一个话题。