上一次修改主题: 2005-10-23
Exchange 传递路由信息的方式不同,具体情况取决于它处理的是路由组之间的更新,还是路由组内部的更新。此部分讨论了在下面的几种路由拓扑方案中,特定的通信更新过程如何工作:
- 目录对路由组主服务器的更新 一台 Exchange 服务器,一台域控制器
- 路由组主服务器对路由组成员的更新 两台 Exchange 服务器(同一个路由组),一台域控制器
- 路由组之间的更新 三台 Exchange 服务器(两台在一个路由组中,一台在另一个路由组中),一台域控制器
注意: |
---|
下面提供了从实践的角度来阐释概念的网络捕获图像,以使您全面地了解通信更新过程。所有这些捕获图像都是使用 Microsoft Windows Server™ 2003 所提供的网络监视器工具 (Netmon.exe) 来获取的。 |
目录对路由组主服务器的更新
路由组主服务器通过 Microsoft Active Directory® 目录服务更改通知过程从域控制器中接收主要更新。具体地说,Exchange 依靠其配置域控制器来获取目录更新信息(在 Exchange 系统管理器中的服务器属性“DS 访问”选项卡上标记为 Config)。
如果使用了 Exchange 系统管理器在某一台客户端或工作站上新建了一个连接器,或者进行了其他路由更改,则当该客户端或工作站与域控制器联系,并请求将这一新的连接器添加到 Active Directory 中时,此更改通知过程开始。域控制器通知工作站添加成功。然后,域控制器通知 Exchange 服务器它是这一新连接器的路由主服务器,并通过一系列通信发送有关此连接器的信息。下面的网络捕获说明了这一过程。
下图显示了涉及 Windows 2000 域控制器的网络捕获中的摘要,在该域控制器上,将一个新的连接器添加到了路由组中 (Exchange 2000)。请注意第 147 帧,它显示“AddRequest”。
此图显示出客户端(工作站)请求域控制器 (DC) 将新的 SMTP 连接器添加到目录中。第 148 帧显示域控制器指出已成功完成此添加过程。紧接着在第 149 帧中(见下图),域控制器向 Exchange 服务器发送“SearchResponse”,以通知 Exchange 添加了一个新的连接器。
域控制器自动执行这一看似未经请求的操作,因为该 Exchange 服务器之前已注册了更改通知,就像所有 Exchange 2000 和 Exchange 2003 服务器一样。这说明了正在工作的更改通知过程。在第 149 帧内部,域控制器仅将新连接器的名称和可分辨名称通知给 Exchange。
在第 150 帧和第 151 帧,域控制器将有关此添加操作的更多信息发送给添加了该连接器的工作站以及 Exchange 服务器。下图显示了第 151 帧(发送给 Exchange)。除了对象名和 distinguishedname 外,现在还包括 objectGUID、cn 以及 objectClass 属性。
在域控制器发送此信息之后,工作站查询域控制器以获取新连接器的完整属性列表。
在第 176 帧(见下图),Exchange 启动有关其路由组的查询。无论 Exchange 服务器何时收到更改通知,都会启动这些操作。尤其需指出的是,它首先查询路由组 GUID 的可分辨名称。
在收到路由组 GUID 的可分辨名称之后,Exchange 查询该对象下属的所有子对象的所有属性,以及对象类型为“msExchconnector”的所有子对象的所有属性。请注意搜索的“Single Level”作用域与“Base object”搜索之间的区别。这一指定意味着搜索是针对子对象的。第 182 帧(见下图)显示了此搜索请求。
第 183 帧(见下图)指出了来自域控制器的部分响应。
接下来,Exchange 查询域控制器并接收下列信息:
- 与所讨论的连接器关联的任何桥头服务器的 FQDN 和 GUID。
- 关于新连接器的几个属性的查询。此查询基于连接器的 GUID,并返回如下图所示的结果。
如下图所示,Exchange 服务器发送“ModifyRequest”消息,以请求域控制器替换管理组内部的“legacy GWART”对象的三个属性:GatewayRoutingTree、GWARTLastModified 和 ridServer。
域控制器成功地响应“ModifyResponse”消息,并且 Exchange 服务器继续查询其管理组内部各个对象的这些属性。
此部分描述的整个过程显示了域控制器如何将主要的拓扑更新传递给路由组主服务器。按照此更新,路由组主服务器现在必须将信息传递给它的成员服务器。下面的部分说明了路由组主服务器如何将此信息传递给其路由组成员。
路由组主服务器对路由组成员的更新
在路由组主服务器收到关于更新的通知之后,用新的信息重写包含在内存中的链接状态信息(OrgInfo 数据包),并基于此信息创建一个新的 MD5 哈希。然后,路由组主服务器将新的 OrgInfo 数据包传播到同一计算机上的客户端节点,以及路由组内部的次级服务节点或路由组成员。路由组主服务器通过 TCP 端口 691 与路由组通信。
下图说明了在源端口或目标端口 691 上发生的通信。该示例说明了将一个新的连接器添加到包含两个服务器的路由组的过程。
第 175 帧是域控制器发送到注册了更改通知的路由组主服务器的“SearchResponse”。收到此信息之后,路由组主服务器立即将整个 OrgInfo 数据包发送给路由组成员,如第 176 帧所示(图 15.11)。此数据包中的第一个圆括号之前的字符表示 OrgInfo 数据包的 MD5 哈希,服务器用该哈希值来确定它们所拥有的是否是最新的信息。
由于所收到的 MD5 哈希与内存中的哈希不同,因此路由组成员还处理 OrgInfo 数据包。在对内存中的链路状态表进行了适当的更改之后,路由组成员向路由组主服务器发送一个简短的答复,下一帧是它新修改的 OrgInfo 数据包,并且现在引用的仍然是路由组主服务器之前发送的较新的 MD5 哈希。下图显示了初始答复。
接下来,将来自包含迄今为止最新的 OrgInfo 数据包的路由组成员的 OrgInfo 答复发送到路由组主服务器(见下图)。
路由组主服务器处理此信息,并向路由组成员发送一个简短的确认。
在特定路由组内部的所有路由组成员与路由组主服务器之间都会发生此过程。另一个过程(称为“轮询”)确保了所有路由组成员都拥有来自路由组主服务器的最新信息。
轮询
轮询是路由组成员查询路由组主服务器以获取最新的路由信息的过程。下图说明了每 5 分钟轮询路由组主服务器一次的路由组成员。请注意与每一帧关联的时间(保存捕获的图像时进行了筛选,以便仅显示通过 691 端口的通信;因此,所列出的帧号码不反映最初的帧号码)。
每次交换的两帧都包含来自路由组成员的“Simple_Poll”文本以及来自路由组主服务器的响应。第 1 帧显示了查询(见下图)。
第 2 帧显示了响应(见下图)。
除了更新本地路由组以外,路由组主服务器还必须更新 Exchange 组织余下的成员。Exchange SMTP 服务完成路由组之间的更新。
在 SMTP 会话中如何传递更新
路由和链接状态更新通信是 Exchange Server 2003 和 Exchange 2000 SMTP 服务的一部分。在两台服务器之间的每个 SMTP 会话期间,Exchange SMTP 服务都比较每一台服务器上的 OrgInfo 数据包的版本。无论这是在路由组内部发生的还是在路由组之间发生的,此过程都相同。此过程的工作方式如下:
- 服务器 1 启动 TCP 会话并使用 SMTP 与服务器 2 联系。服务器 2 将“220 Ready”响应发送给服务器 1。
- 服务器 1 发送 EHLO 命令。
- 服务器 2 响应“250”以及它所实现的 ESMTP 命令列表。
- 服务器 1 响应“X-EXPS GSS API”,这表示它要通过 GSS API 进行身份验证。
- 服务器 2 响应“334 GSSAPI supported”。
- 接下来的几帧涉及到两台服务器之间的身份验证,并以服务器 2 的“235 2.7.0 Authentication successful”成功响应作为结束。
- 此响应之后,链接状态通信开始。
- 服务器 1 将如下图所示的信息发送给服务器 2:
下列信息包含在从服务器 1 发送的信息中:- X-LINK2STATE 指出此数据包包含与组织的路由拓扑有关的信息。
- LAST CHUNK 表示这将是当前 SMTP 会话内部的链接状态通信的最后一帧。此命令的其他选项包括:
- FIRST CHUNK 指出接下来的链接状态信息分布在几帧中,这一帧是第一帧。
- NEXT CHUNK 指出接下来的链接状态信息分布在几帧中,这一帧既不是第一帧,也不是最后一帧。
- 服务器 2 现在将它的 MD5 哈希与服务器 1 发送的 MD5 哈希进行比较,并将发生下面的两个操作之一:
- 如果哈希完全相同,则服务器 2 不需要从 Server 1 接收完整的 OrgInfo 数据包。因此,服务器 2 发送“DONE_RESPONSE”(见下图),而服务器 1 发送“MAIL FROM:”命令,并完成邮件的发送过程。
- 如果服务器 2 的哈希与服务器 1 不同,则服务器 2 将其完整的 OrgInfo 数据包发送给服务器 1,此过程与服务器 1 将其信息发送给服务器 2 的过程类似。下一部分描述路由组之间的更新上下文中的此过程。
- 如果哈希完全相同,则服务器 2 不需要从 Server 1 接收完整的 OrgInfo 数据包。因此,服务器 2 发送“DONE_RESPONSE”(见下图),而服务器 1 发送“MAIL FROM:”命令,并完成邮件的发送过程。
路由组之间的更新
当路由组内部发生主要或次要更新时,连接到其他路由组的本地桥头服务器将更新通过 SMTP 以及 TCP 端口 25 传播到所连接的路由组。
第 485-487 帧(见下图)包含从路由组主服务器传输到路由组成员(本地桥头服务器)的完整 OrgInfo 数据包。第 488 帧显示本地桥头服务器的确认。
在第 489 帧和第 490 帧中(见下图),本地桥头服务器在 Active Directory 中查询默认收件人策略(示例环境中唯一存在的收件人策略)的属性。
在收到第 491-494 帧中的响应后,第 495 帧(见下图)显示出本地桥头服务器现在在配置容器中执行子树搜索,以找到用作桥头的任何路由组(请注意“LDAP:Filter Type”)。
收到响应后,本地桥头服务器现在开始查询 DNS 以找到远程路由组中的 Exchange 服务器,并建立与该远程桥头服务器的 TCP 会话。
本地桥头服务器继续完成本主题前面的“在 SMTP 会话中如何传递更新”中说明的步骤。此过程如下:
- 当服务器比较 MD5 哈希时,远程桥头服务器了解到它的 MD5 哈希与本地桥头服务器的 MD5 哈希不同,并将其整个 OrgInfo 数据包发送给本地桥头服务器。由于此通信是通过使用 SMTP 来实现的,并且 SMTP 征求意见文档 (RFC) 规定任何一个 SMTP 数据命令的大小都不得超过 1 KB,因此 OrgInfo 数据包可能会分割成几个帧。在这种情况下,SMTP 服务使用如下图所示的不同 CHUNK 命令。
- 本地桥头服务器响应“X-LINK2STATE MORE”(见下图)。
- 远程桥头服务器发送 OrgInfo 数据包的下一部分(见下图)。请注意它只显示“CHUNK”:
- 远程桥头服务器再次响应“X-LINK2STATE MORE”。此通信过程继续,直到远程桥头服务器发送 OrgInfo 数据包的最后一部分,这是通过使用 LAST_CHUNK 命令来表示的(见下图)。
- 此通信过程完成后,远程桥头服务器和本地桥头服务器互换角色。在从远程桥头服务器收到 LAST_CHUNK 帧后,本地桥头服务器立即将 FIRST_CHUNK 帧(表示开始传输其 OrgInfo 数据包)发送到远程桥头服务器。
- 在完成与交换 OrgInfo 信息的过程完全相同的过程后,远程桥头服务器在收到 LAST_CHUNK 命令后响应“200 Done”命令(见下图)。
- 现在,本地桥头服务器发出“Quit”命令,并且远程桥头服务器通过关闭 SMTP 传输通道来表示它已收到此命令。