admin管理员组文章数量:1660604
文章目录
- 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使用两个字符集:一个是数据字符,另一个是控制字符,二者都是
8
8
8 位的字符集。对于数据,它的
7
7
7 个最低位和ASCII是一样的,而最高位是
0
0
0 。而在计算机之间发送(从服务器到客户机或从客户机到服务器)控制字符 control character
时,NVT使用一个
8
8
8 位的字符集,其最高位是
1
1
1 。表26.1列出某些控制字符及其意义。
4. 嵌入
TELNET仅使用一个TCP连接发送数据和控制字符,服务器使用熟知端口号
23
23
23(DNS使用
53
53
53 ) ,而客户使用一个临时端口。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实现 3 3 3 种工作方式中的一种:默认方式、字符方式或者行方式。
- 默认方式:如果没有通过选项协商调用其他方式,则使用默认方式
default mode
。在这种方式中,回显由客户完成。用户键入一个字符,客户机将字符回显到屏幕(或打印机)上,但到整个一行完成之前并不发送它。 - 字符方式:在字符方式
character mode
中,每个键入的字符从客户机发送给服务器。服务器通常将这个字符回显在客户的屏幕上。如果传输时间较长时(如在一个卫星连接中),这种方式的字符回显,可能延迟时间较长。它还产生网络开销(通信量),因为每一个数据字符必须发送 3 3 3 个TCP段。 - 行方式:一种新的方式被提出来,补偿默认方式的不足,在这种称为行方式
line mode
中,行编辑(回显、字符擦除、行擦除等)由客户完成,然后客户将整个行发送给服务器。
26.1.2 Rlogin和SSH
还有几个登录协议,如Rlogin和UNIX中的一个称为安全壳 Secure Shell
的更安全的登录协议,学了以后介绍,比较它们与TELNET的不同。Secure Shell (SSH)
使用
22
22
22 作为熟知端口号,可用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) 读取报文
用户代理第二个功能是读取到来的报文。当用户调用用户代理时,它首先在输入邮箱中检查邮件。大多数用户代理都显示每个接收到的邮件的一行摘要。每封电子邮件包含下列字段:
- 编号字段;
- 表示邮件状态的标记字段,如新的、已读而没回复、已读并已回复等;
- 报文的长度;
- 发送方;
- 可选择的主题字段。
(3) 回答报文
读取报文后,用户可用用户代理,对报文做出回答。通常,用户代理允许对原始的发送方做回复,或对该报文的所有接收方做回复。回答的报文可包含原始的报文(用作快速参考)和新的报文。
(4) 转发报文
回答是指对发送方或报文副本的接收者发送报文,而转发报文是指向第三方发送报文。用户代理允许接收方附带或不附带额外的注释,将报文转发给第三方。
(5) 处理邮箱
通常用户代理创建两个邮箱:收件箱和发件箱。每个邮箱是具有一个特殊格式的文件,它能被用户代理所处理。收件箱保留所有接收到的电子邮件,直到被用户删除为止;发件箱保留所有已发送的电子邮件,直到被用户删除为止。今天,大多数的用户代理有能力创建个性化的邮箱。
2. 用户代理类型
有两种类型的用户代理:命令驱动型和基于GUI型。
- 命令驱动型:这一类的用户代理属于早期的电子邮件,在服务器中仍然存在这种类型的用户代理。命令驱动型的用户代理,通常是从键盘接收单个字符的命令,以执行某项任务。例如,用户可以在命令提示行输入字符
r
,回答报文的发送方,或输入R
回答发送方和所有的接收者。命令驱动型用户代理的示例有:mail、pine、elm。 - 基于GUI型:现在的用户代理都是基于GUI型。它们包含图形用户接口
GUI
组件,该组件允许用户使用键盘和鼠标与软件进行交互。它们还有一些图形组件,如图标、菜单条、使服务更容易访问的窗口。基于GUI的用户代理有Eudora、微软的Outlook 和Netscape。
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的头部,这里讨论每个头部:
MIME-Version
:这个头部定义MIME使用的版本,当前版本是 1.1 1.1 1.1 ——MIME-Version: 1.1
;Content-Type
:这个头部定义报文主体使用的数据类型,内容类型和内容子类型用一个斜杆分隔开。根据子类型的不同,头部还可包含其他的一些参数——Content-Type: type/subtype; parameters
。MIME允许 7 7 7 种不同的数据类型(正文、多部分、报文、图像、视频、音频、应用),这些类型在表26.5中列出,其中的Multipart/Alternative
是指几个部分是同一个报文的不同版本。
Content-Transfer-Encoding
:为了传送,这个头部定义将报文编码为0s
和1s
的方法——Content-Transfer-Encoding: type
。表26.6列出了 5 5 5 种类型的编码,其中的Base-64
是 6 6 6 位数据块被编码成 8 8 8 位ASCII字符,Quoted-printable
是非ASCII字符被编码成等号后面跟随一个ASCII码。
Content-Id
:这个头部在多报文环境中,唯一地标识整个报文;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)
。它包括一个关键词,后跟着 0 0 0 个或多个变量。SMTP定义了 14 14 14 个命令,前 5 5 5 个是强制性的,每一种实现都必须支持这 5 5 5 个命令;后面的 3 3 3 个是常用的,并且是着重推荐的;最后的 6 6 6 个很少使用。在表26.7中列出各种命令。
-
响应。响应是服务器发送给客户。响应是一个 3 3 3 位数字码,后面可以跟着附加的文本信息。表26.8中列出了各种响应。如表所示,响应划分为四大类——肯定的完成回复、肯定的中间回复、瞬态否定的完成回复、永久否定的完成回复,代码的最高位数字 2 , 3 , 4 , 5 2, 3, 4, 5 2,3,4,5 定义大类。
2. 邮件传输阶段
传输一个邮件共有三个阶段:连接建立、邮件传输和连接终止。
【例26.3】让我们观察,如何直接使用SMTP发送电子邮件,如何模拟本节所描述的命令与响应。我们使用TELNET登录到端口
25
25
25(SMTP的熟知端口号),然后用命令直接发送电子邮件。在这个例子中,forouzanb@adelphia
发送一封电子邮件给他自己。前面的三行表示TELNET试图与
Adelphia邮箱服务器建立连接。连接建立后,我们输入SMTP命令,然后接收响应,如下所示。注意:为了更清晰起见,我们增加了用一些"="符号指定的注释行。这些行不是电子邮件过程的部分。
$ telnet mail.adelphia 25
Trying 68.168.78.100 ...
Connected to mail.adelphia(68.168.78.100).
======== Connection Establishment ===========
220 mta13.adelphia SMTP server ready Fri, 6 Aug 2004 ...
HELO mail.adelphia
250 mtal3.adelphia
======== Mail TrallSfer ============
MAIL FROM: forouzanb@adelphia
250 Sender <forouzanb@adelphia> Ok
RCPT TO: forouzanb@adelphia
250 Recipient <forouzanb@adelphia> Ok
DATA
354 Ok Send data ending with <CRLF>.<CRLF>
From: Forouzan
TO: Forouzan
This is a test message
to show SMTP in action.
======== Connection Termination ===========
250 Message received: adelphia@mail.adelphia
QUIT
221 mta13.adelphia SMTP server closing connection
Connection closed by foreign host.
26.2.4 报文访问代理:POP
和 IMAP
邮件传递的第一阶段和第二阶段使用 SMTP
,但是因为 SMTP
是一个推 push
协议(它将报文从客户推入服务器),第三阶段不使用 SMTP
,因为第三阶段需要一个拉 pull
协议,客户机必须从服务器“拉出”报文,大量数据的方向是从服务器到客户。第三阶段使用的是报文访问代理协议。
目前有两种报文访问代理协议:邮局协议版本3 POP3
和因特网邮件访问协议版本4 IMAP4
。图26.19显示了在大多数情况下(第四种情况),这两种协议的位置。
1. POP3
邮局协议版本3 Post Office Protocol version 3, POP3
比较简单,但在功能上受到一定的限制。客户端POP3软件安装在收信人的计算机中,服务器POP3软件安装在邮件服务器中。
用户需要从邮件服务器的邮箱中下载邮件时,客户端发起邮件访问操作,客户端(用户代理)开启一个到服务器
110
110
110 端口的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端口号:端口
20
20
20 用于数据连接,端口
21
21
21 用于控制连接。图26.21说明了FTP的基本模型,客户有三个组件:用户接口、客户控制进程、客户数据传输进程。服务器由两个组件:服务器控制进程、服务器数据传输进程。控制连接是在控制进程之间进行的,数据连接是在数据传输进程之间进行的。
在整个交互的FTP会话期间,控制连接 control connection
始终处于连接状态;数据连接 data connection
则在每次传输文件时开启、然后关闭——每当牵涉到文件传输的命令被使用时,数据连接就被打开,而当文件传输完毕时连接就关闭。即,当用户开始FTP会话时,控制连接就被打开。在控制连接处于打开状态期间,如果传输多个文件,那么数据连接可以打开和关闭多次。
1. 通过控制连接的通信
FTP使用如SMTP那样的方法,通过控制连接进行通信。它使用
7
7
7 位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文件是传送文本文件的默认格式,每个字符使用 7 7 7 位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
。 - 如果数据划分为记录(记录结构),则每个记录将有一个
1
1
1 字节的记录结束
EOR
字符,而在文件的结束处有一个文件结束EOF
字符。
- 如果数据是简单的字节流(文件结构),就不需要文件结束符,在这种情况下,发送方使用文件结束符关闭数据连接
- 块方式
block mode
中,数据可以按块从FTP传递给TCP。在这种情况下,每个块的前面有一个 3 3 3 字节的头部,第一个字节称为块描述符,下面两个字节定义块的大小(以字节为单位)。 - 压缩方式
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.
具体过程如下:
- 在创建了控制连接后,FTP服务器在控制连接上发送 220 220 220(服务器就绪)响应。
- 客户发送它的名字。
- 服务器用 331 331 331(用户名正确,需要口令)响应。
- 客户发送口令(不显示出来)。
- 服务器用 230 230 230(用户登录正确)响应。
- 客户发送列表
ls
命令,查找名为report
的目录中的文件列表find the list of files on the directory named report
。 - 现在,服务器用 150 150 150 响应,并打开数据连接。
- 然后,服务器在数据连接上传送「文件或目录」的列表(作为一个文件)。当整个列表(文件)发送出后,服务器在控制连接上用 226 226 226(关闭连接)响应。
- 客户现在有两个选择。可以使用
QUIT
命令,请求关闭这个控制连接;或者可以发送另一个命令,开始另一个活动(甚至打开另一个数据连接)。在上例中,客户发送一个QUIT
命令。 - 接收到
QUIT
命令后,服务器用 221 221 221(服务关闭)响应,然后关闭控制连接。
26.3.2 匿名FTP
要使用FTP,用户就需要在远程服务器上有一个账号(用户名)和口令。有些网站有一组可供公众使用 public access
的文件,用来激活匿名FTP anonymous FTP
。要使用这些文件,用户不需要有账户和口令。因此,可用 anonymous
这个字作为用户名和使用 guest
这个字作为口令。
用户访问这样的系统是受限制的,有些网站只允许用户使用命令的一个子集。例如,大多数网站允许用户复制某些文件,但不允许用户任意查找目录。
【例26.5】我们给出了匿名FTP的例子,假定在 internic
上有些公众数据是可用的。
$ ftp internic
Connected to internic
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) 远程登录、电子邮件与文件传输 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729867144a1215653.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论