计算机网络6——应用层1域名系统 DNS


在前五章我们已经详细地讨论了计算机网络提供通信服务的过程。但是我们还没有讨论这些通信服务是如何提供给应用进程来使用的。本章讨论各种应用进程通过什么样的应用层协议来使用网络所提供的这些通信服务。

在上一章,我们已学习了运输层为应用进程提供了端到端的通信服务。但不同的网络应用的应用进程之间,还需要有不同的通信规则。因此在运输层协议之上,还需要有应用层协议(application layer protocol)。这是因为,每个应用层协议都是为了解决某一类应用问题,而问题的解决又必须通过位于不同主机中的多个应用进程之间的通信和协同工作来完成。应用进程之间的这种通信必须遵循严格的规则。应用层的具体内容就是精确定义这些通信规则。具体来说,应用层协议应当定义:

  • 应用进程交换的报文类型,如请求报文和响应报文。
  • 各种报文类型的语法,如报文中的各个字段及其详细描述
  • 字段的语义,即包含在字段中的信息的含义。
  • 进程何时、如何发送报文,以及对报文进行响应的规则。

请注意,应用层协议与网络应用并不是同一个概念。应用层协议只是网络应用的一部分。例如,万维网应用是一种基于客户/服务器体系结构的网络应用。万维网应用包含很多部件,有万维网浏览器、万维网服务器、万维网文档的格式标准,以及一个应用层协议。万维网的应用层协议是HTTP,它定义了在万维网浏览器和万维网服务器之间传送的报文类型格式和序列等规则。而万维网浏览器如何显示一个万维网页面,万维网服务器是用多线程还是用多进程来实现,则都不是 HTTP所定义的内容。

应用层的许多协议都是基于客户服务器方式。即使是P2P对等通信方式,实质上也是一种特殊的客户服务器方式。这里再明确一下,**客户(client)服务器(server)**都是指通信中所涉及的两个应用进程。客户服务器方式所描述的是进程之间服务和被服务的关系。这里最主要的特征就是:客户是服务请求方,服务器是服务提供方

下面先讨论许多应用协议都要使用的域名系统。在介绍了文件传送协议和远程登录协议后,再重点介绍万维网的工作原理及其主要协议。由于万维网的出现使互联网得到了飞速的发展,因此万维网在本章中占有最大的篇幅,也是本章的重点。接着讨论用户经常使用的电子邮件。最后,介绍有关网络管理方面的问题以及有关网络编程的基本概念。对应用层更深入的学习可参阅[COME15][COME06][KURO17]TTANE11]及有关标准。

本章最重要的内容是:

  • (1)域名系统DNS–从域名解析出IP地址。
  • (2)万维网和 HTTP 协议,以及万维网的两种不同的信息搜索引擎。
  • (3)电子邮件的传送过程,SMTP协议和POP3协议、IMAP协议使用的场合
  • (4)动态主机配置协议 DHCP的特点。
  • (5)网络管理的三个组成部分(SNMP本身、管理信息结构SMI和管理信息库MIB)的作用。
  • (6)系统调用和应用编程接口的基本概念
  • (7)P2P文件系统。

首先我们进入域名系统 DNS

一、域名系统概述

