使用 X.400 连接器连接路由组

 

上一次修改主题: 2005-08-12

在路由组之间(特别是在不可靠的网络链路上)使用 X.400 连接器可能是个好想法。X.400 具有优势,因为它支持平稳地恢复传输关联。在很多情况下,邮件传输可以从断点继续。而且,因为 X.400 连接器在不进行转换的情况下以本机 Exchange 格式来传输邮件内容,所以 X.400 连接器不会使邮件大小膨胀。相比之下,路由组连接器和 SMTP 连接器必须将邮件转换为 RFC 822 和多用途 Internet 邮件扩展 (MIME) 格式。这会导致大小增加 30%。若要指定 X.400 连接器的远程路由组,请使用连接器属性中的“连接路由组”选项卡。

路由组之间的负载平衡

X.400 连接器的本地和远程 MTA 是连接器可以在每个路由组中使用的唯一桥头服务器。如果想使用多个桥头服务器,则必须将额外的 X.400 连接器配置为指向目标路由组中不同的远程 MTA。单个服务器可以支持多个 X.400 连接器,每个连接器使用相同的或不同的 MTA 传输堆栈。但是,也可以在多个服务器上配置多个 X.400 连接器,如下图所示。

f039b15d-fed0-49f4-8e9c-bfad8aa35949

但请注意,Exchange Server 2003 不会在多个连接器实例上执行真正的负载平衡。按照邮件路由体系结构中的解释,高级队列引擎首先调用一次路由引擎以确定邮件路由,之后缓存该信息,然后通过相同连接器传输相同类型的所有邮件。只有当第一个连接器失败时才使用其他连接器。但是,第二个服务器可能选择第二个连接器,并以该方式使负载达到某种程度的平衡。

note注意:
因为路由引擎无法将本地连接器和远程连接器区分开来,所以,本地路由组中的一个桥头服务器上的高级队列引擎有可能将发往目标路由组的所有邮件传输到同一个本地路由组中的另一个桥头服务器,即使本地服务器也是可以传输邮件的桥头服务器。

通过 Exchange MTA 路由邮件

在通过 Exchange MTA 来传输邮件的 Exchange 组织中,邮件路由会被路由引擎执行两次。第一次路由事件发生在高级队列引擎中。路由引擎通知高级队列引擎:邮件必须由 Exchange MTA 通过连接控制器进行路由,并且高级队列引擎将邮件放在 MTA 的邮件队列中。Exchange 存储驱动程序将邮件放在 Exchange 存储内 MTA 的 MTS-IN 文件夹中。然后,Exchange 存储使用 SMTP XAPI 网关将邮件传递给 MTA。以下示例事件显示了刚才描述的传递给 MTA 的邮件。相关信息以黑体显示。

Event ID: 272

Source: MSExchangeMTA

Type: Information

Category: X.400 Service

Object 0600002D received from entity /DC=COM/DC=CONTOSO/CN=CONFIGURATION/CN=SERVICES/CN=MICROSOFT EXCHANGE/CN=FIRST ORGANIZATION/CN=CONNECTIONS/CN= , object is a Normal priority Message, the MTS identifier is C=US;A= ;P=First Organizati;L=SERVER01-040503155933Z-4, and content length is 1719. The number of objects sent so far = 1. External trace information (first 100 bytes) = 3080638061801302555300006280130120000013104669727374204F7267616E697A61746900003180800D3034303530333136303234315A8201008302060000000000. (10)

SMTP XAPI 网关

