文章目录

  • 26.1 远程登录
    • 26.1.1 `TELNET`
      • 1. 分时环境
      • 2. 登录
      • 3. 网络虚拟终端
      • 4. 嵌入
      • 5. 选项
      • 6. 操作方式
    • 26.1.2 Rlogin和SSH
  • 26.2 电子邮件
    • 26.2.1 架构
      • 1. 同一系统的邮件交换
      • 2. 不同系统的邮件交换
      • 3. 发送方通过LAN/WAN连接邮件服务器
      • 4. 最常用的邮件交换
    • 26.2.2 用户代理
      • 1. 用户代理提供的服务
        • (1) 组成报文
        • (2) 读取报文
        • (3) 回答报文
        • (4) 转发报文
        • (5) 处理邮箱
      • 2. 用户代理类型
      • 3. 发送邮件
      • 4. 接收邮件
      • 5. 地址
      • 6. 邮件列表
      • 7. MIME
    • 26.2.3 报文传输代理 `SMTP`
      • 1. 命令和响应
      • 2. 邮件传输阶段
    • 26.2.4 报文访问代理:`POP` 和 `IMAP`
      • 1. `POP3`
      • 2. `IMAP4`
    • 26.2.5 基于Web的邮件
  • 26.3 文件传输
    • 26.3.1 文件传输协议
      • 1. 通过控制连接的通信
      • 2. 通过数据连接的通信
    • 26.3.2 匿名FTP
  • 26.4 RFCS

因特网的主要任务是向用户提供服务,最流行的应用包括远程登录、电子邮件和文件传输。这里讨论这三种应用。在第27章讨论因特网的另一个普遍应用,访问万维网。


26.1 远程登录

在因特网中,用户希望能在一个远程网站上运行多个应用程序,而产生的结果能够传送到本地网站。例如,学生希望能够从他们家里,连接到校园计算机实验室,以便访问应用程序来做家庭作业或完成项目。满足这种需求的一种方法是对每一种需要的服务创建不同的客户/服务器应用程序。现在,可用的应用程序有文件传送程序FTP)和电子邮件SMTP)等。但是,要对每个需求编写一个特定客户/服务器程序是不可能的。

更好的方法是使用通用 general-purpose 的客户/服务器程序,它让用户能够访问远程计算机上的任何应用程序,即允许用户在远程计算机上登录。登录后,用户可使用远程计算机提供的服务,并将结果返回到本地计算机上

26.1.1 TELNET

这一节中,讨论一个客户/服务器应用程序 TELNET ,它是终端网络 TErminaL NETwork 的缩写,是国际标准化组织 ISO 建议的、虚终端服务的标准TCP/IP协议。TELNET允许建立与远程系统的连接,使本地终端看起来像远程系统的一个终端。

1. 分时环境

在TELNET设计出来的时候,多数操作系统(如UNIX)工作在分时 timesharing 的环境下——在这样的环境中,一个大型计算机能够支持许多个用户。用户通过一个终端与计算机交互,这种终端通常是由键盘、显示器和鼠标组成,甚至一个微机也能用一个终端仿真程序 terminal emulator 来模拟一个终端。

2. 登录

在分时环境下,用户是系统的一部分,并具有使用资源的某些权利。每一被授权的用户都有一个标识符,也可能还有一个口令,用户标识符定义用户是系统一部分。要访问系统,用户要使用用户标识符或用户登录名登录到系统。系统还要进行口令检查,以防止非授权用户使用资源。图26.1表示了登录过程。

当用户登录到本地的分时系统时,它称为本地登录 local login 。用户在终端上键入时,或在工作站上运行终端仿真程序时,他的击键就被终端驱动程序 terminal driver 接受;终端驱动程序将字符传递给操作系统;操作系统解释字符的组合,并调用所需的应用程序或实用程序。路径是终端/终端仿真程序 -> 终端驱动程序 -> (分时)操作系统 -> 应用程序(由计算机底层到高层),注意,这是在分时环境下,终端上没有操作系统,而是终端和大型计算机是本地连接

当用户想访问远程机器上的一个应用程序或实用程序时,他就需要进行远程登录 remote login ,此时就需要使用TELNET客户程序和服务器程序。用户将其击键发送给终端驱动程序,这里,本地操作系统接收这些字符,但并不解释它们。这些字符被送到TELNET客户端,它将这些字符转换成称为网络虚拟终端 network virtual terminal, NVT 字符的一个通用字符集,然后将其传送给本地TCP/IP协议栈。

采用网络虚拟终端 NVT 形式的命令或文本,通过因特网传送到远程机器的TCP/IP栈,在那里字符传递给操作系统,然后传送给TELNET服务器,TELENT服务器将这些字符转换成远程计算机可以理解的字符。但是这些字符不能直接传送给操作系统,因为远程的操作系统不能接收来自TELNET服务器的字符,它只能接收来自终端驱动程序的字符。解决方法是增加一个称为伪终端驱动程序的软件块,它将这些字符伪装成好像是从一个终端发来的,然后远程操作系统将这些字符传送给适当的应用程序。路径是 终端/终端仿真程序 -> 终端驱动程序 -> 本地操作系统 -> TELNET客户程序 -> 本地TCP/IP协议栈 -> 因特网 -> 远程TCP/IP协议栈 -> TELNET服务器(伪终端驱动程序) -> 远程操作系统 -> 应用程序

3. 网络虚拟终端

访问一个远程计算机的过程是很复杂的,这是因为「每一个计算机及其操作系统」都接收一个特殊的字符组合作为一个记号,例如在运行DOS操作系统的计算机中,文件结束标记是 Ctrl+Z ,但在UNIX操作系统中,则是 Ctrl+D 。现在是和异构系统打交道。如果我们想要访问世界上的任何远程计算机,那么我们必须先知道将要连接的计算机是什么类型,我们还必须安装那个计算机所用的终端仿真程序

