45、电子邮件之二(应用层)

1、邮件传送

  • 既然我们己经描述了用户代理和邮件消息,现在己经做好一切准备来进一步考查邮件传输代理如何将邮件从发件人中继给收件人。邮件传送采用的协议是SMTP。移动邮件最简单的方法是建立一个从源机器到目标机器的传输连接,然后在该连接上传输邮件。这是SMTP的最初工作方式。然而,经过多年的发展,邮件的传输逐步区分出了两种使用SMTP 的不同方式。第一种使用方式是邮件提交( mail submission ),这一步表示用户代理把邮件提交给邮件系统。第二种使用方式是邮件传输代理之间的邮件传送。这个序列将邮件从发送邮件传输代理传递到接收邮件传输代理,全程只有一跳。完成最终邮件的交付使用了不同的协议。本节,我们将描述基本的SMTP协议和它的扩展机制。然后,我们将讨论如何利用它完成邮件提交和邮件传送。

SMTP ( 简单邮件传输协议)及其扩展

  • 在Internet 上,发送电子邮件的计算机首先与目标计算机的25号端口建立一个TCP 连接,然后在此连接上传送电子邮件。在这个端口上监听的是邮件服务器,它遵守简单邮件传输协议( SMTP, Simple Mail Transfer Protocol)。这个服务器接受入境连接请求、执行某些安全检查,并接受传递过来的邮件。如果一个邮件无法被投递,则向邮件发送方返回一个错误报告,该错误报告包含了无法投递邮件的第一部分。
  • SMTP 是一个简单的ASCII 协议。这不是一个弱点,而是一种特性。因为使用ASCII文本,使得协议更加易于开发、测试和调试。通过手动发送命令就可以进行测试,而且记录的消息易于阅读。现在大多数应用程序级的Internet 协议都是以这种方式工作的(比如HTTP )。在建立了与25 端口的TCP 连接后,作为客户端的发送机器等待接收机器首先说话,这个接收机器是作为服务器运行的。服务器开始发送一个文本行给客户端,该行表明了自己的标识,并告诉客户机是否己经准备好接收邮件。如果服务器没有这样做,那么客户端就释放连接,稍后再次尝试与服务器联系。
  • 如果服务器愿意接收电子邮件,则客户端声明这封电子邮件来自于谁以及将要交给谁。如果接收方确实存在这样的收件人,则服务器指示客户发送邮件;然后客户发送邮件,服务器予以确认。因为TCP 提供了可靠的字节流传输,所以这里不需要校验和。如果还有更多的电子邮件需要传输,那么现在可以继续发送。当两个方向上所有的电子邮件都交换完毕后,连接被释放。发送邮件会话实例如下图所示,图中还包含了SMTP所使用的数字代码。客户端发送的行用“ C:”标识,而服务器发送的行则用“ S :”标识。来自客户的第一条命令实际意味着HELO 。在HELLO 的各种4 个字符缩写组合中,这种缩写相比于其竞争者而言有诸多优点。随着时间的流逝,为什么所有的命令必须是4个字符的原因现在己经无从追究了。邮件只发送给一个收件人,因此这里只使用了一条RCPT 命令。RCPT命令可以将一个邮件发送给多个收件人。每个邮件被单独确认或拒绝。即使发给有些收件人的邮件遭到了拒绝(由于接收方并不存在这样的收件人),邮件也可以被发送给其他的收件人。
  • 最后,尽管客户端命令的语法被严格地限定为4字符,但是回复消息的语法就不那么严格了。实际上,只有数字代码才具有真正的意义。每一种实现都可以在数字代码后面加上它所喜欢的任何字符串。基本SMTP 运作良好,但它在几个方面存在不足。首先它不包括认证。这意味着例子中的FROM 命令可以为所欲为地给出任何发件人的地址。这个特性对于发送垃圾邮件相当有用。其次, SMTP 传输的是ASCII 消息而不是二进制数据。这就是为什么需要Base64MIME 内容传送编码方案。然而,使用该编码的邮件在传输时带宽使用效率低下,这对传输大邮件是个问题。最后, SMTP 发送的邮件以明文形式出现。它没有任何加密功能可用来提供防止窥探隐私的措施。在这里插入图片描述
  • 为了处理这些以及其他与邮件处理相关的问题, SMTP 已经被修订过,增加了一个扩展机制。这个机制是RFC 5321 标准的强制性执行部分。带有扩展功能的SMTP 就称为扩展的SMTP ( ESMTP, Extended SMTP )。想要使用扩展版本的客户端必须发送EHLO 消息,而不是原先的HELO 。如果该消息遭到了服务器的拒绝,那么说明对方是一个普通的SMTP 服务器,客户端应该以从前的方式与其交互。如果EHLO 消息被服务器接受,服务器就用它支持的扩展给予回复。然后客户端可以使用这些扩展功能中的任何一种。几种常见的扩展功能如表所示。该图给出了扩展机制所用的关键字,以及这些关键字具有的新功能说明。在这里插入图片描述
  • 为了更好地理解SMTP 协议和本章描述的其他协议是如何工作的,最好试用这些协议。在UNIX (或Linux)系统上,在shell 中键入:telnet mail.isp.com 25
    请用你ISP 的邮件服务器的DNS 名字来替换 mail.isp.com。在Windows XP系统中,先单击“开始”,然后单击“运行”( Run ),并且在对话框中键入上述命令。在Vista或Windows 7 机器上,你必须首先安装telnet 程序(或等价的其他程序〉,然后你自己启动该程序运行。这条命令将与那台机器的25 端口建立一个telnet (也就是TCP )连接。25 号端口是SMTP 端口。你可能会得到类似这样的回
    应:
    Trying 192.30.200.66 …
    Connected to mail.isp.com
    Escape character is ’^]’.
    220 mail.isp.com Smail #74 ready at Thu, 25 Sept 2002 13:26 +0200
    前三行来自于telent 程序,告诉你它在做什么。最后一行来自远程机器上的SMTP 服务器,声明它愿意与你通话,并愿意接受电子邮件。为了找出该SMTP 服务器可以接受哪些命令,请键入:
    HELP
    如果服务器愿意接受你的邮件,那么从现在开始,你有可能看到像上表所示的命令序列。

