1、什么是DNS?
域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
D N S的一个基本特性是使用超高速缓存。即当一个名字服务器收到有关映射的信息(主
机名字到 I P地址)时,它会将该信息存放在高速缓存中。这样若以后遇到相同的映射请求,
就能直接使用缓存中的结果而无需通过其他服务器查询。
2、DNS顶级域
顶级域名被分为三个部分:
1) arpa是一个用作地址到名字转换的特殊域 。
2) 7个3字符长的普通域。有些书也将这些域称为组织域。
3) 所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域
顶级域名(Top level domain,简称TLD)由美国的ICANN机构管理
3、DNS查询过程
由于 ICANN 管理着所有的顶级域名,所以它是最高一级的域名节点,被称为根域名(root domain)。在有些场合,www.example.com 被写成www.example.com. ,即最后还会多出一个点。这个点就是根域名。
理论上,所有域名查询都必须先查询根域名,因为只有根域名才能告诉你,某个顶级域名由哪台服务器管理。事实上也确实如此,ICANN 维护着一张列表,里面记载着顶级域名和对应的托管商。
比如,我要访问www.example.com ,就必须先询问 ICANN 的根域名列表,它会告诉我.com域名由 Verisign 托管,我必须去找 Verisign,它会告诉我example.com服务器在哪里。
由于根域名列表很少变化,大多数 DNS 服务商都会提供它的缓存,所以根域名的查询事实上不是那么频繁。
保存 DNS 根区文件的服务器,就叫做 DNS 根域名服务器(root name server)。
递归查询:客户端向本地 DNS 服务器(即首选DNS服务器)发出请求后,一直处于等待状态,直到本地名称服务器返回查询结果。当客户端向本地 DNS 服务器发出请求后,本地 DNS 服务器查询本机缓存,如果有记录,则直接返回;如果没有,则本地 DNS 服务器以客户端的身份将查询请求发给根域名服务器,这个过程是递归查询过程。如果递归查询未查出结果,则开始进行迭代查询。
迭代查询:本地 DNS 服务器以客户端的身份将查询请求发给根域名服务器后,根域名服务器通过查询返回给本地 DNS 服务器 .com 顶级名称服务器的IP地址;本地DNS服务器收到 .com 顶级名称服务器的IP地址后继续向.com顶级名称服务器发出请求,顶级名称服务器收到请求后查询缓存,如果有记录则直接返回本地DNS服务器,如果没有,则返回baidu.com二级名称服务器的IP地址;本地名称服务器继续发出请求,二级名称服务器同样查找缓存返回www.baidu.com的IP地址。(最多127级域)。本地 DNS 服务器向根服务器的查询就是迭代查询。
一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…
1、
这个报文由12个字节的首部和4个可变的字段组成。
标识字段:由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否匹配。
标志字段:16 bit的标志字段被划分为若干子字段
标志位字段含义0(没有差错)、3(名字差错)2(服务器错误)
名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。