从理论到实践,全方位认识DNS(实践篇)

理论篇我们基本了解了DNS的整个协议原理,但是可能还会有着下面的疑问:

  1. 为什么我想申请的域名都没了?
  2. DNS 域名还要备案,这是为什么啊?
  3. 如何将刚申请的域名绑定到自己的网站呢?
  4. 怎么才能看到那些在背后默默给我解析的域名服务器呢?
  5. 他们说用一个什么文件就可以访问好多好多不存在的网站,是真的吗?
  6. 可信任的域名服务器是怎么一回事,难道有些域名服务器会做坏事?
  7. 怎么知道我现在用的域名服务器有没有使坏呢?
  8. ……

我不准备一个一个地去回答这些问题,不过相信我,读完本文,对于上面问题的答案你会有一个清晰的认识,并且可以解决其他各种各样关于 DNS 方面的问题。

Read More

从理论到实践,全方位认识DNS(理论篇)

对于 DNS(Domain Name System) 大家肯定不陌生,不就是用来将一个网站的域名转换为对应的IP吗。当我们发现可以上QQ但不能浏览网页时,我们会想到可能是域名服务器挂掉了;当我们用别人提供的hosts文件浏览到一个“不存在”的网页时,我们会了解到域名解析系统的脆弱。

然而关于DNS还有一大堆故事值得我们去倾听,去思考。

DNS 源起

要想访问网络上的一台计算机,我们必须要知道它的IP地址,但是这些地址(比如243.185.187.39)只是一串数字,没有规律,因此我们很难记住。并且如果一台计算机变更IP后,它必须通知所有的人。

显然,直接使用IP地址是一个愚蠢的方案。于是人们想出了一个替代的方法,即为每一台计算机起一个名字,然后建立计算机名字到地址的一个映射关系。我们访问计算机的名字,剩下的名字到地址的转换过程则由计算机自动完成。

hosts映射

早期,名字到地址的转换过程十分简单。每台计算机保存一个hosts文件,里面列出所有计算机名字和对应的IP地址,然后定期从一个维护此文件的站点更新里面的记录。当我们访问某个计算机名字时,先在hosts文件找到对应的IP,然后就可以建立连接。

Read More

知其所以然之永不遗忘的算法

相信大部分同学曾经都学习过快速排序、Huffman、KMP、Dijkstra等经典算法,初次学习时我们惊叹于算法的巧妙,同时被设计者的智慧所折服。于是,我们仔细研读算法的每一步,甚至去证明算法的正确性,或者是去尝试优雅地实现这些算法。总之,我们会花费很大的时间精力去理解这些智慧的结晶。

然而,现在对于这些经典的算法你仍然了然于胸吗?就算现在你仍然记得这些算法的步骤,你敢确保一年后、十年后自己不会忘记?我想没有多少人敢保证吧。

我们当然希望自己掌握一个算法后,就永远不会忘记,最好还能举一反三,利用算法中的思想去解决新的问题。然而,现实与美好的愿景往往是背道而驰,不要说举一反三,我们甚至经常忘记那些算法本身。

背算法与设计算法

为什么会这样?简单来说,因为我们从来就没有真正掌握过这些算法,我们只不过是在背诵别人发明的算法,就像我们背诵历史书上的那些历史事件一样,时间久了自然会慢慢遗忘。

Read More