DNS简介
- 英文:``Domain Name System`
- 域名系统DNS能够把互联网上的主机名字转换为IP地址
- 从理论上讲,整个互联网可以只使用一个域名服务器,使它装入互联网上所有的主机名,并回答所有对IP地址的查询。然而这种做法并不可取。因为互联网规模很大,这样的域名服务器肯定会因过负荷而无法正常工作,而且一旦域名服务器出现故障,整个互联网就会瘫痪。因此,早在1983年互联网就开始采用
层次树状结构 的命名方法,并使用分布式的 域名系统DNS。DNS的互联网标准是RFC 1034,1035 - DNS使大多数名字都在本地进行解析(resolve),
仅少量解析需要在互联网上通信 ,因此DNS系统的效率很高
域名解析的要点
- 域名到IP地址的解析过程的要点如下:
- 当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用
解析程序 (resolver),并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销 )。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信 - 若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止
域名的结构
- mail.cctv.com
- com是顶级域名,标号cctv是二级域名,标号mail是三级域名
顶级域名的分类
据2012年5月的统计[W-IANA-root],现在顶级域名TLD(Top Level Domain) 已有326个。原先的顶级域名共分为三大类:
国家 顶级域名nTLD:采用ISO 3166的规定。如:cn表示中国,us表示美国,uk表示英国,等等。国家顶级域名又常记为ccTLD(cc表示国家代码country-code)。到2012年5月为止,国家顶级域名总数已达296个。通用 顶级域名gTLD:到2006年12月为止,通用顶级域名的总数已经达到20个。最先确定的通用顶级域名有7个,即: com(公司企业),net(网络服务机构),org(非营利性组织) ,int(国际组织),edu(美国专用的教育机构),gov(美国的政府部门),mil表示(美国的军事部门)。
- 以后又陆续增加了13个通用顶级域名:aero(航空运输企业),asia(亚太地区),biz(公司和企业),cat(使用加泰隆人的语言和文化团体),coop(合作团体),info(各种情况),jobs(人力资源管理者),mobi(移动产品与服务的用户和提供者),museum(博物馆),name(个人),pro(有证书的专业人员),tel(Telnic股份有限公司),travel(旅游业)。
- 基础结构域名(infrastructure domain):这种顶级域名只有一个,即
arpa ,用于反向域名解析 ,因此又称为反向域名 。
新顶级域名(New gTLD)
- 值得注意的是,ICANN于2011年6月20日在新加坡会议上正式批准新顶级域名(New gTLD),因此任何公司、机构都有权向ICANN申请新的顶级域。新顶级域名的后缀特点,使企业域名具有了显著的、强烈的标志特征。因此,新顶级域名被认为是真正的企业网络商标。新顶级域名是企业品牌战略发展的重要内容,其申请费很高(18万美元),并且在2013年开始启用。目前已有一些由两个汉字组成的中文的顶级域名出现了,例如,商城、公司、新闻等。到2016年,在ICANN注册的中文顶级域名已有60个[W-IANA-root]
国家顶级域名下的二级域名
- 在国家顶级域名下注册的二级域名均由该国家自行确定。例如,顶级域名为jp的日本,将其教育和企业机构的二级域名定为ac和co,而不用edu和com。
- 我国把二级域名划分为“类别域名”和“行政区域名”两大类。
- “类别域名”共7个,分别为:ac(科研机构),com(工、商、金融等企业),edu(中国的教育机构),gov(中国的政府机构),mil(中国的国防机构),net(提供互联网络服务的机构),org(非营利性的组织)。
- 行政区域名”共34个,适用于我国的各省、自治区、直辖市。例如:bj(北京市),js(江苏省),等等。
域名服务器
- 一个服务器所负责管辖的(或有权限的)范围叫做
区 (zone) - 每一个区设置相应的
权限域名服务器 (authoritative name server),用来保存该区中的所有主机的域名到IP地址的映射 - 总之,DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS服务器实际管辖的范围。区是“域”的子集。
- 为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器(master name server),其他的是辅助域名服务器(secondary name server)。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而
更改数据只能在主域名服务器 中进行。这样就保证了数据的一致性。
域名服务器分类
根域名服务器(root name server)
- 根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的
顶级域名服务器 的域名和IP地址。根域名服务器是最重要的域名服务器,因为不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析(即转换为IP地址),只要自己无法解析,就首先要求助于根域名服务器 。假定所有的根域名服务器都瘫痪了,那么整个互联网中的DNS系统就无法工作 - 据统计,到2016年2月,全世界已经在588个地点(地点数值还在不断增加)安装了根域名服务器,但这么多的根域名服务器却只使用13个不同IP地址的域名,即a.rootservers.net,b.rootservers.net,…,m.rootservers.net。每个域名下的根域名服务器由专门的公司或美国政府的某个部门负责运营
- 但请注意,虽然互联网的根域名服务器总共只有13个域名,但这不表明根域名服务器是由13台机器所组成(如果仅仅依靠这13台机器,根本不可能为全世界的互联网用户提供令人满意的服务)。实际上,在互联网中是由13套装置(13 installations)构成这13组根域名服务器[W-ROOT]。每一套装置在很多地点安装根域名服务器(也可称为镜像根服务器),但都使用同一个域名。负责运营根域名服务器的公司大多在美国,但所有的根域名服务器却分布在全世界
- 为了提供更可靠的服务,在每一个地点的根域名服务器往往由多台机器组成(为了安全起见,有些根域名服务器的具体地点还是保密的)。现在世界上大部分DNS域名服务器,都能就近找到一个根域名服务器查询IP地址(现在这些根域名服务器都已增加了IPv6地址)。为了方便,人们常用从A到M的前13个英文字母中的一个,来表示某组根域名服务器
- 必须指出,目前根域名服务器的分布仍然是很不均衡的。例如,在北美,平均每375万个网民就可以分摊到一个根域名服务器,而在亚洲,平均超过2千万个网民才分摊到一个根域名服务器,这样就会使亚洲的网民上网速度明显地低于北美的。
- 需要注意的是,在许多情况下,根域名服务器
并不直接把待查询的域名转换成IP地址 (根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器 进行查询
顶级域名服务器(即TLD服务器)
- 这些域名服务器负责管理
在该顶级域名服务器注册的所有二级域名 。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。
权限域名服务器
- 这就是前面已经讲过的负责
一个区 的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。
本地域名服务器(local name server)
- 本地域名服务器
并不属于域名服务器层次结构 ,但它对域名系统非常重要。当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器 。 - 每一个互联网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为
默认域名服务器 。 - 当计算机使用Windows 7操作系统时,打开“控制面板”,然后依次选择“网络和Internet”→“网络和共享中心”→“查看网络状态和任务”→“无线网络连接”(假定采用家庭网络)→“属性”→“Internet协议版本4”→“属性”等项目,就可以看见首选DNS服务器和备用DNS服务器的IP地址。这里的DNS服务器指的就是本地域名服务器。本地域名服务器离用户较近,
一般不超过几个路由器的距离 。当所要查询的主机也属于同一个本地ISP时,该本地域名服务器立即就能将所查询的主机名转换为它的IP地址,而不需要再去询问其他的域名服务器。
域名的解析过程
- 主机向本地域名服务器的查询一般都是采用
递归查询 (recursive query)。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。 - 本地域名服务器向根域名服务器的查询通常是采用
迭代查询 (iterative query)。迭代查询的特点是这样的:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询(而不是替本地域名服务器进行后续的查询)。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询,本地域名服务器就这样进行迭代查询。最后,知道了所要解析的域名的IP地址,然后把这个结果返回给发起查询的主机。当然,本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。 - 为了提高DNS查询效率,并减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛地使用了
高速缓存 (有时也称为高速缓存域名服务器)。高速缓存用来存放最近查询过的域名 以及从何处获得域名映射信息 的记录。 - 由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容
设置计时器 并处理超过合理时间的项(例如,每个项目只存放两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器获取绑定信息。当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性 。 - 不但在本地域名服务器中需要高速缓存,在主机中也很需要。许多
主机在启动时从本地域名服务器下载名字和地址的全部数据库 ,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。
|