从 Exchange MTA 角度来看,SMTP 服务的作用类似于基于 MAPI 的连接器,例如 Lotus Notes 连接器或 Novell GroupWise 连接器。Exchange MTA 通过网关的 MTS-IN 文件夹从 SMTP XAPI 网关获得邮件,并通过网关的 MTS-OUT 文件夹将邮件路由到该网关。这些邮件队列文件夹存在于 SMTP 邮箱中。SMTP 邮箱的名称是 SMTP(<服务器名称> - {<GUID 邮箱存储>})。在上面的事件中,邮箱名称是 SMTP (SERVER01-{43D5C017-4A4B-4AFD-85AF-06EAB90057AA})。与 XAPI 网关对应的连接器对象存在于 Active Directory 内的“连接”容器中,直接在 Exchange 组织对象的下面。该容器不显示在 Exchange 系统管理器中,但可以使用 ADSI Edit 查看它,或使用 LDIFDE 导出它的内容。例如,可以使用以下命令行将所有 SMTP XAPI 网关对象导出到名为 SMTPXAPI.ldf 的文件中: ldifde -f c:\SMTPXAPI.ldf -s localhost -d "CN=Connections,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=contoso,DC=com" -r "(objectClass=mailGateway)".

下表描述了 SMTP XAPI 网关对象的重要属性。

重要的 SMTP XAPI 网关属性

属性 描述

objectClass

将目录对象标识为 mailGateway 和 msExchConnector 对象。

Common name

在 Active Directory 中代表连接器对象的名称,该名称与它的父容器有关。

computerName

指向正在运行 SMTP 服务的桥头服务器。该属性必须与桥头服务器的网络基本输入/输出系统 (NetBIOS) 名称完全匹配,否则,Exchange 系统管理器中的队列查看器管理单元将无法显示邮件队列。

deliveryMechanism

标识被 Exchange Server 2003 用来将邮件传递到 XAPI 网关的传递机制。

distinguishedName

在 Active Directory 中代表连接器对象的可分辨名称。

homeMDB

标识用于容纳连接器邮箱的私人邮箱存储。

homeMTA

标识负责将邮件路由到 XAPI 网关的 Exchange MTA。

legacyExchangeDN

以更早的 Exchange Server 5.5 目录格式表示连接器对象的可分辨名称。必须在连接器对象上设置这个属性,队列查看器管理单元才能工作。

delivExtContTypes

列出该连接器所支持的内容类型的对象 ID。

Name

代表连接器对象的名称。

canPreserveDNs

指示连接器对象是否可以处理收件人信息中的可分辨名称。

Exchange MTA 邮件传输

下图说明了 SMTP 服务和 Exchange MTA 如何相互交互。

24db8371-a8a6-4859-bca1-f2d5b61877b5

从 SMTP XAPI 网关接收邮件之后,MTA 必须确定一个适合的连接器,以便将邮件传输到下一个跃点。在 Exchange 2000 Server 和 Exchange Server 2003 中,MTA 不再执行实际的邮件路由,而是通过 MTARoute.dll 与路由引擎联系,然后由路由引擎路由邮件。但是,MTA 有可能将 O/R 收件人名称更改为一种能够传递给路由引擎的形式。

MTA 不会为从 LAN-MTA、X.400 MTA 或 MAPI 连接器所接收的邮件而调用路由引擎。它将这些邮件直接传递到 SMTP XAPI 网关的 MTS-OUT 文件夹中。然后,由高级队列引擎处理邮件,如果邮件的目的地不是本地收件人,则调用路由引擎。实际上,如果邮件必须传输到另一个 LAN-MTA、X.400 MTA 或非 Exchange 邮件系统,则邮件有可能通过 Exchange 存储和 SMTP XAPI 网关传回 Exchange MTA。SMTP 服务会在它传输给 Exchange MTA 的所有邮件上设置一个标记,以表明 MTA 应当调用路由引擎。有关邮件路由过程的详细信息,请参阅邮件路由体系结构

如果路由引擎可以确定邮件的下一个跃点,则 MTA 将确定是否可以通过本地 SMTP 服务到达下一个跃点。例如,有可能 X.400 连接器和路由组连接器都指向同一个路由组。如果发生这种情况,则高级队列引擎可能将邮件传递到 MTA,以便通过 X.400 连接器传输该邮件,然后 MTA 可能将邮件传回 SMTP 服务,以便通过路由组连接器传输该邮件,如此等等。为了避免这种情况,如果初始路由建议 MTA 应当将邮件发送回 SMTP 服务,则 MTA 将第二次调用路由引擎。MTA 在初始路由调用中传递收件人的 X.400 代理地址,并在第二次路由调用中传递 legacyExchangeDN,同时希望该操作将产生与通过 SMTP 服务的路由相不同的路由。