域名系统DNS(Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名呢?这是因为在这种互联网的命名系统中使用了许多的“域”(domain),因此就出现了“域名”这个名词。“域名系统”很明确地指明这种系统是用在互联网中的。

许多应用层软件经常直接使用域名系统DNS。虽然计算机的用户只是间接而不是直接使用域名系统,但 DNS却为互联网的各种网络应用提供了核心服务。

用户与互联网上某台主机通信时,必须要知道对方的P地址。然而用户很难记住长达32位的二进制主机地址。即使是点分十进制IP地址也并不太容易记忆。但在应用层为了便于用户记忆各种网络应用,连接在互联网上的主机不仅有IP地址,而且还有便于用户记忆的主机名字。域名系统DNS能够把互联网上的主机名字转换为IP地址。

早在 ARPANET时代,整个网络上只有数百台计算机,那时使用一个叫作hosts的文件列出所有主机名字和相应的IP地址。只要用户输入一台主机名字,计算机就可很快地把这台主机名字转换成机器能够识别的二进制IP地址。

为什么机器在处理IP数据报时要使用IP地址而不使用域名呢?这是因为IP地址的长度是固定的32位(如果是IPv6地址,那就是128位,也是定长的),而域名的长度并不是固定的,机器处理起来比较困难。

从理论上讲,整个互联网可以只使用一个域名服务器,使它装入互联网上所有的主机名,并回答所有对IP地址的查询。然而这种做法并不可取。因为互联网规模很大,这样的域名服务器肯定会因过负荷而无法正常工作,而且一旦域名服务器出现故障,整个互联网就会瘫痪。因此,早在1983年互联网就开始采用层次树状结构的命名方法,并使用分布式的域名系统 DNS。

互联网的域名系统DNS被设计成为一个联机分布式数据库系统,并采用客户服务器方式。DNS 使大多数名字都在本地进行解析(resolve),仅少量解析需要在互联网上通信,因此 DNS系统的效率很高。由于DNS是分布式系统,即使单个计算机出了故障,也不会妨碍整个 DNS 系统的正常运行。

域名到IP地址的解析是由分布在互联网上的许多服务器程序(可简称为域名服务器)共同完成的。域名服务器程序在专设的节点上运行,而人们也常把运行域名服务器程序的机器称为域名服务器

域名到IP地址的解析过程的要点如下:当某一个应用进程需要把主机名解析为I地址时,该应用进程就调用解析程序(resolver),并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销)。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。

若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。上述这种查找过程,后面还要进一步讨论。

二、互联网的域名结构

早期的互联网使用了非等级的名字空间,其优点是名字简短。但当互联网上的用户数急剧增加时,用非等级的名字空间来管理一个很大的而且是经常变化的名字集合是非常困难的。因此,互联网后来就采用了层次树状结构的命名方法,就像全球邮政系统和电话系统那样。采用这种命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。这里,“域”(domain)是名字空间中一个可被管理的划分域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。

从语法上讲,每一个域名都由标号(label)序列组成,而各标号之间用点隔开(请注意,这里所说的“点”是英语中的句号“”,不是中文的句号“。”)。例如下面的域名
在这里插入图片描述
就是中央电视台用于收发电子邮件的计算机(即邮件服务器)的域名,它由三个标号组成,其中标号com是顶级域名,标号cctv是二级域名,标号mail是三级域名。

DNS 规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符(但为了记忆方便,最好不要超过12个字符),也不区分大小写字母(例如,CCTV或cctv在域名中是等效的)。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边。由多个标号组成的完整域名总共不超过255 个字符。DNS既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。

各级域名由其上一级的域名管理机构管理,而最高的顶级域名则电ICANN 进行管理用这种方法可使每一个域名在整个互联网范围内是唯一的,并且也容易设计出一种查找域名的机制。

需要注意的是,域名只是个逻辑概念,并不代表计算机所在的物理地点。变长的域名和使用有助记忆的字符串,是为了便于人使用。而I地址是定长的32位二进制数字则非常便于机器进行处理。这里需要注意,域名中的“点”和点分十进制IP地址中的“点”并无一对应的关系。点分十进制IP地址中一定是包含三个“点”,但每一个域名中“点”的数目则不一定正好是三个。

截至2020年6月的统计[W-Wiki],现在全球顶级域名TLD(TopLevel Domain)在IANA登记的已有1584个(其中有不到80个未使用)。原先的顶级域名共分为三大类:

  • 国家顶级域名nTLD:采用ISO3166的规定。如: cn 表示中国,us 表示美国,uk 表示英国,等等。国家顶级域名又常记为ccTLD(cc表示国家代码country-code)。截至2020年6月为止,国家顶级域名总数已达316个。
  • 通用顶级域名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(旅游业)。

