阅读:1513回复:4
科普第17篇——域名解析
现代网络是基于TCP/IP协议的,于是IP地址就成了主机的标识。可是IP地址并不好记,于是DNS(Domain Name System,域名系统)出现了。
DNS的目的只有一个,就是用容易记忆的字母和数字的组合代替难记的IP地址(特别是IPv6地址,更加难记)。 用户要访问域名所代表的主机,那么首先要获得这个域名对应的IP地址,这个过程就是域名解析。 大家都知道域名是由英文句号分开的一段一段的。每一段为一级域名,最后的一级级别最高,越往前级别越低。每一级域名都可一对应一些DNS记录(Record),DNS的记录有很多类型,下面介绍一下最长见的几种: A记录:这个记录直接是IP地址,比如www.dmdjz.com.cn的A记录就是221.122.76.219。 CNAME记录:这个记录是另一个域名,表示这个域名对应的是另一个域名所表示的IP地址。比如pic.dmdjz.com.cn的CNAME记录就是www.dmdjz.com.cn,表示pic.dmdjz.com.cn的IP地址和www.dmdjz.com.cn的IP地址是一样的。 MX记录:这个记录表示邮件服务器。比如dmdjz.com.cn的MX记录就是mxdomain.qq.com,表示发送到@dmdjz.com.cn的邮件要送到mxdomain.qq.com这个服务器。 AAAA记录:这个记录直接是IPv6地址,和A记录很类似。 NS记录:这个记录表示域名服务器。表示要解析这个域名(及子域名)需要向这个记录所记录的域名服务器去查询。如dmdjz.com.cn的NS记录就是ns1.ename.net到ns6.ename.net。 其他的还有TXT记录,SRV记录等等,因为不常见,就不介绍了。 其实域名的最后应该还有一个英文句号的,但是现代DNS服务器都会自动加上这个句号,所以我们就不必这样做了。 域名解析需要向DNS服务器发出查询。打开网络选项,可以看到有一个DNS服务器的配置,这就是提供域名查询的服务器了。 要实现域名解析,DNS服务器上就要有这个记录,可是世界上那么多DNS服务器,难道我改了域名的IP地址还要去通知每一个服务器吗? 其实不用,域名解析是一个迭代和递归的过程。我们的机器设置的DNS服务器属于递归的服务器,他接受客户端的查询,并返回最终结果。但是如果DNS服务器上没有我们要查询的域名的记录,就会通过迭代的方式向域名DNS服务器查询。 比如我这里电信的DNS服务器是222.172.200.68(后面称为电信DNS),我向它查询www.dmdjz.com.cn的域名,如果电信DNS上有这个记录,他就返回给我(221.122.76.219)。如果没有记录的话,电信DNS就要经过如下一个过程,获得结果后再返回给我: 1、首先向根域名服务器发送请求,获得cn这个域的DNS服务器。全球共有13个根域名服务器。 2、然后向cn这个域的DNS服务器发送请求,查询com.cn这个域的DNS服务器。 3、然后向com.cn这个域的DNS服务器发送请求,查询dmdjz.com.cn这个域的DNS服务器(就是上面提到的NS记录的那些服务器)。 4、然后向dmdjz.com.cn这个域的DNS服务器发送请求,查询www.dmdjz.com.cn这个域的A记录或CNAME记录或NS记录。 5、如果是A记录或CNAME记录,就返回给我。如果是NS记录,那么再向www.dmdjz.com.cn这个域的DNS服务器查询A记录或CNAME记录。如果这些记录都没有,那么域名解析失败,电信DNS就会把我带到他们的解析失败的页面了(当然,有的DNS会直接返回解析失败的,浏览器会显示自己的解析失败的界面)。 可以看到域名解析是按照级别高低来一级一级进行的。 如果解析成功了,电信DNS会把这个记录缓存起来。每个记录都有一个TTL(Time To Live,生存时间),当一个记录缓存的时间超过这个时间,就被认为是陈旧的,电信DNS需要重新按照上面的步骤来获得新的记录。 那么我们有没有什么方法来获得DNS记录呢?当然可以!这个工具其实系统都自带了,是个命令行工具。打开命令行提示符(Linux就是“终端”),输入nslookup就是了。 nslookup默认查询的服务器是我们网络设置里的DNS服务器。我们可以用下面的命令来修改: server 208.67.220.220 输完命令后记得回车,下面的命令也是。这样就改成了OpenDNS的服务器。 要查询某个域名,直接输入就可以了,比如: www.dmdjz.com 返回的结果是(下面的不是命令): Server: 208.67.222.222 Address: 208.67.222.222#53 Non-authoritative answer: www.dmdjz.com canonical name = dmdjz.com. Name: dmdjz.com Address: 182.50.147.1 表示查询的服务器是208.67.222.222,回应是为验证的(Non-authoritative answer),返回的是CNAME记录(canonical name)指向的是dmdjz.com.(注意到最后有一个句号了吗?),而dmdjz.com解析得到的是182.50.147.1 如果返回的是A记录,就不会有canonical name这一行了。 如果要设置所查询的记录类型,我们可以用这条命令: set type=ns 表示返回NS记录。 比如查询root-servers.net(这就是根域名服务器)返回的结果是: Server: 208.67.222.222 Address: 208.67.222.222#53 Non-authoritative answer: root-servers.net nameserver = a.root-servers.net. root-servers.net nameserver = b.root-servers.net. root-servers.net nameserver = c.root-servers.net. root-servers.net nameserver = d.root-servers.net. root-servers.net nameserver = e.root-servers.net. root-servers.net nameserver = f.root-servers.net. root-servers.net nameserver = g.root-servers.net. root-servers.net nameserver = h.root-servers.net. root-servers.net nameserver = i.root-servers.net. root-servers.net nameserver = j.root-servers.net. root-servers.net nameserver = k.root-servers.net. root-servers.net nameserver = l.root-servers.net. root-servers.net nameserver = m.root-servers.net. 数一数,是不是13个呢? 查询cn的NS记录的结果: Server: 208.67.222.222 Address: 208.67.222.222#53 Non-authoritative answer: cn nameserver = c.dns.cn. cn nameserver = a.dns.cn. cn nameserver = e.dns.cn. cn nameserver = ns.cernet.net. cn nameserver = b.dns.cn. cn nameserver = d.dns.cn. 以及com.cn的结果: Server: 208.67.222.222 Address: 208.67.222.222#53 Non-authoritative answer: com.cn nameserver = b.dns.cn. com.cn nameserver = c.dns.cn. com.cn nameserver = d.dns.cn. com.cn nameserver = e.dns.cn. com.cn nameserver = cns.cernet.net. com.cn nameserver = a.dns.cn. 怎么是基本一样的呢?嘛,那是因为cn和com.cn都是CNNIC管理的嘛。那个不一样的cernet的是教育网的服务器啦。 我们可以自己架设DNS服务器,然后设定一些自己的域名记录(比如qakcn指向我自己的机器)。这在一些大学里很常见,用这种方式设定一些内部域名,从校外访问的话指向的是不同的服务器的不同页面(甚至不能解析),从而实现内外有别。 关于DNS就说这么多了,还有问题欢迎提出! ==========之前的文章========== 科普第1篇——计算机色彩 科普第1篇补遗——CSS颜色 科普第2篇——光盘 科普第3篇——2、8、10、16 科普第4篇——电池 科普第5篇——浏览器 科普第6篇——字符编码 科普第7篇——加密解密 科普第8篇——移动通信技术 科普第9篇——为什么32位CPU不能支持大于4GB内存? 科普第10篇——智能手机简介 科普第11篇——14.52-14.49=0.0299999? 科普第12篇——为什么HTTPS会更安全? 科普第13篇——计算机语言 科普第14篇——字体(上) 科普第15篇——字体(中) 科普第16篇——字体(下) 科普番外篇1——虽然没用但了解一下也很有趣的知识 |
|
沙发#
发布于:2011-07-06 22:46
太强了,虽然我整天接触电脑,甚至常常使用它们,但是也只知道这么做,却不懂其中的奥妙,今日一看方乃受教了
|
|
|
2楼#
发布于:2011-07-06 22:58
受教= =虽然会解析域名~~但没有这么系统的学习过呢
|
|
|
3楼#
发布于:2011-07-07 00:30
我在想,要怎么获得域名呢,免费的似乎只有什么三级域名之类的吧,就是(baidu.***.com 这种),不太懂的说
|
|
4楼#
发布于:2011-07-08 00:04
回 3楼(琥珀) 的帖子
域名公司注册,家族的是在易名中国注册的。托家族的福,这一篇我倒基本懂了。 |
|