TELNET解决这个问题的方法是定义一个通用的接口,称为网络虚拟终端 network virtual terminal, NVT 字符集。通过这个接口,客户TELNET将来自本地终端的字符(数据或命令)转换成NVT形式,然后传递给网络。而服务器TELNET则将来自NVT形式的数据或命令,转换成远程计算机可接受的形式。图26.2表示了这一概念。

NVT使用两个字符集:一个是数据字符,另一个是控制字符,二者都是 888 位的字符集。对于数据,它的 777 个最低位和ASCII是一样的,而最高位是 000 。而在计算机之间发送(从服务器到客户机或从客户机到服务器)控制字符 control character 时,NVT使用一个 888 位的字符集,其最高位是 111 。表26.1列出某些控制字符及其意义。

4. 嵌入

TELNET仅使用一个TCP连接发送数据和控制字符,服务器使用熟知端口号 232323(DNS使用 535353 ) ,而客户使用一个临时端口。TELNET做到这点,是将控制字符嵌入到数据流中。但是,要将数据与控制字符区别开来,在每个控制字符序列的前面,要加上一个特殊的控制字符,它称为作为控制解释 interpret as control, IAC 。例如,假定用户想要一个服务器显示一个(在远程服务器上的)文件 file1 ,键入:

$ cat file1

然而,假设文件名输入错误(如键入 filea 而不是 file1 ),那么用户可用退格键进行改正:

$ cat filea<backspace>1

但是,在TELNET的默认实现中,用户不能在本地进行编辑,编辑工作必须在远程服务器上进行。退格字符被转换成两个远程字符 IAC EC ,它嵌入在数据中,发送到远程服务器。图26.3表示了发送给服务器的内容。

5. 选项

TELNET让客户与服务器在使用服务之前或期间,可以协商选项。对具有「更加复杂的终端」的用户,这些选项还提供额外的特性。使用较简单终端的用户,只能使用默认的特性。前面讨论的某些控制字符,可用来定义选项,比如 Terminal type 设置终端类型,Terminal speed 设置终端速率,Line mode 改变到行方式。

为了使用前面提到的任何选项,首先需要在客户机与服务器之间进行选项协商 option negotiation 。为此要使用四个控制字符,即NVT选项协商字符集,如表26.3所示:

  • 如果一方有权这样做,它可以提议「激活或禁止一个选项」,对方可以同意或不同意这一个选项 A party can offer to enable or disable an option if it has the right to do so. The offering can be approved or disapproved by the other party.

    • 为了提议激活选项,提议方发送 WILL 命令,意味着 "Will I enable the option?" 。另一方或者发送 DO 命令,就是说同意 "Please do." ,或者发送 DONT 命令,就是说不同意 "Please don't."
    • 为了提议禁止选项,提议方发送 WONT 命令,意味着 "I won't use this option any more."回答必须是 DONT 命令,就是说 "Don't use it anymore."
  • 如果一方有权这样做,它可以请求「另一方激活或禁止一个选项」 A party can request from the other party the enabling or the disabling of an option
    • 为了请求激活,请求方发送 DO 命令,意味着 "Please do enable the option." 。另一方或者发送 WILL 命令,就是说同意 "I will." ,或者发送 WONT 命令,就是说不同意 "I won't."
    • 为了请求禁止,请求方发送 DONT 命令,意味着 "Please don't use this option anymore."回答必须是 WONT 命令,就是说 "I won't use it anymore."

【例26.1】图26.4表示了一个选项协商的示例。在这个例子中,客户希望服务器将发送给服务器的每个字符回显。即,当在用户终端键盘上键入一个字符时,它传送给服务器,并在被处理之前发送回到用户的屏幕上。回显选项 echo option 必须被服务器激活,因为正是服务器将这些字符发回到用户的终端。因此,客户应当请求服务器激活这个选项(使用 DO),这个请求包括三个字符:IAC, DO, ECHO 。服务器接受这个请求,并激活该选项,它通过发送三个字符的认可 IAC, WILL, ECHO 通知客户机。

由于某些选项需要附加的信息,我们需要子选项协商 suboption negotiation 。例如要定义一个终端的类型或速率,协商就要包括一个字符串或者数字来定义类型或速率。不论是哪种情况,表26.4所显示的两个子选项字符,都是进行子选项协商所需要的。

【例26.2】图26.5表示了一个子选项协商的例子。在这个例子中,客户希望协商终端的类型。

6. 操作方式

大多数TELNET实现 333 种工作方式中的一种:默认方式、字符方式或者行方式。

  • 默认方式:如果没有通过选项协商调用其他方式,则使用默认方式 default mode 。在这种方式中,回显由客户完成。用户键入一个字符,客户机将字符回显到屏幕(或打印机)上,但到整个一行完成之前并不发送它。
  • 字符方式:在字符方式 character mode 中,每个键入的字符从客户机发送给服务器。服务器通常将这个字符回显在客户的屏幕上。如果传输时间较长时(如在一个卫星连接中),这种方式的字符回显,可能延迟时间较长。它还产生网络开销(通信量),因为每一个数据字符必须发送 333 个TCP段。
  • 行方式:一种新的方式被提出来,补偿默认方式的不足,在这种称为行方式 line mode 中,行编辑(回显、字符擦除、行擦除等)由客户完成,然后客户将整个行发送给服务器。

26.1.2 Rlogin和SSH

