【计算机⽹络(谢希仁)习题题解】第6章应⽤层(1)——域名系统DNS
每个应⽤层协议 (application layer protocol) 都是为了解决某⼀类应⽤问题,⽽问题的解决必须通过位于不同主机中的多个应⽤进程之间的通信和协同⼯作来完成。应⽤进程之间的这种通信必须遵循严格的规则。应⽤层的具体内容是精确定义这些通信规则。应⽤层协议应当定义:
应⽤进程交换的报⽂类型,如请求报⽂和响应报⽂。
各种报⽂类型的语法,如报⽂中各个字段及其详细描述。
字段的语义,即包含在字段中的信息的含义。
进程何时、如何发送报⽂,以及对报⽂进⾏响应的规则。
应⽤层的许多协议都是基于客户服务器⽅式。即使是 P2P 对等通信⽅式,实质上也是⼀种特殊的客户服务器⽅式。客户 (client) 和服务器(server) 都是指通信中所涉及的两个应⽤进程。最主要的特征是:客户是服务请求⽅,服务器是服务提供⽅。
本章重要内容:
域名系统 DNS——从域名解析出 IP 地址。
万维⽹和 HTTP 协议,以及万维⽹的两种不同的信息搜索引擎。
电⼦邮件的传送过程,SMTP 协议和 POP3 协议、IMAP 协议使⽤的场合。
动态主机配置协议 DHCP 的特点。
⽹络管理的三个组成部分 (SNMP 本⾝、管理信息结构 SMI 和管理信息库 MIB) 的作⽤。
系统调⽤和应⽤编程接⼝的基本概念。
P2P ⽂件系统。
域名系统概述
域名系统 DNS (Domain Name System) 是互联⽹使⽤的命名系统,⽤来把便于⼈们使⽤的机器名字转换为 IP 地址。
许多应⽤层软件经常直接使⽤ DNS。虽然计算机的⽤户只是间接⽽不是直接使⽤域名系统,但 DNS 却为互联⽹的各种⽹络应⽤提供了核⼼服务。
DNS 能够把互联⽹上的主机名字转换为 IP 地址。
为什么机器在处理 IP 数据报时要使⽤ IP 地址⽽不使⽤域名呢?因为 IP 地址的长度是固定的 32 位 (IPv6 定长 128 位),⽽域名的长度并不是固定的,机器处理起来⽐较困难。
1983 年互联⽹开始采⽤层次树状结构的命名⽅法,并使⽤分布式的域名系统 DNS [RFC 1034, 1035]。
互联⽹的域名系统 DNS 被设计成为⼀个联机分布式数据块系统,并采⽤客户服务器⽅式。DNS 使⼤多数名字都在本地进⾏解析(resolve),仅少量解析需要在互联⽹上通信,因此 DNS 的效率很⾼。
由于 DNS 是分布式系统,即使单个计算机出了故障,也不会妨碍整个 DNS 系统的正常运⾏。
域名到 IP 地址的解析是由分布在互联⽹上的许多域名服务器程序 (可简称为域名服务器) 共同完成的。域名服务器程序在专设的结点上运⾏,⽽⼈们也常把运⾏域名服务器程序的机器称为域名服务器。
域名到 IP 地址的解析过程的要点:
当某⼀个应⽤进程需要把主机名解析为 IP 地址时,该应⽤进程就调⽤解析程序 (resolver),并成为 DNS 的⼀个客户,把待解析的域名放在 DNS 请求报⽂中,以 UDP ⽤户数据报⽅式发给本地域名服务器 (使⽤ UDP 是为了减少开销)。
本地域名服务器在查域名后,把对应的 IP 地址放在回答报⽂中返回。
应⽤进程获得⽬的主机的 IP 地址后即可进⾏通信。
若本地域名服务器不能回答该请求,则此域名服务器就暂时成为 DNS 中的另⼀个客户,并向其他域名服务器发出查询请求。这种过程直⾄到能够回答该请求的域名服务器为⽌。
互联⽹的域名结构
互联⽹采⽤层次树状结构的命名⽅法,任何⼀个连接在互联⽹上的主机或路由器,都有⼀个唯⼀的层次结构的名字,即域名 (domain name)。域是名字空间中⼀个可被管理的划分。域还可以划分为⼦域,⼦域还可继续划分,这样就形成了顶级域、⼆级域、三级域,等。
从语法上讲,每⼀个域名都由标号 (label) 序列组成,⽽各标号之间⽤点隔开。
DNS 规定,域名中的标号都由英⽂字母和数字组成,每⼀个标号不超过 63 各字符,也不区分⼤⼩写字母。标号中除连字符(-)外不能使⽤其他的标点符号。由多个标号组成的完整域名总共不超过 255 各字符。
级别最低的域名写在最左边,级别最⾼的顶级域名写在最右边。
DNS 既不规定⼀个域名需要包含多少个下级域名,也不规定每⼀级的域名代表什么意思。
各级域名由其上⼀级的域名管理机构管理,⽽最⾼级的顶级域名由 ICANN 进⾏管理。⽤这种⽅法可使每⼀个域名在整个互联⽹范围内是唯⼀的,并且也容易设计出⼀种查域名的机制。
域名只是个逻辑概念,并不代表计算机所在的物理地点。
原先的顶级域名 TLD (Top Level Domain) 共分为三⼤类:
国家顶级域名 nTLD:采⽤ ISO 3166 的规定。如:cn 表⽰中国,us 表⽰美国,等。国家顶级域名⼜常记为 ccTLD (cc 表⽰国家代码 country-code)。
通⽤顶级域名 gTLD:最先确定的通⽤顶级域名有 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,⽤于反向域名解析,因此⼜称为反向域名。
ICANN 于 2011 年正式批准新顶级域名 (New gTLD),因此任何公司、机构都有权向 ICANN 申请新的顶级域。新顶级域名的后缀特点,使企业域名有了显著的、强烈的标志特征。因此,新顶级域名被认为是真正的企业⽹络商标。
在国家顶级域名下注册的⼆级域名均由国家⾃⾏确定。
我国把⼆级域名划分为类别域名和⾏政区域名两⼤类。
类别域名共 7 个,分别是:ac (科研机构),com (⼯、商、⾦融等企业),edu (中国的教育机构),gov (中国的政府机构),mil (中国的国防机构),net (提供互联⽹络服务的机构),org (⾮营利性的组织)。
⾏政区域名共 34 个,适⽤于我国的各省、⾃治区、直辖市。例,bj (北京市),js (江苏省),等。
关于我国的互联⽹络发展现状以及各种规定,均可在中国互联⽹络信息中⼼ CNNIC 的⽹址上到 [W-CNNIC]。
⽤域名树来表⽰互联⽹的域名系统是最清楚的。
⼀旦某个单位有了⼀个域名,它就可以⾃⼰决定是否要进⼀步划分其下属的⼦域,并且不必由其上级机构批准。
域名树的树叶就是单台计算机的名字,它不能再继续往下划分⼦域了。
互联⽹的名字空间是按照机构的组织来划分的,与物理的⽹络⽆关,与 IP 地址中的“⼦⽹”也没有关系。
域名服务器
具体实现域名系统是使⽤分布在各地的域名服务器。从理论上讲,可以让每⼀级的域名都有⼀个相对应的域名服务器,但这样做会使域名服务器的数量太多,DNS 运⾏效率降低。因此 DNS 采⽤划分区的办法来解决这个问题。
⼀个服务器所负责管辖的 (或有权限的) 范围叫做区 (zone)。各单位根据具体情况来划分⾃⼰管辖的区。但在⼀个区中的所有节点必须是能够连通的。
每⼀个区设置相应的权限域名服务器 (authoritative name server),⽤来保存该区中所有主机的域名到 IP 地址的映射。
区是 DNS 服务器实际管辖的范围。区可能等于或⼩于域,但⼀定不能⼤于域。
以图 6-2(b) 中公司 abc 划分的两个区为例,给出 DNS 域名服务器树状结构图。
互联⽹上的 DNS 域名服务器也是按照层次安排的。每⼀个域名服务器都只对域名体系中的⼀部分进⾏管辖。根据域名服务器所起的作⽤,可以把域名服务器划分为四种不同的类型:
国家计算机二级证书查询
根域名服务器 (root name server):根域名服务器 [RFC 2870] 是最⾼层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。
根域名服务器是最重要的域名服务器,因为不管是哪⼀个本地域名服务器,若要对互联⽹上任何⼀个域名进⾏解析 (即转换为 IP 地址),只要⾃⼰⽆法解析,就⾸先要求助于根域名服务器。
据统计,到 2016 年 2 ⽉,全世界已经在 588 个地点安装了根域名服务器,但这么多的根域名服务器只使⽤ 13 个不同 IP 地址的域名,即 a.rootservers,…,m.rootservers。每个域名下的根域名服务器由专门的公司或美国政府的某个部门负责运营。
在互联⽹是由 13 套装置 (13 installations) 构成这 13 组根域名服务器。每⼀套装置在很多地点安装根域名服务器 (也可称为镜像根服务器),但都使⽤同⼀个域名。
为了提供更可靠的服务,在每⼀个地点的根域名服务器往往由多台机器组成。现在世界上⼤部分 DNS 域名服务器,都能就近到⼀个根域名服务器查询 IP 地址。
为了⽅便,⼈们常⽤从 A 到 M 的前 13 个英⽂字母中的⼀个,来表⽰某组根域名服务器。
由于根域名服务器采⽤了任播技术,因此当 DNS 客户向某个根域名服务器的 IP 地址发出查询报⽂时,互联⽹上的路由器就能到离这个 DNS 客户最近的⼀个根域名服务器。
在许多情况下,根域名服务器并不直接把待查询的域名直接转换成 IP 地址 (根域名服务器也没有存放这种信息),⽽是告诉本地域名服务器下⼀步应当哪⼀个顶级域名服务器进⾏查询。
顶级域名服务器 (即 TLD 服务器):这些域名服务器负责管理在该顶级域名服务器注册的所有⼆级域名。当收到 DNS 查询请求时,就给出相应的回答 (可能是最后的结果,也可能是下⼀步应当的域名服务器的 IP 地址)。
权限域名服务器:这是负责⼀个区的域名服务器。当⼀个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS 客户,下⼀步应当哪⼀个权限域名服务器。
本地域名服务器 (local name server):本地域名服务器不属于图 6-3 所⽰的域名服务器层次结构,但它对域名系统⾮常重要。当⼀台主机发出 DNS 查询请求时,这个查询请求报⽂就发送给本地域名服务器。
每⼀个互联⽹服务提供者 ISP,或⼀个⼤学,甚⾄⼀个⼤学⾥的系,都可以拥有⼀个本地域名服务器,这种域名服务器有时也称为默认域名服务器。
当计算机使⽤ Windows 操作系统时,打开 DOS 窗⼝,运⾏命令 ipconfig /all,可以查看 DNS 服务器的 IP 地址。这⾥的 DNS 服务器指的就是本地域名服务器。
本地域名服务器离⽤户较近,⼀般不超过⼏个路由器的距离。当所要查询的主机也属于同⼀个本地 ISP 时,该本地域名服务器⽴即就能讲所查询的主机名转换为它的 IP 地址,⽽不需要再去询问其他的域名服务器。
为了提⾼域名服务器的可靠性,DNS 域名服务器都把数据复制到⼏个域名服务器来保存,其中的⼀个是主域名服务器 (master name server),其他的是辅助域名服务器 (secondary name server)。当主域名服务器出故障时,辅助域名服务器可以保证 DNS 的查询⼯作不会中断。
主域名服务器定期把数据复制到辅助域名服务器中,⽽更改数据只能在主域名服务器中进⾏。这样保证了数据的⼀致性。
域名的解析过程:
主机向本地域名服务器的查询⼀般都是采⽤递归查询 (recursive query)。
递归查询:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的⾝份,向其他根域名服务器继续发出查询请求报⽂ (即替该主机继续查询),⽽不是让该主
机⾃⼰进⾏下⼀步的查询。
因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报错,表⽰⽆法查询到所需的 IP 地址。
本地域名服务器向根域名服务器的查询通常是采⽤迭代查询 (iterative query)。
迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报⽂时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器下⼀步应当向哪⼀个域名服务器进⾏查询。然后让本地域名服务器进⾏后续的查询 (⽽不是替本地域名服务器进⾏后续的查询)。
根域名服务器通常是把⾃⼰知道的顶级域名服务器的 IP 地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的的IP 地址,要么告诉本地域名服务器下⼀步应当向哪⼀个权限域名服务器进⾏查询,本地域名服务器就这样进⾏迭代查询。
最后,知道了所要解析的域名的 IP 地址,然后把这个结果返回给发起查询的主机。
本地域名服务器也可以采⽤递归查询,这取决于最初的查询请求报⽂的设置是要求使⽤哪⼀种查询⽅式。