首页 > 技术文章 > 域名详解

blockcipher 2013-10-07 15:24 原文

域名详解

域名

域名就是用来唯一标示互联网上的服务器的,当我们访问一个网站时候,比如http://www.example.com/index.html,其中的comexample.comwww.example.com都是域名。域名不区分大小写,即www.example.comWWW.EXAMPLE.COM一样。

FQDN

FQDN(Fully qualified domain name)即全域名,大多数指的是一个绝对域名,这个域名指明了其在DNS树级结构中的准确位置。它也指明了其中所有域的层 级,包括顶级域和根域。www.example.com.就是一个FQDN。 DNS resolver一般是按照FQDN的格式来解析一个域名的,如果被解析的域名 中不存在.,则DNS resolver会自动为其加上.

域名的等级

域名分为顶级域名(Top Level Domain, TLD),二级域名,三级域名等等。以www.example.com为例,其中com为顶级域名,examplecom下的子域名,wwwexample.com下的子域名,这是一个树形的结构,最多可以有127个层 级。

com
  |--example
      |-- www
           .
           .
           .

com顶级域名,example.com为二级域名,www.example.com为三级域名,并且指明这个域名是一个WWW(World-Wide Web)服务器的主机名。

hostname

hostname就是一个域名,但是这个域名要有IP指向。例如www.example.com和example.com都是hostname,但是com不是一个hostname。

根域名

DNS系统是一个树状的层级结构,树根是根域(root domian)。根域没有名字,在DNS系统中就用一个空字符串来表示。互联网上所有的FQDN都可以看成是以 根域来结尾,所以都是以分隔符.来结束的,例如www.example.com.。现在的DNS系统都不会要求域名以.来结束,即www.example.com就可以解析 了,但是现在很多DNS解析服务商还是会要求在填写DNS记录的时候以.来结尾域名。

全球共有13组根域名服务器,名字是[a-z].root-servers.net。10组在美国,其中的一些已经采用Anycast技术进行部署,剩下三组分为位于瑞典斯德哥尔摩(i),荷兰 阿姆斯特丹(k),日本东京(m)。

root domain
  |-- com
       |-- example.com
              |-- www.example.com

顶级域名

当1980年DNS系统被创建的时候,域名空间被分成了两个部分,一部分是二个字母表示的国家域名和goveducommilorgnetint七个组织用域名。 更多的顶级域名见:http://www.iana.org/domains/root/db/

域名解析流程

以www.example.com为例,如果要解析这个域名,首先客户端要对根域名服务 器发起DNS查询请求,然后根域名服务器返回com顶级域名的IP地址,然后客户 端向com顶级域名服务器发起查询请求,com顶级域名服务器返回example.com 二级域名服务器的IP地址,客户端再向example.com域名服务器发起查询请求, example.com域名服务器返回www.example.com的IP地址,域名解析完毕。 为了提高解析速度,ISP会在自己的服务器上缓存DNS的解析结果,防止每次都 去递归查找,这个缓存的时间是由DNS记录的TTL来决定的。

DNS

参考:

http://en.wikipedia.org/wiki/Domain_Name_System 
http://en.wikipedia.org/wiki/Domain_name

http://www.5dmail.net/html/2006-8-23/2006823161744.htm

举一个例子来详细说明解析域名的过程,假设我们要访问的站点时:www.linejet.com, 域名解析的过程如下所示

           第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
    第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
    第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
    第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
    第五步:重复第四步,直到找到正确的纪录。
    第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
    让我们举一个例子来详细说明解析域名的过程.假设我们的客户机如果想要访问站点:www.linejet.com , 此客户本地的域名服务器是dns.company.com , 一个根域名服务器是NS.INTER.NET , 所要访问的网站的域名服务器是dns.linejet.com,域名解析的过程如下所示:
   (1)客户机发出请求解析域名www.linejet.com的报文
   (2)本地的域名服务器收到请求后, 查询本地缓存, 假设没有该纪录, 则本地域名服务器dns.company.com则向根域名服务器NS.INTER.NET发出请求解析域名www.linejet.com
   (3)根域名服务器NS.INTER.NET收到请求后查询本地记录得到如下结果:linejet.com NS dns.linejet.com (表示linejet.com域中的域名服务器为:dns.linejet.com ), 同时给出dns.linejet.com的地址,并将结果返回给域名服务器dns.company.com。
   (4)域名服务器dns.company.com 收到回应后,再发出请求解析域名www.linejet.com的报文。
   (5)域名服务器 dns.linejet.com收到请求后,开始查询本地的记录,找到如下一条记录:www.linejet.com A 211.120.3.12 (表示linejet.com域中域名服务器dns.linejet.com的IP地址为:211.120.3.12),并将结果返回给客户本地域名服务器dns.company.com。
   (6)客户本地域名服务器将返回的结果保存到本地缓存,同时将结果返回给客户机。
  这样就完成了一次域名解析过程

推荐阅读