还有几个登录协议,如Rlogin和UNIX中的一个称为安全壳 Secure Shell 的更安全的登录协议,学了以后介绍,比较它们与TELNET的不同。Secure Shell (SSH) 使用 222222 作为熟知端口号,可用TCP或UDP作为支持协议。


26.2 电子邮件

最常用的因特网服务之一就是电子邮件 Electronic Mail, email 。因特网的设计者们可能从未预料到该应用会如此流行。早期因特网时期,用电子邮件发送的报文仅是短小的文本文件,它让人们快速地交换信息。而当今的电子邮件更加复杂,它允许包括文本、音频及视频的报文,同时还允许发送给一个或多个接收者。

本节讨论电子邮件的几个构件——首先讨论电子邮件一般的架构,它包括三个主要的组件:用户代理、报文传输代理和报文访问代理,然后讨论实现这些组件的协议

26.2.1 架构

为了说明电子邮件的架构,这里给出四种情况,从最简单情况开始逐步增加其复杂性,其中第四种情况是最常用的电子邮件交换。

1. 同一系统的邮件交换

在第一种情况中,电子邮件的发送方与接收方是在同一个系统内的用户(或相同的应用程序),它们直接地连接到一个共享系统中。管理员为每个用户创建一个邮箱,在邮箱中存储接收到的报文。邮箱 mailbox 是本地硬盘 local hard drive 的一部分,是限定权限的一个特殊文件 a special file with permission restrictions ,只有邮箱的拥有者可以访问它。

如果一个用户Alice要发送一个报文给另一个用户Bob,Alice运行用户代理 User Agent, UA 程序来准备报文,并在Bob的邮箱中存储该报文。报文中有发送方与接收方 recipient 的邮箱地址 mailbox address(即该文件名)。Bob在他方便时,用UA程序检索他的邮箱,并读取其内容。图26.6表明了这个概念。

这类似于在办公室中职员之间交换传统的便签。有一个邮件空间,其中每个职员都有一个用他自己名字命名的邮箱。当Alice要发送一个便签给Bob时,她写好便签并将它插入到Bob的邮箱。当Bob检查他的邮箱时,他发现Alice的便签并读取它。

当电子邮件的发送方和接收方都在同一个系统上,我们仅需要两个用户代理。

2. 不同系统的邮件交换

在第二种情况中,电子邮件的发送方和接收方是不同系统上的两个用户(或应用程序)。此时,我们需要用户代理 User Agent, UA报文传输代理 Message Transfer Agent, MTA ,如图26.7所示。

Alice需要使用用户代理程序,发送她的报文到她所在网站的系统,她所在网站的系统(有时称为邮件服务器)使用一个队列存储报文并等待发送。Bob也需要一个用户代理程序,检索存储在他的网站邮箱系统中的报文。当然,报文需要通过因特网,从Alice的网站发送到Bob的网站。

可以看到,这种情况下需要一对报文传输代理,一个是客户而另一个是服务器。像大多数因特网上的客户/服务器程序一样,服务器程序始终运行,因为它不知道何时用户将会请求一个连接。另一方面,当队列中有报文要发送时,系统可以向客户端发出提醒 The client, on the other hand, can be alerted by the system when there is a message in the queue to be sent.

当电子邮件的发送方和接收方在不同的系统中时,我们需要两个UA和一对MTA(客户机和服务器)。

3. 发送方通过LAN/WAN连接邮件服务器

在第三种情况中,如同第二种情况一样,Bob直接连接到他的系统,但是Alice没有与她的系统直接连接,Alice或是通过点到点广域网连接到系统(比如用拨号调制解调器、DSL或有线调制解调器),或是连接到机构中的一个局域网,该机构用一个邮件服务器处理电子邮件,即所有用户都要将他们的邮件发送到这个邮件服务器上。图26.8说明了这种情况。

Alice仍旧需要一个用户代理来准备她的报文,然后她需要通过局域网或广域网发送报文,这里需要通过一对报文传输代理(客户和服务器)完成——每当Alice有报文要发送时,她调用用户代理并由它调用MTA客户,MTA客户与系统上一直运行的MTA服务器建立一个连接,Alice网站的系统对接收到的所有报文进行排队。然后,它使用MTA客户向Bob网站的系统发送报文,该系统接收报文并存入Bob的邮箱。Bob在他方便时,使用他的用户代理程序进行检索和读取。

注意,当发送方通过LAN/WAN连接邮件服务器时,我们需要两对MTA客户机/服务器程序。

4. 最常用的邮件交换

在第四种和最常见的情况中,Bob也是通过广域网或局域网,连接到他的邮件服务器。报文到达Bob的邮件服务器后,Bob需要检索它。此时,需要另一组客户机/服务器代理,我们称它为报文访问代理 Message Access Agent 。Bob使用MAA客户端检索他的报文,客户端向始终运行的MAA服务器发送一个请求,并请求报文的传输。情况如图26.9所示。

此处有两个要点。

  • 第一点,Bob不能绕开邮件服务器、而直接使用MTA服务器。原因是,为了直接使用MTA服务器,Bob应该需要始终运行MTA服务器,因为它不知道报文何时到达。这也意味着——如果他通过局域网连接到系统,Bob就必须始终拥有他的计算机;如果他通过广域网连接到系统,他必须始终保持连接。今天,这两种情形都不适用。
  • 第二点,Bob需要另一对客户/服务器程序,即报文访问代理。因为MTA客户/服务器是一个 push 程序,客户端将报文推入服务器,而Bob需要一个 pull 程序,客户端需要从服务器拉出报文。图26.10表示了这种差别。

总的来说,当发送方和接收方通过局域网或广域网连接到邮件服务器时,我们需要两个UA、两对MTA(客户机与服务器)、一对MAA(客户机与服务器),这就是当前最常见的情形。

