qakcn
学生会会长
学生会会长
  • 注册日期2008-10-31
  • 最后登录2021-01-05
  • 生日1988-8-18
  • 光玉3394颗
阅读:1339回复:4

科普第17篇——域名解析

楼主#
更多 发布于:2011-07-06 22:42
现代网络是基于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——虽然没用但了解一下也很有趣的知识
喜欢0 评分0
爱德华·星尘
光坂基金会
光坂基金会
  • 注册日期2009-09-24
  • 最后登录2012-11-13
  • 生日1989-11-9
  • 光玉4485颗
沙发#
发布于:2011-07-06 22:46
太强了,虽然我整天接触电脑,甚至常常使用它们,但是也只知道这么做,却不懂其中的奥妙,今日一看方乃受教了
回复(0) 喜欢(0)     评分
守护希望
光坂一年生
光坂一年生
  • 注册日期2010-04-24
  • 最后登录2011-12-15
  • 生日1992-8-5
  • 光玉95颗
2楼#
发布于:2011-07-06 22:58
受教=  =虽然会解析域名~~但没有这么系统的学习过呢
回复(0) 喜欢(0)     评分
琥珀
光坂硕士生
光坂硕士生
  • 注册日期2009-06-07
  • 最后登录2020-12-09
  • 生日1989-12-26
  • 光玉6903颗
3楼#
发布于:2011-07-07 00:30
我在想,要怎么获得域名呢,免费的似乎只有什么三级域名之类的吧,就是(baidu.***.com 这种),不太懂的说
回复(0) 喜欢(0)     评分
梦幻的夏
光坂学士生
光坂学士生
  • 注册日期2008-10-29
  • 最后登录2014-08-21
  • 生日1986-4-15
  • 光玉3005颗
4楼#
发布于:2011-07-08 00:04
回 3楼(琥珀) 的帖子
域名公司注册,家族的是在易名中国注册的。

托家族的福,这一篇我倒基本懂了。
回复(0) 喜欢(0)     评分
游客

返回顶部