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

Posted sanyuanyanjin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从理论到实践,全方位认识DNS(实践篇)相关的知识,希望对你有一定的参考价值。

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


  1. 为什么我想申请的域名都没了?

  2. DNS 域名还要备案,这是为什么啊?

  3. 如何将刚申请的域名绑定到自己的网站呢?

  4. 怎么才能看到那些在背后默默给我解析的域名服务器呢?

  5. 他们说用一个什么文件就可以访问好多好多不存在的网站,是真的吗?

  6. 可信任的域名服务器是怎么一回事,难道有些域名服务器会做坏事?

  7. 怎么知道我现在用的域名服务器有没有使坏呢?

  8. ……


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


域名注册、绑定


首先明确一点,每个人都可以去注册域名。大多数时候我们希望去注册一个顶级域名(比如selfboot.cn, google.com等),那些二级域名毕竟不够好记(比如github托管博客的域名:username.github.io)。有的顶级域名(比如.tk域名)提供免费的一年域名试用,不过绝大多时候还是要为自己的域名付费的(一般是按年付费,也不是很贵)。要想去注册域名,首先得找到域名注册商,国内的比较著名的有DNSpod等,国外的有godaddy等。相信注册过域名的人都知道绝大多数我们能想到的自己喜欢的域名都已名花有主了,只剩那些不是那么惹人关注的域名供我们选择。所以,注册域名时,发现自己每想到一个域名都显示被人注册后,那太正常不过了,说明你的品味比较正常。


这里一点个人建议,选中一个域名后不要轻易去改了,因为换域名成本挺高的(我猜现在就算给淘宝一千万,它也不会换另成一个域名吧)。所以,最好不要去用免费的域名,因为指不定啥时候就不让你用了。你应该相信这么一个观点:天下没有免费的午餐。拓展一下就是,掏钱买服务,心里踏实。


接下来你可能会希望将自己的站点或者博客挂在自己选中的域名下,这其实很简单,只需要找到一个提供域名解析的服务商,然后填写相应的域名解析记录。大多时候,你注册域名的服务商都会免费提供域名解析服务。


现实中,大部分人可能会拥有个人博客,以前我们都是依赖一个博客平台(如CSDN),或者是买一台VPS托管自己的博客。不过自从Github推出了Blog服务,好多程序员都转而将博客托管在上面。Github Blog支持绑定个人域名,并提供了详细的绑定文档:Adding a CNAME file to your repository。假设你的博客已经可以通过 username.github.io 访问,接下来只需要用 CNAME 告诉Github你的博客绑定了哪个域名(比如说是 selfboot.cn),然后在域名解析商那里添加解析记录即可,下图是我个人博客在DNSpod的解析记录:



现在当我们访问 selfboot.cn 时,DNSpod就会将请求解析到 Github 提供的 IP 地址上。之后 Github 上面的博客托管服务器在所有用户的 CNAME 记录中,找到本次请求的域名对应的博客项目地址,比如说是 xuelangZF.github.io,然后返回博客内容。


域名解析


我们都知道一个域名的解析过程中,可能会有多台域名服务器给我们帮助,那么我们怎么能看到这些背后的功臣呢?先介绍两个常用的关于DNS的命令。


dig, nslookup


dig(Domain Information Groper), 是 UNIX/BSD 系统自带的 DNS 诊断工具,使用十分灵活、方便。


查询 selfboot.cn 的A记录,并返回简短的结果:


$ dig selfboot.cn -t A +short

192.30.252.153

192.30.252.154


用 dig 还可以查询某一 ip 对应的域名,如下:


$ dig -x 192.30.252.153 +short

pages.github.com.


这里返回的是pages.github.com,因为当你访问博客地址 selfboot.cn 时,其实是Github的pages 服务器(域名是:pages.github.com)在后台返回该博客内容的(根据 CNAME 确定返回哪个博客)。


nslookup 也是一个 DNS 诊断工具,几乎所有平台都自带该工具,使用也很简答,可以用 man 查询手册。


解析路径查询


接下来用 dig 命令查看从根域名到指定域名中间可能经过的所有域名服务器,使用 +trace 选项即可。


dig selfboot.cn +trace @8.8.8.8

; <<>> DiG 9.8.3-P1 <<>> selfboot.cn +trace @8.8.8.8

;; global options: +cmd

. 474418 IN NS j.root-servers.net.

. 474418 IN NS g.root-servers.net.

......

. 474418 IN NS l.root-servers.net.

. 474418 IN NS m.root-servers.net.

;; Received 496 bytes from 8.8.8.8#53(8.8.8.8) in 12 ms

cn. 172800 IN NS a.dns.cn.

......

cn. 172800 IN NS e.dns.cn.

cn. 172800 IN NS ns.cernet.net.

;; Received 292 bytes from 2001:500:1::803f:235#53(2001:500:1::803f:235) in 382 ms

selfboot.cn. 86400 IN NS f1g1ns2.dnspod.net.

selfboot.cn. 86400 IN NS f1g1ns1.dnspod.net.

;; Received 83 bytes from 203.119.25.1#53(203.119.25.1) in 816 ms

selfboot.cn. 14400 IN A 192.30.252.153

selfboot.cn. 14400 IN A 192.30.252.154

selfboot.cn. 600 IN NS f1g1ns1.dnspod.net.

selfboot.cn. 600 IN NS f1g1ns2.dnspod.net.

;; Received 125 bytes from 115.236.137.40#53(115.236.137.40) in 31 ms


论实践各个环节的重要性:准备执行反馈

聚类算法从理论到实践

理论与实践的碰撞,个人与团队的融合

软件工程实践感想

单目标定:从理论到OpenCV实践

双目标定与三维计算:从理论到OpenCV实践