值得注意的是,ICANN于2011年6月20日在新加坡会议上正式批准新顶级域名(NewgTLD),因此任何公司、机构都有权向ICANN 申请新的顶级域名。新顶级域名的后缀特点使企业域名具有了显著的、强烈的标志特征。因此,新顶级域名被认为是真正的企业网络商标。新顶级域名是企业品牌战略发展的重要内容,其申请费很高(18万美元),并且在2013年开始启用。目前已有一些由两个汉字组成的中文的顶级域名出现了,例如,商城、公司、新闻等。然而中文顶级域名并未获得广泛的使用(可能是使用不太方便吧)。

在国家顶级域名下注册的二级域名均由该国家自行确定。例如,顶级域名为jp的日本,将其教育和企业机构的二级域名定为ac和co,而不用edu和com。

我国把二级域名划分为“类别域名”和“行政区域名”两大类,“类别域名”共7个,分别为:ac(科研机构),com(工、商、金融等企业),edu(中国的教育机构),gov(中国的政府机构),mil(中国的国防机构),net(提供互联网络服务的机构),org(非营利性的组织)。

“行政区域名”共 34个,适用于我国的各省、自治区、直辖市。例如:bi(北京市),is(江苏省),等等。

关于我国的互联网络发展现状以及各种规定(如申请域名的手续),均可在中国互联网网络信息中心的网址上找到WCNNIC1用域名树来表示互联网的域名系统是最清楚的。下图是互联网域名空间的结构,它实际上是一个倒过来的树,在最上面的是根,但没有对应的名字。根下面一级的节点“就是最高一级的顶级域名(由于根没有名字,所以在根下面一级的域名就叫作顶级域名)。

顶级域名可往下划分子域,即二级域名。再往下划分就是三级域名、四级域名,等等。下图列举了一些域名作为例子。凡是在顶级域名com下注册的单位都获得了一个二级域名。图中给出的例子有:中央电视台cctv,以及IBM和华为等公司。在顶级域名c(中国)下面举出了几个二级域名,如:bi,edu以及com。在某个二级域名下注册的单位就可以获得一个三级域名。图中给出的在edu下面的三级域名有:tsinghua(清华大学)和pku(北京大学)。一旦某个单位拥有了一个域名,它就可以自己决定是否要进一步划分其下属的子域,并且不必由其上级机构批准。图中cctv(中央电视台)和tsinghua(清华大学)都分别划分了自己的下一级的域名mail和www(分别是三级域名和四级域名)@。域名树的树叶就是单台计算机的名字,它不能再继续往下划分子域了。
在这里插入图片描述

应当注意,虽然中央电视台和清华大学都各有一台计算机取名为mail,但它们的域名并不一样,因为前者是 mail.cctv.com,而后者是 mail.tsinghua.edu.cn。因此,即使在世界上还有很多单位的计算机取名为 mail,但是它们在互联网中的域名都必须是唯一的。

这里还要强调指出,互联网的名字空间是按照机构的组织来划分的,与物理的网络无关,与IP地址中的“子网”也没有关系。

三、域名服务器

上面讲述的域名体系是抽象的。但具体实现域名系统则是使用分布在各地的域名服务器。从理论上讲,可以让每一级的域名都有一个相对应的域名服务器,使所有的域名服务器构成和上图相对应的“域名服务器树”的结构。但这样做会使域名服务器的数量太多,使域名系统的运行效率降低。因此 DNS就采用划分区的办法来解决这个问题。

一个服务器所负责管辖的(或有权限的)范围叫作区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器(authoritative name server),用来保存该区中的所有主机的域名到IP 地址的映射。总之,DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位的。区是DNS服务器实际管辖的范围。区可能等于或小于域,但一定不能大于域。

