Internet 协议详细信息

 

上一次修改主题: 2005-06-21

前面提到过,Exchange 2003 支持几个基于 Internet 标准的客户端协议,包括 HTTP、POP3、IMAP4 和 NNTP。以下各部分更详细地描述了这些协议。

HTTP

Microsoft Exchange Information Store 服务包括对数据的本机 HTTP 访问。Microsoft Exchange Information Store 服务中的每个对象都可以用简短、容易理解的名称经由 URL 进行访问。因为 Microsoft Exchange 信息存储中的每个对象都可以通过 URL 进行访问,因此,用户有几种不同的方式来访问邮箱或公用文件夹层次结构中的对象。对象的 URL 基于它在层次结构中的位置,通常会包含项目的主题。

用户通过 Microsoft Outlook Web Access 打开邮件时,IIS 会请求处理器调用 Exchange HTTP ISAPI 应用程序,由该程序分析请求中的信息,并确定以下事项:

  • 要执行的操作:Exchange HTTP ISAPI 确定用户是否要打开邮箱、打开文件夹、读取电子邮件、创建电子邮件等等。
  • 浏览器信息:Exchange HTTP ISAPI 确定浏览器类型、版本和呈现信息。

然后,服务器确定用户是否有权访问该项目。如果用户拥有访问权,将确定对象状态(已读、未读)、对象类型(文件夹、邮件和其他)以及项目类型(邮件、约会、联系人)。

然后 Exchange HTTP ISAPI 扩展将对象属性与其相应的表单定义进行匹配。如果特定对象属性的表单定义不存在,则使用默认表单(用来读取电子邮件项的一种表单)。然后,Exchange HTTP ISAPI 扩展将分析该表单,并查询信息存储以绑定该数据。从 Microsoft Exchange Information Store 服务收到数据之后,Exchange HTTP ISAPI 扩展将基于浏览器类型和版本以 HTML 或 XML 格式呈现数据,客户端便会显示该邮件。

以下步骤更详细地说明了该过程:

  1. 浏览器发送电子邮件请求。
  2. 浏览器发出对 URL 的 GET 请求,例如 https://server/vroot/user/folder/message.eml。该 URL 没有附加任何查询字符串(它会被首先处理),所以,服务器将基于它的 Message-Class 和为该类所配置的默认操作来返回该资源的呈现结果。
  3. Exchange ISAPI 处理该请求。
  4. IIS 接收请求时,该请求被传递给 Exchange ISAPI 组件 Davex.dll。该组件分析请求以获得以下信息,然后将请求发送给 Exchange 存储。下表说明了所传递的项目及其用途。
  5. 然后,Microsoft Exchange Information Store 服务确定项目类型。
  6. 服务器确认用户有权访问该项目,并确定对象类型(文件夹、邮件、任务和其他),然后将项目类型及其状态(已读、未读和其他)返回给 ISAPI 应用程序。
  7. Exchange ISAPI 选择该表单。
  8. ISAPI 程序取得对象属性,并在表单注册表中查找与对象类型相匹配的表单定义。如果找不到相匹配的表单定义,则使用存储在 Wmtemplates.dll 中的默认表单。如果浏览器语言不是英语,则会从 \Exchsrvr\Res\Directory 中的其他模板库加载语言特定的字符串。
  9. Microsoft Exchange Information Store 服务可检索表单的数据。
  10. 找到表单定义之后,ISAPI 程序将调用 Microsoft Exchange Information Store 服务来分析该表单,以检索它所引用的数据。
  11. Exchange ISAPI 呈现表单。
  12. 从 Microsoft Exchange Information Store 服务返回数据时,将以相应的 HTML 和 XML 格式来呈现表单,然后将表单传给客户端。

Davex.dll 传递的项目和用途

传递的项目 用于

HTTP User-Agent 字段头

确定浏览器类型、版本、操作系统以及如何呈现内容

HTTP Accept-Language 头

确定所呈现的内容的语言

HTTP Translate 头