邮件提交

  • 最初用户代理和负责发送的邮件传输代理运行在同一台计算机上。在这样的设置中,发送邮件所需要做的只是通过我们刚才所描述的对话框,用户代理与本地邮件服务器交互完成邮件的发送。但是,这种设置现在已经不常用了。用户代理通常运行在笔记本电脑、家用电脑和移动电话上。它们并不总是能连接到Internet(如果是移动设备,在全世界寻址是很困难的,注)。邮件传输代理则运行在ISP 和公司的服务器上,它们始终和Internet 保持连接。这种差异意味着,在波士顿的用户代理可能需要联系他在西雅图的常规邮件服务器发送邮件,因为这个用户正在旅行中。
  • 就其本身而言,这种远程通信不会构成任何问题。它恰好是TCP I IP 协议旨在支持的功能。然而, ISP 或公司通常不希望任何远程用户将邮件提交给它的邮件服务器再传递到其他地方。ISP 或公司并没有为了提供公共服务而运行邮件服务器。此外,这种开放邮件中继( open mail relay )会吸引垃圾邮件发送者,因为这种方式提供了一种清洗原始发件人的途径,从而使得邮件更难以被识别为垃圾邮件。
  • 鉴于这些因素, SMTP 通常被用在提交电子邮件时启用了AUTH扩展。这个扩展可以让服务器检查客户端的凭据〈用户名和密码〉,以便确认自己是否应该为该客户提供邮件服务。在SMTP 提交邮件的方式上还存在几个其他方面的差异。例如, 587 端口优先于端口25, SMTP 服务器可以检查和纠正由用户代理发送的邮件格式。有关更多使用SMTP 来提交邮件受到的限制,请参阅RFC4409 。