下图是区的不同划分方法的举例。假定abc 公司有下属部门x和y,部门x下面又分三个分部门u,v和w,而y下面还有其下属部门t。图(a)表示 abc 公司只设一个区 abc.com。这时,区 abc.com 和域abc.com 指的是同一件事。但图(b)表示 abc 公司划分了两个区(大的公司可能要划分多个区):abc.com和y.abc.com。这两个区都隶属于域abc.com,都各设置了相应的权限域名服务器。不难看出,区是“域”的子集。
在这里插入图片描述
下图以图(b)中公司abc划分的两个区为例,给出了DNS域名服务器树状结构图。这种 DNS 域名服务器树状结构图可以更准确地反映出 DNS的分布式结构。在下图中的每一个域名服务器都能够进行部分域名到I地址的解析。当某个DNS服务器不能进行域名到IP地址的转换时,它就设法找互联网上别的域名服务器进行解析。
在这里插入图片描述
从上图可看出,互联网上的DNS域名服务器也是按照层次安排的。每一个域名服务器都只对域名体系中的一部分进行管辖。根据域名服务器所起的作用,可以把域名服务器划分为以下四种不同的类型:

1、根域名服务器(rootnameserver)

根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。根域名服务器是最重要的域名服务器,因为不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析(即转换为IP地址),只要自己无法解析,就首先要求助于根域名服务器。

假定所有的根域名服务器都瘫痪了,那么整个互联网中的DNS系统就无法工作。全世界的根域名服务器只使用 13个不同P地址的域名,即 a.rootservers.net,b.rootservers.net,…m.rootservers.net。

每个域名下的根域名服务器由专门的公司或美国政府的某个部门负责运营但请注意,虽然互联网的根域名服务器总共只有13个域名,但根域名服务器并非仅由13 台机器所组成(如果仅仅依靠这13台机器,根本不可能为全世界的互联网用户提供令人满意的服务)。实际上,在互联网中是由13 套装置(13installations,也就是13 套系统)构成这13组根域名服务器的[W-ROOT]。

每一套装置在很多地点安装根域名服务器(也可称为镜像根服务器),但都使用同一个域名。负责运营根域名服务器的公司大多在美国,但所有的根域名服务器却分布在全世界。为了提供更可靠的服务,在每一个地点的根域名服务器往往由多台机器组成(为了安全起见,这些根域名服务器的具体位置是严格保密的,不对外开放参观)。

现在世界上大部分DNS域名服务器,都能就近找到一个根域名服务器查询IP地址(现在这些根域名服务器都已增加了TPv6地址)。为了方便,人们常用从A到M的前13个英文字母中的一个,来表示某组根域名服务器。截至2021年3月24日,全球共有1375个根域名服务器在运行,其中在我国的共有37个(分布在北京(8个)、上海、杭州(2个)、武汉(2 个)、贵阳、重庆、广州、西宁(3 个)、郑州(2 个)、香港(7 个)、澳门(2)、台北(7 个))。

由于根域名服务器采用了任播(anycast)技术,因此当DNS客户向某个根域名服务器的IP地址发出查询报文时,互联网上的路由器就能找到离这个DNS客户最近的一个根域名服务器。这样做不仅加快了DNS的查询过程,也更加合理地利用了互联网的资源。

必须指出,目前根域名服务器在全球的分布仍然是很不均衡的。在某些地区根域名服务器还较少,这就影响了上网的速率。