确定内容是否应当显示在浏览器中,或者是否应当返回而不呈现给 WebDAV 应用程序

查询字符串

确定要执行的具体操作

WebDAV 和 XML

Web 分布式创作和版本管理 (WebDAV) 是 HTTP 1.1 协议 (RFC 2518) 的扩展。HTTP 和 WebDAV 支持与 Exchange 2003 中的信息存储进行功能丰富的协作交互。Exchange 2003 HTTP 支持使得添加、修改、复制、移动和搜索文件夹与项目,以及操作信息存储中任何对象的属性成为可能。

通过利用客户端数据绑定和呈现功能,WebDAV 可以在基本的 Microsoft Outlook Web Access 客户端上创建更好的性能和用户体验。例如,单击列标题时,可以按几种不同的方式对收件箱排序,这使视图能够基于发件人的名字、邮件主题行或接收日期进行显示。浏览器会缓存用户界面元素,例如 Internet Explorer HTML 组件、Microsoft Jscript 库、XSL 和图形交换格式 (GIF) 文件。用户更改排序条件时,浏览器可以在本地重新格式化用户界面元素,并查询服务器以获取视图数据。

以下过程说明客户端如何使用 WebDAV 来访问其收件箱中的项目:

  • 客户端发出针对客户端收件箱的 HTTP GET 请求。
  • IIS 在端口 80(除非更改该配置)接收请求,并将请求发送给 Davex.dll 以便使用 ExIPC 进行处理。
  • 使用 ExIPC 将该请求转发给 Exchange 存储 OLE DB 驱动程序 Exoledb.dll。
  • Exoledb.dll 以 Exchange 存储可以处理的格式呈现请求,并将请求发送到 Exchange 存储,然后从 Exchange 存储中检索客户端的收件箱属性。
  • 在检索到客户端收件箱属性之后,Exchange 2003 会利用与处理客户端请求所使用的同一组件将信息路由回客户端。

POP3

Exchange Server 2003 所实现的 POP3 协议堆栈符合 RFC 1725、RFC 1734 和 RFC 1939。Exchange 2003 支持十个 POP3 命令,下表列出了这些命令。

POP3 协议命令谓词

命令 描述

List

用来显示邮箱中邮件的标识符编号和大小(字节),或显示特定邮件的编号和大小。list 命令使用以下语法,其中 n 是 list 命令所返回的邮件编号:list 或 list n.

Uidl

用来返回邮箱中所有邮件的数字列表以及它们所关联的唯一 ID,或特定邮件的唯一 ID。uidl 命令使用以下语法,其中 n 是想查看的 uidl 的邮件编号(由 list 命令返回):uidl 或 uidl n。

Retr

用来从服务器检索邮件。无法使用该命令来检索被标记为已删除的邮件。retr 命令使用以下语法,其中 n 是 list 命令返回的邮件编号:retr n。

Stat

返回邮箱内邮件的总数和邮件的总计大小(字节)。无法使用该命令显示有关单个邮件的更多信息。要这样做,必须根据情况使用 list 或 retr 命令。

Dele

用来选择待删除的邮件。选择待删除的邮件后,将在使用 quit 命令使客户端与服务器断开连接之后删除邮件。如果连接被意外中断,则不删除邮件。删除命令使用以下语法,其中 n 是 list 命令返回的邮件编号:dele n。

Rset

用来将被选中的所有待删除邮件取消选中。

Noop

该命令翻译为“没有操作”。尽管该命令不执行任何操作,但如果命令成功执行,服务器将用肯定响应 (OK+) 进行答复。可以使用该命令测试服务器是否已联机并正在接收客户端请求。

Top

用来显示邮件的邮件头和特定行数的内容。请使用以下语法,其中 x 是想查看的邮件编号,y 是想要显示的邮件行数:top xy。

Auth

这是一个 IMAP 命令,它是 POP3 规范的一部分,Internet 工程任务组 (IETF) 征求意见文档 (RFC) 1734 对此进行了详细说明。它允许使用可选的 IMAP4 授权机制。

