The link state table is a small, in-memory database that is not stored on disk. To examine the entries that the routing engine uses to make routing decisions, you can use the Exchange Server 2003 WinRoute tool (Winroute.exe), which is available for download from the Downloads for Exchange Server 2003 Web site.
The WinRoute tool connects to the link state port, TCP port 691, on the selected Exchange server and extracts the link state table. The information in this table is a series of GUIDs and ASCII text that represent routing groups, routing group members, and connectors in the routing groups. The link state table also includes information about the configuration of each connector. The information fields in the link state table are separated by parentheses as follows:
The following is a shortened example of a link state table (all except one routing group removed):
The following table maps this information to the various information fields in the link state table.
|
Field
|
Value
|
Comments
|
| Organization objectGUID | d38082e7c9ecd74dbff32bada8932642 | The GUID that is registered in the objectGUID attribute of the Exchange organization object in Active Directory. |
| MD5 Digest | d037d6eaf2fa7cd10934aca433390623 | An MD5 digest or hash value. This is an encrypted signature that represents the version number for the link state table. Based on this information, routing engines can determine whether they have the same link state information. If the information differs, routing engines exchange OrgInfo packets to determine which server has the most up-to-date information. The OrgInfo packet contains the link state table, with all details and states of the routing topology. The propagation of link state information is discussed later in this section. |
| Routing Group objectGUID | 489416bfa3a4ff459b8f4403f20cad0d | The GUID that is registered in the objectGUID attribute of the routing group object to which the routing information belongs. This GUID follows next in the link state table. |
| Routing Group Master objectGUID | 1650c1fe32aef740be236e1089e0da6a | The GUID that is registered in the objectGUID attribute of the server that acts as the routing group master in this routing group. The routing group master within each routing group is responsible for maintaining and communicating link state information to all routing group members. Only one routing group master exists per routing group. For more information about the role of the routing group master, see the discussion later in this section. |
| Version Info | 8 0 2 c2da71f9b39ec748aaf44119a2bdcb36 | The values 8 0 2 are the major, minor, and user versions of the link state information. The routing engine uses this version information to classify updates to the link state information, as follows: - Major updates Represent routing topology changes, such as connector configuration changes (that is, adding or deleting a connector, adding or deleting an address space on a connector, or designating a new server as the routing group master).
- Minor updates Represent changes to the availability of a virtual server or connector. For example, the state of a connector might change from up to down if the connector's source bridgehead server is unavailable.
- User updates Represent changes that occur when services are started or stopped on an Exchange server or when a server loses its connectivity to the routing group master. Adding a new server to a routing group also represents a user update.
The remaining data is the GUID of this version information. |
| Routing Group Addresses | {26}*.489416BF-A3A4-FF45-9B8F-4403F20CAD0D {4c}c=DE;a= ;p=TailspinToys;o=Exchange;cn=489416BF-A3A4-FF45-9B8F-4403F20CAD0D;* {55}/o=TailspinToys/ou=First administrative Group/*/489416BF-A3A4-FF45-9B8F-4403F20CAD0D | Maps SMTP, X.400, X.500, and address information to individual routing group GUIDs. The routing engine uses this information to generate an internal server cache, which is used to determine the routing group of each server in the routing topology. The server cache is an internal table of the routing engine. For example, assume that SERVER01 in a routing group named First Routing Group has an FQDN of SERVER01.TailspinToys.com. According to the routing group address definition, the routing engine creates an entry for SERVER01 in the server cache, as follows: SERVER01.TailspinToys.com.489416BF-A3A4-FF45-9B8F-4403F20CAD0D. During a routing event, when the advanced queuing engine passes the FQDN to the routing engine, the routing engine looks up the server cache, finds the entry for SERVER01.TailspinToys.com, and quickly determines the target routing group. The principle is the same for X.400 and X.500 addresses; only the address information is more complex. |
| Routing Group Members | ( 1650c1fe32aef740be236e1089e0da6a YES 1 1b20 {10}0701000000000101 ) | Contains a list of all servers that belong to the routing group and identifies their state. However, note that the routing engine does not use this information for message routing. As discussed earlier in this section, the routing engine uses the server cache. The routing group members are listed in the Routing Group Members () list for the purposes of system monitoring. You can view this information in Exchange System Manager, when you open the Tools node, then Monitoring and Status, and then Status. The server status entries in the Routing Group Members () list contain the following information: -
The objectGUID of the server: 1650c1fe32aef740be236e1089e0da6a
-
Whether the member is connected to the routing group master. YES indicates that the server is connected.
-
Server version number: 1
-
Build version: 1b20 hex = 6944
-
User data: {10}0701000000000101
The user data indicates the state of the server. If the value begins with 0701, the server is available and operating. If the value begins with 0702, the server is in a warning state. If the value begins with 0703, the server is in a critical state. You can switch a server to maintenance mode to deselect server monitoring temporarily, in which case the value begins with 0781. |
| Connectors in Routing Group | ( aa582d35e9621c4ca8ae57aa33d953a1 ( CONFIG )) | Starting at the next open parenthesis, each connector that belongs to the routing group is listed in a separate entry that includes the connector's objectGUID and the configuration information that the routing engine uses to make message routing decisions. Note: |
|---|
|
The connector configuration information in the link state table has the fields that are described in the following table entries.
|
|
| Connector objectGUID | aa582d35e9621c4ca8ae57aa33d953a1 | The GUID that uniquely identifies the connector in the Exchange organization. |
| Connector Type | {4}SMTP | Following the CONFIG keyword, this field identifies the connector type. The type can be SMTP, X.400, Notes, or Exchange Development Kit (EDK). The Notes and EDK types refer to instances of a MAPI-based messaging connector connecting to a non-Exchange messaging system. For more information about MAPI-based connectors, see Gateway Messaging Connectors Architecture. Tip: |
|---|
|
The number in curly brackets is not an identifier. This number indicates the string length of the field value in hexadecimal format.
|
Note: |
|---|
|
There is no explicit type for routing group connectors. Routing group connectors use SMTP to transfer messages.
|
|
| Source Bridgehead Address | {} | This field can have one of three values: - No value If no source bridgehead server is specified, then any server in the local routing group can use this connector to transfer messages. This applies to routing group connectors if the option Any local server can send mail over this connector is used.
- A connector GUID For SMTP connectors and routing group connectors, you can specify specific local bridgehead servers, in which case the Source Bridgehead Address field lists the connector GUID appended by an "_S" (without the quotation marks), to indicate a source bridgehead, such as:
{23}_76290a25817c0643a1a6999e669b1d5f_S
The local bridgehead servers are then listed later in the BH field in the connector information. - A bridgehead address X.400 connectors and MAPI-based connectors cannot have more than one local bridgehead server. For these connectors, the local bridgehead server is specified in the Source Bridgehead Address field, such as: {8}SERVER01. To provide availability information, the local bridgehead server might also be listed later in the BH field in the connector information.
|
| Destination Bridgehead Address | {23}_aa582d35e9621c4ca8ae57aa33d953a1_D | As with the Source Bridgehead Address field, this field can have one of three values: - No value X.400 connectors and MAPI-based connectors do not have a destination bridgehead server in the link state table. These connectors use connector-specific information to determine their target system, such as the remote host name in the stacks configuration of an X.400 connector.
- A connector GUID For routing group connectors, the Destination Bridgehead Address field lists the connector GUID appended by a "_D" (without the quotation marks) to indicate a destination bridgehead. In this case, the target bridgehead servers are listed later in the TARGBH field in the connector information.
- A bridgehead address SMTP connectors cannot have multiple destination hosts when they connect routing groups to each other. The connector configuration requires you to specify a smart host in the remote routing group, which is then indicated as the destination bridgehead, such as: {8}SERVER02.
|
| Legacy Distinguished Name | {63}/o=TailspinToys/ou=First administrative Group/cn=Configuration/cn=Connections/cn=RGC RG A <-> RG B | This is the distinguished name of the connector in legacy Exchange 5.5 directory format. The value corresponds to the legacyExchangeDN attribute of the connector object in Active Directory. |
| Schedule ID | 0 | The Schedule ID field is not used and is always set to 0. The advanced queuing engine and Exchange MTA query Active Directory to determine the activation schedule of a connector. |
| Restrictions | 0 0 0 ffffffff ffffffff 0 1 0 () 0 () 0 () 0 () | The Restrictions field identifies the scope of the connector, message size restrictions, and other constraints, as follows: -
The scope of the connector is identified by the first digit. A value of 0 indicates that the scope is "Organization." A value of 1 indicates that the scope is "Routing Group."
Note: |
|---|
|
Routing group connectors always have a scope of "Organization." Connectors to external messaging systems can be restricted to the local routing group.
|
-
The next digit indicates whether triggered delivery is configured. A value of 0 means no triggered delivery. A value of 1 means that the remote host must trigger the message transfer (for example, TURN/ETRN).
-
The third digit identifies the message type (high, normal, low, system, and non-system) that is allowed through this connector.
-
The next eight bytes specify message size restrictions, if any. If no message size restrictions apply to this connector, the value is ffffffff.
-
The second eight-byte block indicates whether a large message threshold is set. The value ffffffff indicates that no message threshold is set. Any other value specifies the threshold in kilobytes.
-
The following digit specifies whether public folder referrals are allowed (0 = allowed, 1 = not allowed).
-
The next digit indicates whether messages are accepted from everyone by default. A value of 1 means that all messages are accepted by default. A value of 0 means that all messages are denied by default.
-
The next four fields (0 () 0 () 0 () 0 ()) are lists of originators and distribution lists that are allowed or denied to send messages through this connector. The first list contains the distinguished names of allowed originators, the second list contains the distinguished names of denied originators, and the final two lists contain the allowed distribution groups or denied distribution groups. The numbers in front of the brackets stand for the number of entries in each list.
The following is an example of a list with two originators (the format is the same for all accept and deny lists): 2 ( {2d}CN=Ted Bremer,CN=Users,DC=TailspinToys,DC=com {30}CN=Administrator,CN=Users,DC=TailspinToys,DC=com ). |
| Address Spaces | ARROWS ( {2}RG {20}83bd0e29fad06d4eb8b00faab3265cd5 1 {4}X400 {23}c=DE;a= ;p=TailspinToys;o=Exchange; 1 ) | Each connector has at least one associated address space. The routing engine uses this information to determine possible connectors for a particular message by comparing the recipient addresses with available address space information. In the link state table, the ARROWS () list contains the individual address spaces that belong to the connector. Each address space entry contains the following three pieces of information: - Address space type The address space type determines the format of the address space information that follows in the next position. For example, an X.400 address space requires address space information in a valid X.400 format. An SMTP address space, on the other hand, contains parts of an SMTP domain name. For routing group connectors, the address space type is RG, which stands for a routing group objectGUID.
- Address space The address space specifies the address pattern that the routing engine compares to the recipient addresses to identify the destination of the message. The routing engine uses address spaces differently between external and internal recipients.
For external recipients, the destination is a messaging connector to the external messaging system. The advanced queuing engine passes the external address information to the routing engine and the routing engine selects the connector that most closely matches the destination. For example, if an SMTP connector has an address space of SMTP: *.net and another SMTP connector has an address space of SMTP: *, the routing engine selects the first SMTP connector for all recipients that are in .net domains and the second SMTP connector for all remaining Internet recipients.
For recipients in the local organization, address spaces are defined in recipient policies (address space setting This Exchange Organization is responsible for all mail delivery to this address). If a recipient's address matches an address space for the local organization, the categorizer determines the recipient's home server based on the recipient's msExchHomeServerName attribute. The categorizer stamps the recipient with the home server's FQDN, and the advanced queuing engine passes that FQDN to the routing engine to route the message to its destination in the local organization. The routing engine uses the FQDN to locate its server cache. It finds an entry for the home server, and this entry includes the recipient's home routing group GUID.
The routing engine uses the recipient's home routing group GUID to determine how the message must be transferred, as follows: -
If the home routing group GUID is equal to the local routing group GUID, then the recipient is in the local routing group, and the message must be transferred directly to the recipient's home server using the Exchange server's default virtual SMTP server. The routing engine returns the FQDN of the recipient's home server to the advanced queuing engine to indicate the next hop host.
Note: |
|---|
|
Servers running Exchange Server 5.5 are exceptions that communicate with Exchange 2003 in the local routing group through RPCs and the MTA service, as explained earlier in this section.
|
-
If the home server's routing group is not the local routing group, then the message must be transferred to the destination using a routing group connector. Connectors that can transfer messages to a routing group must have a routing group address space that includes the destination group's GUID. Therefore, the routing engine can create a topology view that includes all possible transfer paths, beginning at the source and ending at all possible destinations in the Exchange organization. Based on the recipient's routing group GUID, the routing engine can find the ultimate destination of the message in the Exchange organization and can then return the next hop on the shortest path to that destination to the advanced queuing engine. This is explained in more detail later in this section.
- Cost Cost values are associated with address spaces and determine which connector is preferred for message transfer. The value can range from 1 to 100. If multiple connectors exist for the same destination, the connector with the lowest cost value is preferred. If multiple connectors have the same cost value, the routing engine selects a random connector to provide a simple form of load balancing.
|
| Source Bridgeheads | BH () | The BH field lists the local bridgehead servers for the connector and their status information. Bridgehead servers are identified using the following three pieces of information: - Bridgehead Server objectGUID The GUID of a virtual SMTP server, which is specified in the connector configuration as a local bridgehead server.
- Bridgehead Server Status Information that indicates the availability of the bridgehead server, as follows:
- CONN_AVAIL The bridgehead server is available.
- VS_NOT_STARTED A virtual SMTP server is stopped or is not started.
- CONN_NOT_AVAIL The connection is unavailable on the bridgehead server. For example, the source bridgehead server cannot establish a connection to a destination bridgehead server.
- Virtual Server FQDN The FQDN of the virtual server that acts as a bridgehead server for this connector.
|
| Destination Bridgeheads | TARGBH ( 766a192b43bfc3459ee85608d65a98a9 CONN_AVAIL {19}server01.TailspinToys.com ) | As with the BH () list, the TARGBH () list contains the destination bridgehead servers for a connector. This list is particularly important for routing group connectors, which can have more than one remote bridgehead server. In the example, the following information identifies the remote bridgehead server: - Bridgehead Server objectGUID 766a192b43bfc3459ee85608d65a98a9
- Bridgehead Server Status CONN_AVAIL
- Virtual Server FQDN {19}server01.TailspinToys.com
|
| Status | STATE UP | The status of the connector. This field can have two possible values: - STATE UP Indicates that the connector is available.
- STATE DOWN Indicates that the connector is unavailable.
The connector state is derived from the state of the connector's source bridgehead servers. A connector is STATE UP only if at least one source bridgehead server is available (CONN_AVAIL). If none of the connector's source bridgehead virtual servers is started (VS_NOT_STARTED) or the source bridgeheads cannot establish a connection (CONN_NOT_AVAIL), the connector state is STATE DOWN. Note: |
|---|
|
For a connector to be marked as down, all local bridgehead servers for this connector must be unavailable. Routing group connectors configured to use the option Any local server can send mail over this connector, in addition to DNS-routed SMTP connectors and MAPI-based connectors, are never marked as down. Routing group connectors, in which one bridgehead server is an Exchange 5.5 server, are never marked as down.
|
|