26.2.2 用户代理

电子邮件系统的第一个组件是用户代理,它向用户提供服务,使发送和接收一个报文变得更容易。

1. 用户代理提供的服务

用户代理是一个软件包(程序),它由组成 composing message 、读取 reading message 、回答 reply to message 和转发报文 forwarding message 组成,它也处理邮箱。图26.11展示了一个典型的用户代理服务。

(1) 组成报文

用户代理帮助用户组成发送出去的电子邮件,大多数用户代理会在屏幕上提供一个标准的格式,由用户来填写,有些甚至还安装了编辑器,可完成拼写检查、文法检查以及其他想要的复杂的字处理任务。当然,用户可以选择使用他喜欢的文本编辑器或字处理器,创建和输入报文,或剪切和粘贴报文到用户代理模板上。

(2) 读取报文

用户代理第二个功能是读取到来的报文。当用户调用用户代理时,它首先在输入邮箱中检查邮件。大多数用户代理都显示每个接收到的邮件的一行摘要。每封电子邮件包含下列字段:

  1. 编号字段;
  2. 表示邮件状态的标记字段,如新的、已读而没回复、已读并已回复等;
  3. 报文的长度;
  4. 发送方;
  5. 可选择的主题字段。

(3) 回答报文

读取报文后,用户可用用户代理,对报文做出回答。通常,用户代理允许对原始的发送方做回复,或对该报文的所有接收方做回复。回答的报文可包含原始的报文(用作快速参考)和新的报文。

(4) 转发报文

回答是指对发送方或报文副本的接收者发送报文,而转发报文是指向第三方发送报文。用户代理允许接收方附带或不附带额外的注释,将报文转发给第三方。

(5) 处理邮箱

通常用户代理创建两个邮箱:收件箱和发件箱。每个邮箱是具有一个特殊格式的文件,它能被用户代理所处理。收件箱保留所有接收到的电子邮件,直到被用户删除为止;发件箱保留所有已发送的电子邮件,直到被用户删除为止。今天,大多数的用户代理有能力创建个性化的邮箱。

2. 用户代理类型

有两种类型的用户代理:命令驱动型和基于GUI型。

  • 命令驱动型:这一类的用户代理属于早期的电子邮件,在服务器中仍然存在这种类型的用户代理。命令驱动型的用户代理,通常是从键盘接收单个字符的命令,以执行某项任务。例如,用户可以在命令提示行输入字符 r ,回答报文的发送方,或输入 R 回答发送方和所有的接收者。命令驱动型用户代理的示例有:mail、pine、elm
  • 基于GUI型:现在的用户代理都是基于GUI型。它们包含图形用户接口 GUI 组件,该组件允许用户使用键盘和鼠标与软件进行交互。它们还有一些图形组件,如图标、菜单条、使服务更容易访问的窗口。基于GUI的用户代理有Eudora、微软的OutlookNetscape

3. 发送邮件

为了发送邮件,用户通过UA创建邮件(准备报文、创建信封并将报文放入信封中),邮件看起来很像邮政邮件,它有一个信封和一个报文(图26.12)。

  • 信封 envelope 通常包含发信人的地址和收件人的地址。
  • 报文包含头部 header主体 body 。报文头部定义了发信人、收件人、报文的主题以及其他信息(如编码类型)。报文的主体包含了由收件人读取的真正信息。

4. 接收邮件

用户(或定时器)触发用户代理检查邮箱。如果用户有邮件,UA就用一个通知来告诉用户;如果用户准备读取邮件,则会显示一个列表,其中列表的每一行包含了邮箱中关于一个特定报文的信息概要,这一概要通常包括发信人的邮件地址、主题以及发送和接收此邮件的时间。用户可以选择任何一个报文,在屏幕上显示它的内容。

5. 地址

为了传递邮件,邮件处理系统必须使用具有唯一地址的寻址系统。在因特网中,地址由两部分构成:本地部分 local part域名 domain name ,并用符号 @ 分隔开(图26.13)所示。

  • 本地部分定义一个特定文件的名字,它称为用户邮箱。在用户邮箱中存储了用户接收到的所有邮件,以便用户代理进行收取。
  • 地址的第二部分是域名。一个组织机构通常选择一个或多个主机,用于接收和发送邮件,这些主机有时称为邮件服务器交换器。分配给每个邮件交换器的域名,或者是来自DNS数据库,或者是一个逻辑名字(例如,该组织机构的名字)。

6. 邮件列表

电子邮件允许用一个名字,即别名 alias ,来表示多个不同的电子邮件地址,这称为邮件列表 mailing list 。每当发送一个报文时,系统就将收信人的名字和别名数据库进行对比——如果定义的别名有邮件列表,则必须为列表中的每个条目准备单独的邮件,并将其交给MTA;如果别名没有邮件列表,那么该名字就是接收地址,并将一个单独的报文传递给邮件传输实体。

7. MIME

电子邮件有一个简单的结构。但它的简单是有代价的,它只能发送使用NVT 7位ASCII格式的报文。即它有一些限制,例如,它不能使用7位ASCII不支持的语言(如法文、德文、希伯来文、俄文、中文以及日文),它不能用来发送二进制文件或者音频、视频数据。

多用途因特网邮件扩充 multipurpose internet mail extension, MIME 是一个辅助协议,它允许非ASCII数据能够通过电子邮件发送。MIME在发送方将非ASCII数据转换成NVT ASCII数据,并将其传递给MTA客户机、通过因特网发送出去。在接收方,再转换成原来的数据。可以将MIME想象为一组软件功能,它能够将非ASCII数据转换成ASCII数据,以及进行相反的转换。如图26.14所示。