Quit

用来退出当前 POP3 会话,并删除任何被选中的待删除邮件。

POP3 被看作只读协议。它只包括用于请求、读取和删除邮件的邮件。若要发送邮件,POP3 客户端将使用 SMTP 协议。

以下步骤说明当客户端(如 Microsoft Outlook)使用 POP3 协议访问 Exchange 服务器上的邮箱时,ExIPC 所执行的进程间通信步骤。

e6620568-6c8c-4ddc-9585-b7cf67ef51d4

  1. 客户端登录服务器并发出检查电子邮件的命令。
  2. 在 IIS 端创建 Request Mail Message 1 命令。
  3. IIS 从共享内存堆中为请求分配共享内存。相应的句柄被分配给这部分共享内存。然后,该句柄(充当对所引用的这部分内存的占位符或指针)被置于循环内存队列中(排队),朝向 Exchange 信息存储。
  4. 在 Exchange 存储端,POP3 的 ExIPC.DLL 会检查有无传入的 POP3 请求。DLL 可接收 Request Mail Message,并从循环内存队列中删除该句柄。Exchange 存储端 POP3 存根引用共享内存堆中数据的句柄。
  5. 如果 Exchange 存储端没有故障或性能问题,则 ExIPC 进程已完成,并且数据从 IIS 成功传递到 Exchange 存储。如果队列已满,或 Exchange 存储已经停止,则返回错误邮件。
  6. 在 Exchange 存储端生成响应(邮件)。Exchange 信息存储从共享内存堆中为该响应分配合适的共享内存。将相应的句柄分配给该共享内存。然后句柄在朝向 IIS 方向的队列中排队。
  7. IIS 从循环队列中删除句柄,引用共享内存,并将它们绑定在一起。

如果在 IIS 端没有故障或性能问题,则响应已完成,并且数据从 Exchange 存储成功传递到 IIS。

IMAP4

Exchange 2003 符合 IMAP4 版本 1,遵守 RFC 2060、RFC 2088 和 RFC 1731。IMAP 由 30 多条命令组成,通过这些命令可以从 Exchange 服务器搜索、获取和擦除邮件。IMAP 很适合联机和脱机使用。IMAP 可以连接到多个邮箱(如果有合适的权限)和公用文件夹,并且可以用于非电子邮件用途,例如新闻服务。

IMAP4 能够提供比 POP3 更好的功能。IMAP4 允许用户访问他们的任何一个文件夹,而不止是收件箱。因此,它比 POP3 更复杂。但是,它仍然遵守作为只读协议的相同标准。与 POP3 一样,IMAP4 也使用 SMTP 来发送电子邮件。

Exchange 2003 支持下表所列出的 IMAP4 命令。

Exchange Server 2003 所支持的 IMAP4 命令

命令 描述

APPEND

将文字参数作为新邮件追加到指定的目标邮箱的末尾。该参数必须采用 RFC-822 邮件的格式。

AUTHENTICATE

指示服务器的身份验证机制(例如,AUTHENTICATE KERBEROS_V5)。

CAPABILITY

用来请求服务器所支持的容量的列表。

CHECK

用来请求当前所选邮箱的检查点。检查点引用与邮箱关联的、依赖于实现的任何细节(例如,使用邮箱在磁盘上的状态来解析其服务器内存中状态),它不作为每个命令的一部分而加以执行。

CLOSE

从当前所选邮箱中永久删除已设置 \Deleted 标志的所有邮件,并从已选中状态返回到已通过身份验证状态。

COPY

用来将指定的邮件复制到指定的目标邮箱的末尾。邮件的标志和内部日期将保存在副本中。

CREATE

用来使用特定名称创建邮箱。只有在已创建具有该名称的新邮箱时,才会返回 OK 响应。

DELETE

永久删除具有特定名称的邮箱。只有在邮箱已删除时,才会返回标记为 OK 的响应。

EXAMINE

与 SELECT 相同,并返回相同的输出。但是,所选邮箱被标识为只读。不允许更改邮箱的永久状态,包括每个用户的状态。