邮件传送

  • 一旦接收到来自用户代理发送的邮件,邮件传输代理便使用SMTP 将该邮件传送给接收邮件传输代理。要做到这一点,发送者必须使用目标地址。为了确定要联系的正确邮件服务器,必须咨询DNS 。在上一节中,我们介绍了DNS
    如何包含多种类型的资源记录,包括b在X 记录,或邮件交换器。在这种情况下,发出一次DNS 查询。这个查询得到的响应是一个包含一个或多个邮件服务器名字和IP 地址的有序列表。然后,发送方的邮件传输代理与邮件服务器IP地址的端口25 建立一个TCP 连接,通过该服务器能到达接收方的邮件传输代理,并使用SMTP 来中继消息:然后接收方的邮件传输代理将发给用户Bob 的邮件放置在其正确的邮箱里,供Bob 在以后的时间读取。如果接收方有一个庞大的电子邮件基础设施,那么这种本地交付邮件的步骤可能涉及在计算机之间移动邮件。
  • 在传递邮件的过程中,从最初的邮件传输代理到最终的邮件传输代理一跳完成邮件的传输,在这传输过程中不涉及任何中间服务器。然而,邮件传递过程则可能发生需要多次传递的情况。我们已经描述过的一个例子就属于这种情况:当邮件传输代理实现了一个邮件列表时。在这种情况下,邮件要被传递到列表中的每个收件人。邮件在维护该列表的邮件传输代理上被复制成多个邮件,分别发给列表中每个成员的地址。
    ·作为邮件中继的另一个例子,我们来看即使Bob从麻省理工学院毕业后,还可以通过地址[email protected] 与他联系。与通过多个账户阅读邮件方式不同的是, Bob可以安排把发送到上述邮件地址的邮件转发到[email protected] 。在这种情况下,发送到[email protected] 的邮件将经历两次交付过程。首先,它被发送到邮件服务器 alum.mit.edu;然后,它又被转发到邮件服务器ee.uwa.edu.au。这一系列的每一步都是一个完整并且独立的交付过程,只关注到邮件传输代理。
  • 时下另一个需要考虑的是垃圾邮件。今天发送的10 个消息中有9 个是垃圾邮件(McAfee, 2010 )。虽然很少有人愿意接收更多的垃圾邮件,但难以避免,因为垃圾邮件通常伪装成普通邮件。在接受邮件之前,进行额外的安全检查能减少接收垃圾邮件的机会。给Bob 的邮件发自[email protected]。接收端的邮件传输代理可以在DNS 查找发送端的邮件传输代理,即检查TCP 连接另一端的IP 地址是否与DNS 域名相匹配。更一般地,接收代理可以在DNS 中查询发送域,看它是否有一个邮件发送政策。这种信息往往由TXT和SPF 记录提供,它还能表明可以进行其他检查。例如,从cs. washington.edu 发出的邮件永远来自主机june.cs.washington.edu,如果发送方的邮件传输代理不是june,那么邮件肯定有问题。如果其中任何一项检查失败,那么邮件可能被伪造成用了一个假的发送地址。在这种情况下,应该丢弃该邮件。然而,通过检查的邮件也并不意味着就一定不是垃圾。检查只能确保该邮件似乎来自网络中它声称的区域。我们的想法是应该强制垃圾邮件发送者在发送垃圾邮件时必须使用其正确的发送地址。这样可以使得垃圾邮件在不受欢迎时更容易被识别和删除。

2、最后传递

  • 我们的邮件几乎要被交付了。它己经抵达Bob 邮箱。剩下的工作就是将邮件的一个副本传送到Bob 的用户代理以便显示。这个任务很简单,在早期Internet 时代,当用户代理和邮件传输代理作为不同的进程运行在同一台机器上时
    就已经完成了。邮件传输代理简单地把新邮件写到邮箱文件的结尾处,然后用户代理只需检查邮箱文件看是否添加了新邮件。
  • 如今,运行在PC、笔记本电脑或移动电话上的用户代理可能与运行ISP 或公司邮件服务器的设备不是同一台机器。用户希望无论在哪里都能够远程访问他们的邮件。他们既想在工作中访问邮件,也想回家时从家用电脑上网读取邮件,甚至出差时用笔记本电脑或者度假时从所谓的网吧来访问电子邮件。他们还希望能够脱机工作,需要时重新连接Internet以便接收入境邮件和发送出境邮件。此外,每个用户或许要运行几个用户代理,具体使用哪个代理则取决于当时什么电脑最方便。甚至有可能在同一时间运行多个用户代理。
  • 在这样的设置中,用户代理的工作是给出邮箱内容的一个概览,并允许用户远程对邮箱进行操纵。提供这种功能的协议有许多种,但SMTP不是其中之一(只是发送协议)。SMTP 是一种“基于推” ( push-based )的协议,它获取一个邮件,并且连接到远程服务器来传递邮件。邮件的最终交付不能以这种方式实现,因为两个原因:第一,邮件传输代理上的邮箱必须可以连续存储(比如说接收端不在线):第二,用户代理(指接收端)可能在SMTP 试图中继邮件的那一刻无法连接到Internet 上。