MIME定义了五种头部,将MIME的头加在原来电子邮件的头部、以定义转换参数。图26.15表示了MIME的头部,这里讨论每个头部:

  1. MIME-Version :这个头部定义MIME使用的版本,当前版本是 1.11.11.1 —— MIME-Version: 1.1
  2. Content-Type :这个头部定义报文主体使用的数据类型,内容类型和内容子类型用一个斜杆分隔开。根据子类型的不同,头部还可包含其他的一些参数——Content-Type: type/subtype; parameters 。MIME允许 777 种不同的数据类型(正文、多部分、报文、图像、视频、音频、应用),这些类型在表26.5中列出,其中的 Multipart/Alternative 是指几个部分是同一个报文的不同版本
  3. Content-Transfer-Encoding :为了传送,这个头部定义将报文编码为 0s1s 的方法—— Content-Transfer-Encoding: type 。表26.6列出了 555 种类型的编码,其中的 Base-64666 位数据块被编码成 888 位ASCII字符Quoted-printable非ASCII字符被编码成等号后面跟随一个ASCII码
  4. Content-Id :这个头部在多报文环境中,唯一地标识整个报文;
  5. Content-Description :这个头部定义主体是否为图像、音频或视频。

26.2.3 报文传输代理 SMTP

实际的邮件传输,是由报文传输代理MTA完成的。为了发送邮件,系统必须有客户MTA;为了接收邮件,系统必须有服务器MTA。在因特网中,定义MTA客户机和服务器的形式化协议,称为简单邮件传输协议 Simple Mail Transfer Protocol, SMTP 。如前所述,在大多数情况下(第四种情况),使用两对客户机/服务器MTA程序。图26.16表示了这种情况中SMTP管辖的范围。

SMTP在发送方与接收方邮件服务器之间、以及两个邮件服务器之间使用两次,稍后会看到,在邮件服务器和接收方之间,还需要另一个协议。

SMTP只定义了如何来回发送命令和响应,每个网络有权选择一种实现的软件包。在本节剩下的部分,讨论SMTP的邮件传输机制。

1. 命令和响应

SMTP使用一些命令和响应,在MTA客户和MTA服务器之间传输报文(图26.17所示)。每个命令或响应都以一个二字符(回车和换行)的行结束标记来终止。

  • 命令。命令是从客户发送给服务器,命令的格式是 Keyword: argument(s) 。它包括一个关键词,后跟着 000 个或多个变量。SMTP定义了 141414 个命令,前 555 个是强制性的,每一种实现都必须支持这 555 个命令;后面的 333 个是常用的,并且是着重推荐的;最后的 666 个很少使用。在表26.7中列出各种命令。

  • 响应。响应是服务器发送给客户。响应是一个 333 位数字码,后面可以跟着附加的文本信息。表26.8中列出了各种响应。如表所示,响应划分为四大类——肯定的完成回复、肯定的中间回复、瞬态否定的完成回复、永久否定的完成回复,代码的最高位数字 2,3,4,52, 3, 4, 52,3,4,5 定义大类。

2. 邮件传输阶段

传输一个邮件共有三个阶段:连接建立、邮件传输和连接终止。

【例26.3】让我们观察,如何直接使用SMTP发送电子邮件,如何模拟本节所描述的命令与响应。我们使用TELNET登录到端口 252525(SMTP的熟知端口号),然后用命令直接发送电子邮件。在这个例子中,forouzanb@adelphia.net 发送一封电子邮件给他自己。前面的三行表示TELNET试图与
Adelphia邮箱服务器建立连接。连接建立后,我们输入SMTP命令,然后接收响应,如下所示。注意:为了更清晰起见,我们增加了用一些"="符号指定的注释行。这些行不是电子邮件过程的部分。

$ telnet mail.adelphia.net 25
Trying 68.168.78.100 ...
Connected to mail.adelphia.net(68.168.78.100).======== Connection Establishment ===========220 mta13.adelphia.net SMTP server ready Fri, 6 Aug 2004 ...
HELO mail.adelphia.net250 mtal3.adelphia.net
========     Mail TrallSfer   ============
MAIL FROM: forouzanb@adelphia.net250 Sender <forouzanb@adelphia.net> Ok
RCPT TO: forouzanb@adelphia.net250 Recipient <forouzanb@adelphia.net> Ok
DATA354 Ok Send data ending with <CRLF>.<CRLF>
From: Forouzan
TO: ForouzanThis is a test message
to show SMTP in action.======== Connection Termination ===========250 Message received: adelphia.net@mail.adelphia.net
QUIT221 mta13.adelphia.net SMTP server closing connection
Connection closed by foreign host.

26.2.4 报文访问代理:POPIMAP

邮件传递的第一阶段和第二阶段使用 SMTP ,但是因为 SMTP 是一个 push 协议(它将报文从客户推入服务器),第三阶段不使用 SMTP ,因为第三阶段需要一个 pull 协议,客户机必须从服务器“拉出”报文,大量数据的方向是从服务器到客户。第三阶段使用的是报文访问代理协议

目前有两种报文访问代理协议:邮局协议版本3 POP3因特网邮件访问协议版本4 IMAP4 。图26.19显示了在大多数情况下(第四种情况),这两种协议的位置。

1. POP3

邮局协议版本3 Post Office Protocol version 3, POP3 比较简单,但在功能上受到一定的限制。客户端POP3软件安装在收信人的计算机中,服务器POP3软件安装在邮件服务器中。