EXPUNGE

从当前所选邮箱中永久删除已设置 \Deleted 标志的所有邮件。

FETCH

检索与邮箱中的邮件关联的数据。

LIST

从适用于客户端的所有名称的完整集合中返回名称子集。

LOGIN

向服务器标识客户端,并携带对该用户进行身份验证的纯文本密码。

LOGOUT

通知服务器:客户端已结束连接。

LSUB

从用户声明为“活动”或“已订阅”的名称集合中返回一个名称子集。

NOOP

该命令翻译为“没有操作”。尽管该命令不执行任何操作,但如果命令成功执行,服务器将用肯定响应 (OK+) 进行答复。可以使用该命令测试服务器是否已联机并正在接收客户端请求。

RENAME

更改邮箱的名称。只有当邮箱已重命名时,才返回标记为 OK 的响应。

SEARCH

搜索邮箱中与指定的搜索条件匹配的邮件。搜索条件由一个或多个搜索键组成。

SELECT

选择邮箱,以便该邮箱中的邮件可以被访问。

STATUS

请求所指示的邮箱的状态。它不更改当前所选邮箱,也不影响被查询的邮箱中任何邮件的状态。

STORE

改变与邮箱中的邮件关联的数据。

SUBSCRIBE

将指定的邮箱名称添加到由 LSUB 命令返回的服务器的“活动”或“已订阅”邮箱集合中。只有当订阅成功时,该命令才返回标记为 OK 的响应。

UID

该命令有两种形式。在第一种形式中,它使用 COPY、FETCH 或 STORE 命令作为它的参数,而这些命令又带有对所关联的命令合适的参数。在第二种形式中,UID 命令使用具有 SEARCH 命令参数的 SEARCH 命令。

UNSUBSCRIBE

从服务器的“活动”或“已订阅”邮箱集合中删除指定的邮箱名称,该集合由 LSUB 命令返回。只有当取消订阅操作已成功时,该命令才返回标记为 OK 的响应。

NNTP

网络新闻传输协议 (NNTP) 是一个基于文本字符串的 TCP/IP 协议,其字符串通过七位的 ASCII TCP 通道双向发送。IETF 拥有 NNTP 协议,该协议在 RFC 977 中进行了定义。NNTP 通常称为 Internet 新闻协议,因为它包含从一台计算机向另一台计算机传输新闻文章的规则。在这里将 NNTP 作为客户端/服务器协议进行讨论。它也包括基于服务器到服务器的新闻传输。

Windows 中的 NNTP 服务被设计成支持独立的新闻组服务器,这些服务器可以很容易创建分组讨论。安装 Exchange 2003 后,NNTP 服务将增加通过新闻复制与其他新闻服务器交互的功能。NNTP 服务可以与外部 NNTP 服务器进行通信,以使受欢迎的 USENET 组能够被用户使用。

NNTP 服务的标准存储位置位于文件系统内的一个或多个目录中。使用 Exchange Server 2003,NNTP 服务还可以将新闻组存储在任何可用的公用文件夹树的公用文件夹中。“Internet 新闻组”文件夹是新闻组的默认位置。NNTP 服务使用虚拟目录来引用这些位置。

可以按主服务器/从属服务器的布局来布置多个新闻服务器。这使客户端能够连接大型服务器组,并且仍然保持新闻组内容的准确视图。一系列或一组服务器为很多客户端提供了额外的可伸缩性,并在从属服务器处于脱机时提供了容错能力。

NNTP 的 Exchange Server 2003 实现为该协议提供了以下其他功能:

  • 内容索引提供了对公用文件夹的搜索功能。
  • 在独立于后端存储的情况下接受完整的新闻复制。
  • MAPI 或 NNTP 客户端可以读取 Exchange 信息存储所支持的新闻组,或向这样的新闻组投递文章。

Active Directory 中的配置设置

