WinNT 4.0 SP2 Multinomed Computer Connection Enhancement

ID: Q161425


The information in this article applies to:


SYMPTOMS

When one of the network interfaces on a multihomed computer is out of service, it is impossible to establish a NetBIOS-over-TCP/IP connection to the multihomed computer.


CAUSE

NetBIOS over TCP (NetBT) only binds to one IP address for each physical network interface. From the NetBT viewpoint, a computer is multihomed only when it has more than one network interface card (NIC) installed. When a name registration packet is sent from a multihomed computer, it is flagged as a multihomed name registration so that it will not conflict with the same name being registered by another interface in the same computer.

If a broadcast name query is received by a multihomed computer, all NetBT/interface bindings receiving the query will respond with their addresses, and, by default, the client will choose the first response and connect to the address supplied by it. This behavior can be controlled by the RandomAdapter registry parameter.

When a directed name query is sent to a Windows Internet Name Service (WINS) server, the WINS server responds with a list of all IP addresses that were registered with WINS by the multihomed computer.

Choosing the best IP address to connect to on a multihomed computer is a client function. The following algorithm is employed, in the order listed:

This algorithm provides a reasonably good way of balancing connections to a server across multiple NICs, while still favoring direct connections when they are available.

However, with computers running versions of Windows NT 4.0 prior to Windows NT 4.0 Service Pack 2 (SP2), if the IP address chosen from the list does not respond, the connection attempt will fail. In some cases (specifically, the ones listed above where an address was selected at random), a second or third attempt to connect the resource may succeed; however, the user or application may receive an error and the retries may need to be instigated manually.


RESOLUTION

Windows NT 4.0 SP2 includes an enhancement to NetBT. NetBT still uses the algorithm listed above to choose a best IP address to connect to on a multihomed computer; however, now it retains the list of addresses and orders them by preference. It then attempts to ping each of the addresses in the list in order, until one of them responds. Two ping attempts are made for each address, with a two-second wait for a response after each attempt. If there is a successful response to one of the pings, then a TCP connection and NetBIOS session are established to that address. If none of the addresses respond to the ping attempts, NetBT will revert to the old behavior, and attempt to establish a TCP connection to the best address in the list.

In addition, if a session is already in existence and the network interface responsible for the session on the multihomed computer fails, the failure will be detected and a new session will be established over one of the working interfaces, provided that one exists. The status of open files may not be preserved, as file handles will be invalidated when the old session is deleted.

NOTE: This feature is specific to NetBT sessions, and does not apply to TCP connections used by other higher-level protocols or interfaces, such as Windows Sockets.

An additional enhancement was added in a hotfix after Windows NT 4.0 SP3 was released that provides better load balancing between NICs on a multihomed server and fixes some cases where a failed NIC on the server could prevent the client from connecting, even though other NICs might still be available.

As a result, NetBT now uses the following algorithm for selecting an address from the list returned by WINS:

  1. Check for addresses on local subnets or networks:


    1. If one or more of the addresses in the name query response list are on the same logical subnet as the calling binding of NetBT on the local computer, these addresses are put into a sublist of addresses.


    2. If no addresses were found in step 1a, and then if one or more of the addresses in the list are on the same logical subnet as any binding of NetBT on the local computer, those addresses are put into a sublist.


    3. If no addresses were found in steps 1a or 1b, and then if one or more addresses in the list are on the same logical network as any binding of NetBT on the local computer, those addresses are put into a sublist.


  2. Randomize the lists:


    1. If a sublist was generated in step 1, that list is put in a random order and the remaining addresses in the name query response list are added to the end of that list, also in a random order.


    2. If no sublist was generated in step 1, the main list is sorted in a random order.


  3. Picking the address:


    1. The client will take the new, randomized list and ping the first address on that list; if the server responds to the ping, that address will be used.


    2. If pinging the first address fails, the next address in the list will be pinged, until a good address is found.


For additional information on this fix, please see the following article in the Microsoft Knowledge Base:
ARTICLE-ID: Q182781
TITLE : Client Connections to Multihomed Server Not Load Balanced


STATUS

Windows NT 4.0 Service Pack 2 includes an enhancement to NetBT that improves the ability to connect to multihomed computers even when one or more of the network interfaces are disabled. There are currently no plans to port this enhancement back to prior versions of Windows NT.

Additional query words: multi-homed multi homed


Keywords          : kbnetwork kbbug4.00 ntprotocol NTSrvWkst 
Version           : WinNT:4.0
Platform          : winnt 
Issue type        : kbbug 

Last Reviewed: February 3, 1999