需要注意的是,在许多情况下,根域名服务器并不直接把待查询的域名直接转换成IP地址(根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。

由于根域名服务器在DNS中的地位特殊,因此对根域名服务器有许多具体的要求,如必须能够运行某些程序等.

2、顶级域名服务器(即TLD服务器)

这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。

3、权限域名服务器

这就是前面已经讲过的负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。

4、本地域名服务器

本地域名服务器并不属于之前所示的域名服务器层次结构,但它对域名系统非常重要。当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。由此可看出本地域名服务器的重要性。每一个互联网服务提供者ISP,或一个大学,甚至一个大学里的系,都拥有一个本地域名服务器,本地域名服务器离用户较近,一般不超过几个路由器的距离。当所要查询的主机也属于同一个本地ISP时,该本地域名服务器立即就能将所查询的主机名转换为它的IP地址,而不需要再去询问其他的域名服务器。

5、其他

为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器(master name server),其他的是辅助域名服务器(secondanname server)。当主域名服务器出故障时,辅助域名服务器可以保证 DNS 的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。

下面简单讨论一下域名的解析过程。这里要注意两点。

第一,主机向本地域名服务器的查询一般都采用递归查询(recursive query)。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询域名的地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

第二,本地域名服务器向根域名服务器的查询通常采用迭代查询(iterativequery)。迭代查询的特点是这样的:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询(而不是替本地域名服务器进行后续的查询)。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询,本地域名服务器就这样进行迭代查询。最后,知道了所要解析的域名的IP地址,然后把这个结果返回给发起查询的主机。当然,本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置要求使用哪一种查询方式。
在这里插入图片描述
假定域名为 m.xyz.com 的主机想知道另一台主机(域名为yabc.com)的IP 地址。例如,主机 m.xyz.com 打算发送邮件给主机 y.abc.com。这时就必须知道主机 y.abc.com 的IP 地址。下面是(a)的几个查询步骤:

  1. 主机 m.xyz.com 先向其本地域名服务器 dns.xyz.com 进行递归查询。
  2. 本地域名服务器采用迭代查询。它先向一个根域名服务器查询。
  3. 根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
  4. 本地域名服务器向顶级域名服务器dns.com 进行查询。
  5. 顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址。
  6. 本地域名服务器向权限域名服务器 dns.abc.com 进行查询。
  7. 权限域名服务器 dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
  8. 本地域名服务器最后把查询结果告诉主机m.xyz.com。

我们注意到,这8个步骤总共要使用8个UDP用户数据报的报文。本地域名服务器经过三次迭代查询后,从权限域名服务器 dns.abc.com得到了主机 y.abc.com的IP 地址,最后把结果返回给发起查询的主机 m.xyz.com。

图(b)是本地域名服务器采用递归查询的情况。在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是在其他几个域名服务器之间进行的(步骤3至6)。只是在步骤7,本地域名服务器从根域名服务器得到了所需的IP地址。最后在步骤8,本地域名服务器把查询结果告诉主机m.xyz.com。整个的查询也是使用8个UDP报文。

为了提高DNS查询效率,并减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存(有时也称为高速缓存域名服务器)。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

例如,在图(a)的查询过程中,如果在不久前已经有用户查询过域名为y.abc.com 的IP地址,那么本地域名服务器就不必向根域名服务器重新查询yabc.com的IP地址,而是直接把高速缓存中存放的上次查询结果(即y.abc.com的IP地址)告诉用户。

假定本地域名服务器的缓存中并没有y.abc.com的IP地址,而是存放着顶级域名服务器dns.com的IP地址,那么本地域名服务器也可以不向根域名服务器进行查询,而是直接向com 顶级域名服务器发送查询请求报文。这样不仅可以大大减轻根域名服务器的负荷,而且也能够使互联网上的 DNS 查询请求和回答报文的数量大为减少。

由于名字到地址的绑定"并不经常改变,为保持高速缓存中的内容正确,域名服务器成为每项内容设置计时器并处理超过合理时间的项目(例如,每个项目只存放两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器中获取绑定信息。当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。

不但在本地域名服务器中需要高速缓存,在主机中也很需要。许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机自然应该定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删掉无效的项。由于域名改动并不频繁,大多数网点不需花太多精力就能维护数据库的一致性。

  • 37
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值