尽管 Exchange 与 IIS 集成,但是,一旦安装了 Exchange 2003,则协议虚拟服务器将由 Exchange 系统管理器而不是 Internet 服务管理器进行管理。在 Exchange 系统管理器中添加、删除或配置项目时,配置更改将首先保存到 Microsoft Active Directory 目录服务,然后被复制到 IIS 元数据库,该操作由运行在系统助理进程中的“目录服务/元数据库同步”(DS2MB) 功能在合适的 Exchange 2003 服务器上完成。

note注意:
可以在 Microsoft 知识库文章 252370“Layout of Exchange Configuration in Active Directory”(英文)中查看在 Active Directory 中存储的 Exchange 2003 配置信息的半图形表示。

元数据库中的配置设置

IIS 元数据库是分层的数据库,用来存储 IIS 和 Exchange 2003 的配置值。IIS 元数据库是存储机制,也是用来更改配置参数的应用程序编程接口 (API) 集合。

DS2MB 进程的功能是从 Active Directory 向 Exchange 服务器的本地 IIS 元数据库传输配置信息。由于性能和可伸缩性原因,该配置存储在本地 IIS 元数据库内而不是注册表中。

note注意:
在运行 Windows 2000 Server 的计算机上,IIS 元数据库位于 System32\Inetsrv\Metabase.bin。在运行 Windows Server 2003 的计算机上,IIS 元数据库位于 metabase.xml。可以通过多种工具操纵 IIS 元数据库。在运行 Windows Server 2003 的计算机上,可以使用内置的 IISCNFG 工具。在运行 Windows 2000 Server 的计算机上,IIS 资源工具包中的 MetaEdit 2.2 或更高版本工具是个好的选择。可以从 Internet Information Services (IIS) 6.0 Resource Kit Tools 网站(英文)下载 IIS 6.0 资源工具包。

元数据库中的路径称为键。可以在每个键中设置属性,而每个属性都可以有用于自定义该属性的属性。在子目录树的目录服务映像中出现的所有标识符在元数据库中都是必需的,包括诸如 KeyType 这样的标识符。另外,目录中的对象的相对可分辨名称被直接映射到元数据库中的键名称。

通过 DS2MB 进行 IIS 元数据库更新

DS2MB 是一个在系统助理启动时启动的子进程,并在此后每隔 15 分钟执行一次。DS2MB 从 Active Directory 复制所有子目录树,而不会更改子目录树的形状。这是从 Active Directory 到元数据库的单向写入;元数据库永远不会写入 Active Directory。在复制时它不会添加或计算任何属性。

note注意:
DS2MB 进程将使用 IIS 管理单元,以 Active Directory 中所包含的信息来覆盖对 Exchange 虚拟服务器及目录所做的更改。

SMTP、POP3、IMAP4 和 HTTP 的操作依赖于由 DS2MB 所执行的复制。并非所有设置都会从 Active Directory 被同步,某些设置将在 Exchange 的安装期间直接写入元数据库。

在实例化时,DS2MB 将向配置域控制器注册。配置域控制器在 15 秒内将对 Exchange 配置所做的任何更改通知 DS2MB。一旦更改复制到配置域控制器,它必须由 DS2MB 复制到元数据库。

高水印

高水印是元数据库中的条目,它使 DS2MB 能够跟踪已经从 Active Directory 同步的更改。高水印条目以 GUID 形式输入 IIS 元数据库中。这些 GUID 出现在元数据库中 [/DS2MB/HighWaterMarks] 节点的下面,如下所示:

[/DS2MB/HighWaterMarks]
KeyType                         : (STRING) "Ds2mbHighwatermarks"
[/DS2MB/HighWaterMarks/{BE583A06-9083-400F-954C-CF4ACCA78B04}]
[/DS2MB/HighWaterMarks/{028C8F78-8CF0-43D9-9B35-9819D538849F}]
[/DS2MB/HighWaterMarks/{84ECD394-05BB-4661-BA1D-81D3E32BF804}]

因为 DS2MB 负责处理元数据库中高水印的进入和同步,因此通常没有理由调整或管理该信息。但是,已知的解决方案包括从元数据库中删除高水印条目以便重置。