用户需要从邮件服务器的邮箱中下载邮件时,客户端发起邮件访问操作,客户端(用户代理)开启一个到服务器 110110110 端口的TCP连接。然后发送用户名和口令来访问邮箱。用户就可以逐条列出和读取邮件信息了。图26.20说明了一个使用POP3下载邮件的例子。

POP3有两种模式:删除模式、保存模式

  • 在删除模式下,当邮件从邮箱中读取后,就会从邮箱中删除该邮件。
  • 在保存模式下,邮件经过读取以后,仍然保存在邮箱中。

当用户在固定的计算机上工作时,能够在阅读和回复邮件后、保存并组织接收到的邮件,此时通常使用删除模式。当用户远离他的主计算机(如在便携机上)访问邮件时,通常应该使用保存模式。此时可以阅读邮件,但是邮件通常仍然会保存在系统中,以备日后读取和组织。

POP3在某些方面存在缺点,它不允许用户在服务器上组织邮件;用户在服务器上不能有不同的文件夹。当然,用户能够在自己的计算机上建立文件夹。同时,POP3不允许用户在下载邮件之前,部分地查看邮件的内容。

2. IMAP4

另一个报文访问代理协议(邮件访问协议)是因特网邮件访问协议版本4 Internet Mail Access Protocol version 4, IMAP4 。IMAP4与POP3相似,但有更多特点,功能更强并更复杂。

IMAP4提供下列额外的功能:

  • 用户在下载电子邮件之前,可以检查电子邮件头部;
  • 用户在下载电子邮件之前,可以读取电子邮件内容中的特定字符串;
  • 用户可以部分地下载电子邮件,这在带宽受限制、而电子邮件中包含了需要高带宽的多媒体信息时,特别有用;
  • 用户可以在邮件服务器上创建或删除邮箱,也可以改变邮箱的名字;
  • 用户可以在文件夹中,创建邮箱的层次结构,以用于邮件存储。

26.2.5 基于Web的邮件

电子邮件是一种很常见的应用,目前有很多Web网站对任何访问者都提供这一服务,如Gmail、QQ Mail、Outlook等。其思想很简单,Alice的邮件通过HTTP(见第27章)从她的浏览器传输到她的邮件服务器,报文从邮件发送服务器、通过SMTP发送到邮件接收服务器。最后,该报文从邮件接收服务器(Web服务器)通过HTTP发送到Bob的浏览器。

最后一个阶段值得注意一下,通常使用HTTP代替POP3或者IMAP4。当Bob需要读写他的邮件时,他会发送报文到Web网站上(例如Hotmail),Web网站会返回一个表单,由Bob填写,包括登录名和口令。如果登录名和口令匹配,电子邮件会从Web服务器以HTML格式,传送到Bob的浏览器。


26.3 文件传输

从一个计算机到另一个计算机传输文件,是在联网或互联网环境中,最常见的任务之一。事实上,今天在因特网上数据交换的最大量应属于文件传输。本节中,讨论传送文件最常用的协议:文件传输协议 FTP

26.3.1 文件传输协议

文件传输协议 File Transfer Protocol, FTP 是TCP/IP提供的标准机制,用于从一个主机将文件复制到另一个主机。虽然,从一个系统到另一个系统传送文件,看起来是很简单而且直观,但首先还要解决一些问题——例如,两个系统可能使用不同的文件名约定;两个系统使用不同的方式表示文本和数据;两个系统具有不同的目录结构。所有这些问题,都已经由FTP以一种非常简单巧妙的方法解决了——FTP在两个不同的系统之间,使用NVT ASCII进行通信。

FTP与其他客户/服务器应用程序的不同之处在于,它在主机之间建立两个连接。一个连接终于数据传输,另一个用于控制信息传输(命令和响应)。将命令和数据传输分开,使得FTP的效率更高。控制连接使用非常简单的通信规则,我们需要传输的只是一次一行命令或者一行响应;另一方面,数据传输需要更加复杂的规则,因为传输的数据类型种类多。

FTP使用TCP服务,它需要两个TCP连接,即需要两个熟知TCP端口号:端口 202020 用于数据连接,端口 212121 用于控制连接。图26.21说明了FTP的基本模型,客户有三个组件:用户接口、客户控制进程、客户数据传输进程。服务器由两个组件:服务器控制进程、服务器数据传输进程。控制连接是在控制进程之间进行的,数据连接是在数据传输进程之间进行的

在整个交互的FTP会话期间,控制连接 control connection 始终处于连接状态数据连接 data connection 则在每次传输文件时开启、然后关闭——每当牵涉到文件传输的命令被使用时,数据连接就被打开,而当文件传输完毕时连接就关闭。即,当用户开始FTP会话时,控制连接就被打开。在控制连接处于打开状态期间,如果传输多个文件,那么数据连接可以打开和关闭多次。

1. 通过控制连接的通信

FTP使用如SMTP那样的方法,通过控制连接进行通信。它使用 777 位ASCII字符集(图26.22)。通信是通过「命令和响应」来完成的。这种简单方法对控制连接是合适的,因为我们一次发送一条命令(或响应)。每一条命令或响应都是一个短行,因此不必担心它的文件格式或文件结构,每一行结束处是两个字符(回车和换行)的行结束记号。

2. 通过数据连接的通信

数据连接的目的和实现与控制连接是不同的,我们通过数据连接来传输文件。在控制连接上发送的命令控制下,在数据连接上进行文件传输。但是要记住,FTP的文件传输表示三件事之一:

  • 从服务器将一个文件复制到客户,这称为读取文件,是在 RETR 命令监管下完成的;
  • 从客户将一个文件复制到服务器,这称为存储文件,是在 STOP 命令监管下完成的;
  • 从服务器向客户发送目录或文件名列表,这是在 LIST 命令监管下完成的。应注意,FTP将目录或文件名列表当做一个文件 FTP treats a list of directory or file names as a file ,它在数据连接上发送。