IMAP—lnternet 邮件访问协议

  • 最终交付邮件使用的主要协议之一是Internet 邮件访问协议(IMAP, Internet Message Access Protocol )。RFC 3501 定义了IMAP 协议版本4。为了使用IMAP ,邮件服务器必须运行IMAP 服务器,它负责监听端口1430 用户代理必须运行IMAP 客户端。客户端与服务器连接,并开始发出如图列出的命令。首先,如果要启用安全机制(为了加密邮件和命令)客户端必须启动一个安全传输,然后登录或以其他方式向服务器验证自己。一旦成功登录后,可以执行很多命令,包括列表显示文件夹和邮件、获取邮件或者甚至部分邮件、给邮件标记供以后删除,并将邮件组织到各文件夹内。为了避免混淆,请注意,这里我们使用了术语“文件夹”( folder ),以便和本节的其余部分保持一致,即一个用户有一个由多个文件夹组成的邮箱。然而,在IMAP规范中采用了术语“邮箱”( mailbox )来代替文件夹。因此,一个用户有许多IMAP 邮箱,每个邮箱通常表现为提交给用户的一个文件夹。在这里插入图片描述
  • IMAP 还有许多其他功能。它能不通过邮件号而是使用属性来寻址邮件(例如, Alice发给我的第一个邮件)。还可以在服务器上执行搜索功能,找到满足某个特定标准的邮件,因此客户只需要获取这些邮件。IMAP 是较早使用的最终交付协议一一邮局协议版本3( POP3, Post Office Protocol, version 3 )的改进版。POP3 由RFC 1939 说明,它是个非常简单的协议,只支持较少的功能,而且其典型使用方式不太安全。它通常把邮件下载到用户代理所在的计算机上,而不是留在邮件服务器上。虽然这种处理方式使得服务器的工作更加容易,但用户难以为生。用户希望在多台不同的计算机上阅读邮件非常困难,而且如果用户代理所在的计算机发生故障,那么所有的电子邮件将可能永久地丢失。尽管如此,你仍然会发现有人还在使用POP3 。
  • 因为邮件服务器和用户代理之间运行的协议可以由同一家公司提供,因此也可以使用其他专有协议。Microsoft Exchange 就是一个运行其专有协议的邮件系统。

Webmail

  • 一种日益流行可提供电子邮件服务的是Web ,它可以利用其接口来发送和接收邮件,这种方式有望替代IMAP 和SMTP 。目前被广泛使用的Webmail 系统包括谷歌Gmail 、微软Hotmail 和雅虎Mail 。Webmail 是一个软件实例(在这种情况下,就是邮件用户代理〉,它利用Web 为用户提供邮件服务。在这样的体系结构中,为了接收来自端口25 并且使用SMTP 的用户邮件,服务提供商照常运行邮件服务器。然而,此时的用户代理与以前是不同的。它不再是作为一个独立的程序运行,而是通过网页提供了一个用户界面(现在小寒也只接触过这种)。这意味着用户可以使用自己喜欢的任何浏览器来访问他们的邮件,以及发送新邮件。
  • 我们至今还没有学习Web ,但现在先给出一个关于它的简短介绍,或许以后你会回过头再看它。当用户进入服务提供商的电子邮件网页时,会看到一个表单,要求用户输入登录名和密码。然后登录名和密码被发送到服务器,在服务器端进行验证。如果登录成功,那么服务器会找出用户的邮箱,并建立一个网页,该网页列出了邮箱的大致内容:然后将该网页发送到用户的浏览器显示。
  • 页面上显示的许多邮箱表项都是可点击的,因此邮件可以被读取、删除等。为了使界面对用户的行为有所反应,网页往往包括JavaScript 程序。这些程序运行在本地客户端以便响应任何一个本地事件(比如鼠标点击〉、在后台下载或上传邮件,或者准备下一个邮件的显示或提交一个新邮件。在这种模型中,邮件提交采用了普通的Web 协议,把数据张贴到URL 。Web 服务器负责将邮件注入到传统的邮件传递系统中,这个我们己经在前面描述过了。出于安全方面的考虑,可使用标准的Web 协议。这些协议本身涉及加密网页,而不管网页的内容是否是一个邮件消息或是一般网页内容。

猜你喜欢

转载自blog.csdn.net/ao__ao/article/details/88639314