链路状态信息和邮件重新路由

如果路由引擎可以确定邮件的下一个跃点,它将把连接器或 MTA 的路由对象名称返回给 MTA。MTA 将该路由对象名称转换为可分辨名称,以确定 MTA 必须用于进行邮件传输的、位于 Active Directory 中的连接器或 MTA 目录对象。目录对象定义了传递机制和通信参数。

如果由于临时链路故障而使路由引擎无法确定下一个跃点,则路由引擎将对邮件进行标记,以便通知 MTA 在链路状态信息下一次更改时必须重新路由该邮件。按照邮件路由体系结构中的解释,当您更改组织中的连接器配置时,或者当高级队列引擎或 MTA 将连接器标记为停机或工作时,链路状态信息将发生更改。链路状态算法可确保链路状态信息的更新能够被传播到组织中所有运行 Exchange Server 2003 的服务器。

当本地服务器上的路由引擎发现链路状态信息已更改时,它将调用 MTA 的 RoutingReset() 函数。然后,MTA 对所有已被路由但尚未发送的邮件调用路由引擎,以执行重新路由。当路由引擎从它的路由组主机那里收到更新后的链路状态信息后,路由调用将产生临时错误,并且 MTA 将把邮件放在“挂起重新路由”队列中。当链路状态信息在整个路由组中得到同步时,重新路由才会成功。

note注意:
对链路状态信息的频繁更改可以导致 Exchange MTA 中出现邮件传输问题。例如,邮件可能被丢弃,同时产生未送达报告 (NDR),以表示遇到了无法识别的 O/R 名称。在包含不可靠网络连接的环境中,可能必须禁用链接状态信息的传播,邮件路由体系结构对此进行了讨论。

在路由组之间交换链路状态信息

在具有路由组连接器的 Exchange 组织中,使用 SMTP 在路由组之间交换链路状态信息。如果部署了 X.400 连接器以连接路由组,那么还必须通过 X.400 来交换链路状态信息。为了完成该任务,Exchange MTA 将调用路由引擎,以获得当前 MD5 摘要,MD5 摘要是一种表示链路状态表的版本号的加密签名。基于该信息,路由引擎可以确定它们是否有相同的链路状态信息。

在发送邮件之前,本地 MTA 会在 DIGEST_QUERY 数据包中将 Exchange 组织的 GUID 属性和当前的 MD5 摘要发送到远程 MTA。远程 MTA 识别出 DIGEST_QUERY 数据包时,它将该信息传递给它的路由引擎。路由引擎将摘要与它自己的摘要副本进行比较,并将比较结果传递给它的 MTA。然后,远程 MTA 将响应发送回本地 MTA。

c665f8b7-b676-4549-abb7-1eb2614c7633

如果运行 Exchange Server 的服务器上 MD5 摘要不一致,那么随后在 MTA 之间将发生更详细的会话,以便交换 OrgInfo 数据包。OrgInfo 数据包中包含链路状态表,其中有路由拓扑的所有详细信息和状态。MTA 将 OrgInfo 数据包传递给它们的本地路由引擎,这些路由引擎则确定哪个服务器有最新的信息。有最新信息的服务器会放弃所接收的 OrgInfo 数据包。其他服务器则将经过更新的链路状态信息传递给它的路由组主机,然后,路由组主机更新在其本地路由组中所有服务器上的链路状态信息。

Exchange MTA 传输摘要查询,即使它们连接到本地 Exchange 组织以外的 MTA。接收方路由引擎将检查 DIGEST_QUERY 数据包中的组织 GUID,以确定链路状态信息是否来自本地组织,如果它来自其他组织则忽略 MD5 摘要。查询响应指示没有 OrgInfo 数据包必须进行交换。