客户必须定义要传送的文件类型、数据结构和传输方式。在通过数据连接传送数据之前,我们通过控制连接准备传输,定义三个通信属性来解决(异构性问题):文件类型、数据结构和传输方式(图26.23)。

  • 文件类型:FTP能够在数据连接上,传送下列文件中的一种:ASCII文件、EBCDIC文件、图像文件。

    • ASCII文件是传送文本文件的默认格式,每个字符使用 777 位ASCII进行编码。发送方将文件从它自己的表示方式转换成ASCII字符,而接收方从ASCII字符转换成它自己的表示方式。
    • 如果连接的一方或两方使用EBCDIC编码(IBM使用的传输格式),则可用EBCDIC编码发送文件。
    • 图像文件 image file 是传送二进制文件的默认格式。这种文件作为连续的位流传送、而没有解释或编码。它在大多数情况下是用来传送二进制文件,如已编译的程序。
  • 数据结构:FTP可使用下列数据结构中的一种,在数据连接上发送文件:文件结构、记录结构和页面结构。
    • 文件结构 file structure 中,文件是连续的字节流。
    • 记录结构 record structure 中,文件划分成一些记录,这只能用于文本文件
    • 页面结构 page structure 中,文件划分成一些页面,每个页面有一个页面号和页面头部,页面可以随机地或顺序地存储或访问。
  • 传输方式:FTP可以使用下列三种传输方式之一,在数据连接上传送文件:流方式、块方式和压缩方式。
    • 流方式 stream mode 是默认方式,数据作为连续的字节流,从FTP传递给TCP,TCP负责将数据划分成适当大小的段。

      • 如果数据是简单的字节流(文件结构),就不需要文件结束符,在这种情况下,发送方使用文件结束符关闭数据连接 End-of-file in this case is the closing of the data connection by the sender
      • 如果数据划分为记录(记录结构),则每个记录将有一个 111 字节的记录结束 EOR 字符,而在文件的结束处有一个文件结束 EOF 字符。
    • 块方式 block mode 中,数据可以按块从FTP传递给TCP。在这种情况下,每个块的前面有一个 333 字节的头部,第一个字节称为块描述符,下面两个字节定义块的大小(以字节为单位)。
    • 压缩方式 compressed mode 中,如果文件很大,数据可进行压缩。通常使用的压缩方法是游程长度编码 run-length encoding(此方法中,数据单元的连续出现,可用一个出现和重复数来代替 consecutive appearances of a data unit are replaced by one occurrence and the number of repetitions)。在文件文件中,这通常是空格 spaces(blanks) ;在二进制文件中,空字符 null characters 常常被压缩。

【例26.4】下面使用FTP会话读出目录中的项目清单。

$ ftp voyager.deanza.tbda.edu
Connected to voyager.deanza.tbda.edu.
220 (vsFTPd 1.2.1)
530 Please login with USER and PASS.
Name (voyager.deanza.tbda.edu:forouzan): forouzan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.ftp> ls reports
227 Entering Passive Mode (153,18,17,11,238,169)
150 Here comes the directory listing.
drwxr-xr-x 23027 411 4096 Sep 24 2002 business
drwxr-xr-x 23027 411 4096 Sep 24 2002 personal
drwxr-xr-x 23027 411 4096 Sep 24 2002 school
226 Directory send OK
.
ftp> quit
221 Goodbye.

具体过程如下:

  1. 在创建了控制连接后,FTP服务器在控制连接上发送 220220220(服务器就绪)响应。
  2. 客户发送它的名字。
  3. 服务器用 331331331(用户名正确,需要口令)响应。
  4. 客户发送口令(不显示出来)。
  5. 服务器用 230230230(用户登录正确)响应。
  6. 客户发送列表 ls 命令,查找名为 report 的目录中的文件列表 find the list of files on the directory named report
  7. 现在,服务器用 150150150 响应,并打开数据连接。
  8. 然后,服务器在数据连接上传送「文件或目录」的列表(作为一个文件)。当整个列表(文件)发送出后,服务器在控制连接上用 226226226(关闭连接)响应。
  9. 客户现在有两个选择。可以使用 QUIT 命令,请求关闭这个控制连接;或者可以发送另一个命令,开始另一个活动(甚至打开另一个数据连接)。在上例中,客户发送一个 QUIT 命令。
  10. 接收到 QUIT 命令后,服务器用 221221221(服务关闭)响应,然后关闭控制连接。

26.3.2 匿名FTP

要使用FTP,用户就需要在远程服务器上有一个账号(用户名)和口令。有些网站有一组可供公众使用 public access 的文件,用来激活匿名FTP anonymous FTP 。要使用这些文件,用户不需要有账户和口令。因此,可用 anonymous 这个字作为用户名和使用 guest 这个字作为口令。

用户访问这样的系统是受限制的,有些网站只允许用户使用命令的一个子集。例如,大多数网站允许用户复制某些文件,但不允许用户任意查找目录。

【例26.5】我们给出了匿名FTP的例子,假定在 internic.net 上有些公众数据是可用的。

$ ftp internic.net
Connected to internic.net
220 Server ready
Name: anonymous
331 Guest login OK, send "guest" as password
Password: guest
ftp> pwd
257 '/' is current directory
ftp> ls
200 0K
150 Opening ASCII mode
bin
...
...
...
ftp> close
221 Goodbye
ftp> quit

26.4 RFCS

关于TELNET:

