Loading

09-应用层-DNS&FTP&Telnet

1. 应用层

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

在上一章,我们已学习了运输层为应用进程提供了端到端的通信服务。但不同的网络应用的应用进程之间,还需要有不同的通信规则。因此在运输层协议之上,还需要有应用层协议(Application Layer Protocol)。

这是因为,每个应用层协议都是为了解决某一类应用问题,而问题的解决又必须通过位于不同主机中的多个应用进程之间的通信和协同工作来完成。应用进程之间的这种通信必须遵循严格的规则。应用层的具体内容就是精确定义这些通信规则。

具体来说,应用层协议应当定义:

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

互联网公共领域的标准应用的应用层协议是由 RFC 文档定义的,大家都可以使用。例如:

  1. DNS(域名系统)
  2. FTP(文件传输协议)
  3. Telnet(远程终端协议)
  4. HTTP(超文本传送协议)
  5. SMTP(邮件发送协议)
  6. POP3(邮件接收协议)
  7. SNMP(简单网络管理协议)
  8. TFTP(简单文件传送协议)

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

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

2. DNS

2.1 域名系统

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

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

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

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

早在 ARPANET 时代,整个网络上只有数百台计算机,那时使用一个叫做 hosts 的文件,列出所有主机名字和相应的 IP 地址。只要用户输入一台主机名字,计算机就可很快地把这台主机名字转换成机器能够识别的二进制 IP 地址。从理论上讲,整个互联网可以只使用一个域名服务器,使它装入互联网上所有的主机名,并回答所有对 IP 地址的查询。然而这种做法并不可取。因为互联网规模很大,这样的域名服务器肯定会因过负荷而无法正常工作,而且一旦域名服务器出现故障,整个互联网就会瘫痪。因此,早在 1983年联网就开始采用层次状结构的命名方法,并使用〈分布式的域名系统 DNS〉。

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

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

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

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

2.2 树状域名结构

早期的互联网使用了非等级的名字空间,其优点是名字简短。但当互联网上的用户数急剧增加时,用非等级的名字空间来管理一个很大的而且是经常变化的名字集合是非常困难的。因此,互联网后来就采用了层次树状结构的命名方法,就像全球邮政系统和电话系统那样。

采用这种命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。这里,“域”是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。

从语法上讲,每一个域名都由标号(label)序列组成,而各标号之间用点隔开。如下是中央电视台用于收发电子邮件的计算机(即邮件服务器)的域名,它由三个标号组成,其中标号 com 是顶级域名,标号 cctv 是二级域名,标号 mail 是三级域名。

  • DNS 规定,域名中的标号都由英文字母和数字组成,每一个标号不超过 63 个字符(但为了记忆方便,最好不要超过 12 个字符),也不区分大小写字母(如 CCTV 或 cctv 在域名中是等效的)。标号中除连字符 () 外不能使用其他的标点符号。
  • 级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边。由多个标号组成的完整域名总共不超过 255个字符。DNS 既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。
  • 各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由 ICANN 进行管理。用这种方法可使每一个域名在整个互联网范围内是唯一的,并且也容易设计出一种查找域名的机制。

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

据 2012 年 5 月的统计[W-IANA-root],现在顶级域名 TLD(Top Level Domain)已有 326 个。原先的顶级域名共分为三大类:

用域名树来表示互联网的域名系统是最清楚的。下图是互联网域名空间的结构,它实际上是一个倒过来的树,在最上面的是「根」,但没有对应的名字。根下面一级的节点就是最高一级的顶级域名(由于根没有名字,所以在根下面一级的域名就叫做顶级域名)。顶级域名可往下划分子域,即二级域名。再往下划分就是三级域名、四级域名,等等。

2.3 域名服务器

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

一个服务器所负责管辖的(或有权限的)范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器(Authoritative Name Server),用来保存该区中的所有主机的域名到 IP 地址的映射。

总之,DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位。“区”是 DNS 服务器实际管辖的范围。“区”可能等于或小于“域”,但一定不能大于“域”。

区的不同划分方法的举例。假定 abc 公司有下属部门 x 和y,部门下面又分三个分部门 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 的分布式结构。在图中的每一个域名服务器都能够进行部分域名到 IP 地址的解析。当某个 DNS 服务器不能进行域名到 IP 地址的转换时,它就设法找互联网上别的域名服务器进行解析。

从图可看出,互联网上的 DNS 域名服务器也是按照层次安排的。每一个域名服务器都只对域名体系中的一部分进行管辖。根据域名服务器所起的作用,可以把域名服务器划分为以下 4 种不同的类型:

  1. 根域名服务器
  2. 顶级域名服务器
  3. 权限域名服务器
  4. 本地域名服务器

3. FTP

FTP(File Transfer Protocol)是联网上使用得最广泛的文件传送协议。FTP 提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用 ASCII 码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。FTP 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。