前端服务器体系结构

前端服务器是运行 Exchange Server 2003 但不主控数据库的服务器(除了同时充当 SMTP 服务器时),前端服务器只是将客户端请求转发给后端服务器进行处理。前端服务器使用轻型目录访问协议 (LDAP) 来查询 Active Directory,以确定哪个后端服务器主控用户的邮箱。后端服务器是运行 Exchange Server 2003 并至少维护一个数据库的服务器。

该体系结构只适用于 RPC over HTTP、HTTP/WebDAV、POP3 和 IMAP4 客户端。它不是为 MAPI 或 NNTP 客户端设计的。受支持的客户端连接到前端服务器,然后由前端服务器作为代理将客户端命令传递给用户的后端服务器(该服务器主控 Exchange 信息存储)。

前端服务器和后端服务器之间的这种功能划分提供了几个好处。例如:

  • 单一命名空间:将多个后端服务器配置为处理其他邮箱时,最好用单个名称标识所有服务器。可以用单个名称来引用前端服务器,并且前端服务器可以作为代理将用户请求转发给包含用户邮箱的正确的后端服务器。如果将多个前端服务器配置为管理大量的请求,则通过用一个被映射到服务器 IP 地址的名称来配置域名系统 (DNS),就可以对这些服务器的单个命名空间进行维护。客户端连接到哪个前端服务器并不重要。
  • 减轻 SSL 负担:对邮件通信进行加密和解密需要使用很多 CPU 周期。前端服务器可以执行加密工作,这就使后端服务器可以有更多的周期用于管理邮箱和公用文件夹信息存储。
  • IMAP4 客户端的公用文件夹引用:很多 IMAP4 客户端不支持引用。使用该体系结构,前端服务器可以检索在除用户的电子邮件服务器以外的其他服务器上存在的公用文件夹。
  • 服务器位置:可以将包含数据库的后端服务器放在防火墙的后面,以获得更好的保护效果。可以将防火墙配置为只允许来自前端服务器的通信。另外,可以将反向代理(例如 ISA Server)放在前端服务器之前,并且只发布前端服务器。不需要将后端邮箱服务器发布到 Internet。因此,可以将防火墙和反向代理配置为只允许到前端服务器的通信。

使用前端服务器时的注意事项

可以将 Exchange Server 2003 标准版或 Exchange Server 2003 企业版配置为用作前端和后端服务器配置中的前端服务器。在将这两种版本中的任意一种配置为前端服务器时,将适用以下注意事项:

  • 如果前端服务器从 Internet 接受 SMTP 邮件,则必须启动 Microsoft Exchange Information Store 服务,并装入至少一个邮箱存储。在某些情况下(大多数明显是在生成未送达报告时),SMTP 服务需要邮箱存储执行转换。
  • 如果没有装入邮箱存储,则必须转换的邮件会滞留在本地传递队列中。出于安全原因,请确保用户邮箱没有驻留在前端服务器的邮箱存储中。如果在同一站点(路由组)中有运行 Exchange Server 5.5 的服务器,则必须将 Microsoft Exchange MTA 堆栈服务配置为运行在前端服务器上。在该配置中,MTA 可以通过使用 RPC 来绑定和传输邮件。
  • 如果 X.400 连接器或 Exchange 开发工具包 (EDK) 网关连接器驻留在前端服务器上,则 MTA 服务也必须运行在前端服务器上。如果删除了所有公用文件夹和邮箱存储,则无法使用 Internet 服务管理器来更改配置。
  • 如果必须使用 Internet 服务管理器来更改配置(例如,在更改 SSL 加密配置时),请确保要么在删除存储之前完成本指南所描述的过程,要么在前端服务器上让专用信息存储保持不变。
  • 创建前端服务器时,不要删除 Exchange 系统管理器中的“第一个存储组”对象。Microsoft Exchange Information Store 服务(及其相关服务)依赖于“第一个存储组”对象。