137, 340, 393, 426, 435, 452, 466, 495, 513, 529, 562, 595, 596, 599, 669, 679,
701, 702, 703, 728, 764, 782, 818, 854, 855, 1184, 1205, 2355

关于SMTP、POP和IMAP:

196, 221, 224, 278, 524, 539, 753, 772, 780, 806, 821, 934, 974, 1047, 1081,
1082, 1225, 1460, 1496, 1426, 1427, 1652, 1653, 1711, 1725, 1734, 1740, 1741,
1767, 1869, 1870, 2045, 2046, 2047, 2048, 2177, 2180, 2192, 2193, 2221, 2342,
2359, 2449, 2683, 2503

关于FTP:

114, 133, 141, 163, 171, 172, 238, 242, 250, 256, 264, 269, 281, 291, 354,
385, 412, 414, 418, 430, 438, 448, 463, 468, 478, 486, 505, 506, 542, 553,
624, 630, 640, 691, 765, 913, 959, 1635, 1785, 2228, 2577

【计算机网络】第六部分 应用层(26) 远程登录、电子邮件与文件传输相关推荐

  1. 计算机网络第六弹——应用层

    计算机网络第六弹--应用层 彩蛋 计算机网络谢希仁第七版原版ppt获取方式:公众号后台回复"N3"即可获取. 由于公众号不支持显示LaTeX公式且公众号排版混乱,建议大家关注微信公 ...

  2. 跳板机连接linux服务器,linux通过跳板机连接远程服务器并进行文件传输的方法...

    linux通过跳板机连接远程服务器并进行文件传输的方法 最近在linux主机上部署环境时,遇到了很多问题,第一个就是通过跳板机远程连接服务器传输文件的问题. 看了很多网上的解决办法,大部分就是说用Se ...

  3. 计算机网络--第六章 应用层--课后习题答案

    计算机网络原理第五版课后的全部习题答案,学习通作业答案. 说明:计算机网络原理其他章节的习题答案也在此"计算机网络"专栏. 6-01 因特网的域名结构是怎么样的?它与目前的电话网的 ...

  4. 王道考研计算机网络第六章——应用层

    目录 6.1 网络应用模型 6.1.1 应用层概述 6.1.2 网络应用模型 1 客户/服务器模型(Client/Server) 2 P2P模型(Peer-to-peer) 6.2  DNS系统(53 ...

  5. 【计算机网络基础 六】应用层

    应用层是为了解决某一类应用问题,而问题的解决又是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的.这些服务通常使用对应的协议,常见的几种服务协议有(HTTP,FTP/TFTP, TELEN ...

  6. 计算机网络 第六章 应用层

    计算机网络的最后一章,内容上也没什么特别重要的东西,当初老师也没有讲,这里只按照王道整理一下知识点,不再多写了. 6.1 DNS域名系统 域名系统是因特网使用的命名系统,用于将具有特定含义的主机名转换 ...

  7. 计算机网络(六)应用层

    文章目录 应用层概述 概览 网络应用模型 DNS 概述 域名解析 域名服务器 解析过程 FTP 电子邮件 万维网 万维网 WWW 统一资源定位符 URL 超文本传输协议 HTTP HTTP概述 HTT ...

  8. ssh配置免密登录、scp文件传输免密

    使用ssh相关命令,如scp等的时候,输入密码是很麻烦的事,而且有时候需要做自动化操作,这个时候还要人手动输入密码就没法玩了,我们可以通过配置rsa私钥和公钥的方式来免密ssh登录. 也可以直接使用s ...

  9. ubuntu 远程连接服务器以及文件传输

    一.连接远程服务器 sudo apt-get update sudo apt-get install openssh-server sudo ps -e |grep ssh #检查是否安装成功,如果正 ...

最新文章

  1. Scala模式匹配的亮点——Martin Odersky访谈(四)
  2. GreenDao 使用方法:
  3. Kotlin exception
  4. nginx的root alias 指令
  5. 直播推流实现RTMP协议的一些注意事项
  6. numpy.matrixlib.defmatrix.matrix写入csv文件
  7. numpy T、transpose()函数、swapaxes()函数
  8. 线上一个数组查询遇到的坑
  9. 测试基础-03-用例设计方法:案例讲解
  10. leetcode力扣454. 四数相加 II
  11. halcon 旋转_HALCON高级篇:面阵相机模型及其坐标转换
  12. 诊断Oracle 服从成绩
  13. 北大青鸟软件工程师ACCP4.0课程
  14. linux python tab补全_Linux设置python自动tab自动补全
  15. 华为交换机怎么关闭信息提示_iPhone 关闭支付宝自动扣费服务提示“无法解约”怎么办?...
  16. 半路学习编程,有希望成为大牛吗?
  17. android 自动打开钉钉,安卓定时自动打开钉钉考勤打卡
  18. 解决:Please either set ERLANG_HOME to point to your Erlang installation or place the RabbitMQ server d
  19. 图像质量评价函数SSIM介绍
  20. yarn的安装和使用(全网最详细)

热门文章

  1. 浅显易懂的理解SQL各种锁(基于MYSQL 8.0.28)
  2. es6 混合commjs_ES6 模块化的时代真的来临了么?Using MJS
  3. 玩客云手动设置IP地址
  4. Java筑基10-封装继承多态(重点)
  5. Playing Atari with Deep Reinforcement Learning-笔记
  6. C++ 模板进阶(模板的特化)
  7. 网络数据保障ptop_网络影响未来十大预言 宽带应用将与新媒体融合
  8. pythonstdin_理解Python中的stdin stdout stderr - The Hard Way Is Easier
  9. HDU6069(数学)
  10. android siri声波动画,Waver声波效果开源项目:和 Siri 一起学数学