网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中。初看起来,在两台主机之间传送文件是很简单的事情。其实这往往非常困难。原因是众多的计算机厂商研制出的文件系统多达数百种,且差别很大。经常遇到的问题是:

  1. 计算机存储数据的格式不同;
  2. 文件的目录结构合文件命名的规定不同;
  3. 对于相同的文件存取功能,操作系统使用的命令不同;
  4. 访问控制方法不同。

文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。

FTP 使用 C/S 方式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程负责处理单个请求。

主进程的工作步骤如下:

  1. 打开熟知端口(端口号为 21),使客户进程能够连接上;
  2. 等待客户进程发出连接请求;
  3. 启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程;
  4. 回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发进行的。

在进行文件传输时,FTP 的客户和服务器之间要建立两个并行的 TCP 连接:“控制连接”和“数据连接”。控制连接在整个会话期间一直保持打开,FTP 客户所发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。实际用于传输文件的是“数据连接”。服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”,用来连接客户端和服务器端的数据传送进程。数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行。由于 FTP 使用了一个分离的控制连接,因此 FTP 的控制信息是带外(out of band)传送的。

当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口 21,同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口 20 与客户进程所提供的端口号建立数据传送连接。由于FTP 使用了两个不同的端口号,所以“控制连接”和“数据连接”不会发生混乱。

使用两个独立的连接的主要好处是使协议更加简单和更容易实现,同时在传输文件时还可以利用控制连接对文件的传输进行控制。例如,客户发送“请求终止传输”。

FTP并非对所有的数据传输都是最佳的。

例如,计算机 A 上运行的用要在远地计算机 B 的一个很大的文末尾添加一行信息。若使用 FTP,则应先将此文件从计算机 B 传送到计算机 A,添加上这一行信息后,再用 FTP 将此文件传送到计算机 B,来回传送这样大的文件很花时间。实际上这种传送是不必要的,因为计算机 A 并没有使用该文件的内容。

然而网络文件系统 NFS 则采用另一种思路。NFS 许应用进程打开一个远地文件,并能在该文件的某一个特定的位置上开始读写数据。这样,NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。对于上述例子,计算机 A 中的 NFS 客户软件,把要添加的数据和在文件后面写数据的请求一起发送到远地的计算机 B 中的 NFS服务器,NFS 服务器更新文件后返回应答信息。在网络上传送的只是少量的修改数据。

4. TELNET

TELNET 是一个简单的远程终端协议,它也是互联网的正式标准。用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一台主机上(使用主机名或 IP 地址)。TELNET 能将用户的击键传到远地主机,同时也能将远地主机的输出通过 TCP 连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。因此,TELNET 又称为”终端仿真协议“。

TELNET 也使用客户服务器方式。在本地系统运行 TELNET 客户进程,而在远地主机则运行 TELNET 服务器进程。和 FTP 的情况相似,服务器中的主进程等待新的请求,并产生从属进程来处理每一个连接。

TELNET 能够适应许多计算机和操作系统的差异。例如,对于文本中一行的结束,有的系统使用 ASCII 码的回车(CR),有的系统使用换行(LF),还有的系统使用两个字符,回车换行(CR-LF)。又如,在中断一个程序时,许多系统使用 Control-C (C),但也有系统使用ESC 按键。

为了适应这种差异,TELNET 定义了数据和命令应怎样通过互联网。这些定义就是所谓的网络虚拟终端NVT(Network Virtual Terminal)。下图说明了 NVT 的意义。客户软件把用户的击键和命令转换成 NVT 格式,并送交服务器。服务器软件把收到的数据和命令从 NVT 格式转换成远地系统所需的格式。向用户返回数据时,服务器把远地系统的格式转换为 NVT 格式,本地客户再从 NVT 格式转换到本地系统所需的格式。

NVT 的格式定义很简单。所有的通信都使用 8 位一个字节。在运转时,NVT 使用 7 位 ASCII 码传送数据,而当高位置 1 时用作控制命令。ASCII 码共有 95 个可打印字符(如字母、数字、标点符号)和 33 个控制字符。所有可打印字符在 NVT 中的意义和在 ASCII 码中一样。但 NVT 只使用了 ASCII 码的控制字符中的几个。此外,NVT 还定义了两字符的 CR-LF 为标准的行结束控制符。当用户键入回车按键时,TELNET 的客户就把它转换为 CR-LF 再进行传输,而 TELNET 服务器要把 CR-LF 转换为远地机器的行结束字符。

TELNET 的选项协商(Option Negotiation)使 TELNET 客户和 TELNET 服务器可商定使用更多的终端功能,协商的双方是平等的。

posted @ 2023-03-10 11:28  tree6x7  阅读(93)  评论(0编辑  收藏  举报