An Overview of Windows 3.x' NBT Services
Windows for Workgroups' native networking architecture provides users in a small local area network with limited file- and printer-sharing capabilities. Users can connect to other Windows for Workgroups PCs, and use other systems' shared resources.
This functionality is a result of the combined functionality offered by a collection of various networking components.
Network Driver
At the top of the heap rests the network driver. Just as Windows has video "drivers" that tell the operating environment about specific features that your video adapter offers, it also has drivers that inform it about the network operating systems in use on the PC. These drivers provide a browsable interface to the network, generally through File Manager and Print Manager.
Some TCP/IP suites provide an NFS driver for example, allowing users to browse and connect to remote NFS servers through File Manager, or allowing users to browse and connect to remote LPD printers through Print Manager.
Windows for Workgroups' native network driver is an adaptation of the LAN Manager Windows client driver from Windows 3.1. It provides a browsable interface to servers based on Microsoft's LAN Manager. This includes Windows for Workgrous, Windows NT, Windows 95, Digital PathWorks, SAMBA, and several other products.
The network driver itself only provides an interface to the network resources. It does NOT provide any protocol or service functions.
NOTE: The network driver is not to be confused with the network ADAPTER driver. The network adapter driver is generally DOS-based, and is part of the user's ODI or NDIS installation, providing an interface between the low-level protocols and the network adapter itself. The network driver on the other hand provides an interface between Windows and the network operating system.
Redirector and Server
The client redirector is what handles the presentation of resources on the network. This module handles user account security, resource availability, the actual "connection" to a remote server's resource, and other network operating system-specific functions. Essentially, once two computers are able to communicate with each other, the redirector provides the local operating system with the ability to access the remote system.
For example, File Manager doesn't understand network concepts explicitly, but instead relies on the redirector to handle requests for it. If you connect to a remote server and list the files in one of its directories, these requests are passed to the Windows kernel which checks to see if the resource is local or remote. If it is remote, it passes the request to the redirector, which passes it to the remote system. That system processes the request, and returns some sort of answer. The redirector then passes the data back to the kernel for presentation to the application that requested it.
Windows for Workgroups also provides a server component that listens for requests from remote systems. If you have enabled file sharing on your PC and another user connects to your system, then his redirector is talking to your server. The server is, in essence, the opposite of the redirector. However, the server also relies on the redirector to provide the interface to the network for it. When the server wishes to advertise a resource, it publishes the information with the redirector, which then sends the information out onto the wire.
Server Message Blocks (SMBs)
When two Windows for Workgroups nodes communicate, they must use a common set of commands. They can't just pass arbitrary strings of data around the network. With Windows for Workgroups and other derivatives of LAN Managers, a "dictionary" of network-I/O commands is provided by the X/Open-standard Server Message Blocks (SMBs). SMBs provide a well-defined method for servers and nodes (called "consumers" in the SMB definition) to communicate with each other.
The SMB specification is comprised of a list of network commands. For example, if a user wants to open a file that resides on a server, then the SMB command "SMBopen" is passed between the two systems. This occurs at the redirector level. The client PC's redirector sends the SMBopen command to the server PC's redirector module, which passes the request up to the server, which then interprets the request, and hopefully sends the file back to the client PC.
SMB commands exist for a wide range of functions, and provide a quick and cost-effective way to do the most common network functions. Commands exist for things like login security, printing, and working directly with files and directories. In other words, the SMB protocol is the heart of the network, providing a common language for all the clients and servers to use.
Note that by implementing SMBs on different systems, the client is able to communicate with them. If those systems were not running SMB-based servers, then the redirector would not be able to communicate with them. This is also very similar to the NFS model. As long as you've got an NFS server component on a system, then NFS clients can connect to it and exchange data.
NetBIOS Applications
Just as there are file- and print-sharing mechanisms, there are also generic network applications that communcicate between multiple systems. In the TCP/IP world, these applications are FTP, the World Wide Web, Internet Relay Chat (IRC) and many others. In the Windows for Workgroups world, these applications are generally NetBIOS-based, and not TCP/IP-based.
Two of the NetBIOS applications that come with Windows for Workgroups include the Chat and ClipBook applets. They allow users to connect with other NetBIOS systems and exchange data. These programs do NOT use SMBs since they are not tied in to the redirector. However, they are similar to the redirector/server model since they are node-to-node communcations. They can use a common set of commands similar to SMBs, but these commands are determined by the applications themselves.
NetBIOS applications range from the simple Chat-like applets to mainframe gateways and multi-user databases. Any application that needs to communicate with another can use the NetBIOS APIs to do so. Lotus' Notes server for Windows is a NetBIOS application, for example. Also, Microsoft Mail for Windows NT can support NetBIOS. This allows one NT mail client to notify another client that new mail has been sent, using a NetBIOS message. The normal method requires that the recipient workstation check the inbox on a fileserver's shared drive for any unread messages.
NetBIOS the API
NetBIOS applications and the redirector component of Windows for Workgroups all communicate with other machines through the use of the NetBIOS API.
A little history of NetBIOS is perhaps in order here. Several years ago, IBM developed NetBIOS with the goal of developing a network protocol that would work on small networks of PCs. The keyword in that sentence is "small". At the time, the practical limit for an ethernet segment was 30 nodes, while IBM's own vaunted and un-delivered Token Ring was limited to 255 nodes. There was no need to build in capabilities for moving data between multiple network segments, since nobody was doing it, and the use of gateways to link networks was assumed.
Thus, the design goal was to build a very small and fast protocol. The protocol would provide APIs for the development of network-specific applications that could communicate on a machine-to-machine, or application-to-application basis. Also, the network naming system would allow for human-assigned names of devices, like "MyServer," which is easier to remember and work with than a complex numbering scheme such as TCP/IP. Unfortunately, this design breaks down very quickly in minorly-complex networks, and is completely non-scalable.
NetBIOS was (and continues to be) a broadcast-intensive protocol. Since the assumption was that there were only a few nodes on the network, and that devices would be appearing and disappearing at random (as PCs are apt to do), then it was best to be able to locate a device with a broadcast rather than with any sort of centralized registry. Unfortunately, broadcast packets don't work in today's router-based networks, since the routers don't pass packets that aren't specifically destined for another network node. And since the NetBIOS naming structure is non-hierarchial, devices can't specify remote network segments. Thus, the only way to make NetBIOS work in large networks is to bridge the various segments into a large virtual network. Unfortunately, NetBIOS' reliance on broadcasting limits its use to relatively small networks, so large bridged networks don't work very well either.
NetBIOS uses machine and application names to identify nodes and services available on the network, and for all exchanges of information between them. When Windows for Workgroups starts up, it broadcasts its assigned workstation name, and if no other node challenges the name (or claims to be using it already), it keeps the name for itself. It does not necessarily register the name anywhere, but instead each node is responsible for maintaining its own name tables. If a subsequent node comes on the net and claims the same name, it is the responsibility of the first node to challenge the new one.
Likewise, when a node needs to communicate with another node, it uses broadcasting to find the remote system. The remote system is responsible for responding to the broadcast with a directed reply. Once nodes have identified each other, they can communicate with directed messages.
If you have a NetBIOS application and you wish to communicate with another system or user who is also running that application, then your client will issue a broadcast for the application's NetBIOS name. If the node you are trying to communicate with does not receive the broadcast, then he will not respond, and your client should timeout gracefully. Once your application has located its partner, they will communicate directly.
NetBIOS-over-TCP/IP (NBT)
Fortunately, the NetBIOS APIs can be used with any low-level transport protocol —such as TCP/IP. Unlike NetBIOS, TCP/IP is completely routable. Indeed, it is predominantly a point-to-point protocol that avoids broadcasting whenever possible. Thus, using TCP/IP as a way to move NetBIOS-based data is an attractive alternative to the flat and non-routable NetBEUI protocol that is the default in Windows for Workgroups.
Since NetBIOS uses names for addressing purposes while TCP/IP uses numbers, there must be some way to map the two so that both of them see what they expect. In order for NetBIOS-based applications to run over TCP/IP networks, the NetBIOS application must see names, and the IP protocol must see numbers, yet neither can see the other. A layer between the two must map NetBIOS names to IP addresses, and convert IP addresses back to NetBIOS names. This layer is known as NetBIOS-over-TCP/IP.
TCP/IP standards are defined by Requests for Comment, or RFCs. Anyone may submit an RFC for consideration as a standard (even you). Two such RFCs are 1001 and 1002, which define a standard method for running NetBIOS over TCP/IP. RFC 1001 defines a general overview, while RFC 1002 defines the details.
There are three types of NetBIOS nodes defined in these two RFCs. A b-node (broadcast node) is one that uses broadcasting to query nodes on the network for the owner of a NetBIOS name. A p-node (point-to-point node) uses directed calls to communicate with a known nameserver (not to be confused with DNS) for the IP address of a NetBIOS machine name. An m-node is a mixed node, one that uses broadcasted queries to find nodes, and failing that, queries a p-node nameserver for the address. Another type currently under review is an h-node, which reverses the m-node standard so that a directed query is executed first, and failing that, a broadcast is attempted. Remember that the node types apply only when a node is attempting to match an IP address to a NetBIOS node name. Once the device has discovered the IP address of the machine it's trying to communicate with, it no longer broadcasts information, but sends the IP traffic directly to the node associated with the NetBIOS name.
NetBIOS Name-to-IP Address Resolution Schemes
NBT can use a variety of mechanisms for name resolution. The simplest conceptual and practical method is to simply rely on the default of using broadcasts to locate network resources. This calls for the node to issue TCP/IP broadcasts for every NetBIOS query. Hopefully, the partner system is on your local network, and will see and respond to the broadcast. If you need to be able to configure more exacting name resolution patterns for more complex environments, then you will want to use on of the more powerful options available.
NBT can convert NetBIOS names to IP addresses in several ways. The one described above—broadcasting—hardly seems suitable in anything except the most simple networks. Another potential way to resolve the name is to pre-load the NBT name cache with an IP address. This is accomplished using a text file called LMHOSTS. Another option is to use Windows Internet Name Service (WINS) servers. A WINS server is essentially a p-node as described in RFCs 1001 and 1002, although as an implementation it is proprietary to Microsoft. You can also use your DNS servers as name servers, although this is very limited in functionality.
Assuming you have any of these name resolution options enabled on your Windows for Workgroups PC, the NBT name resolution applies the search in the following order of precedence until a name match is found.
- NBT searches its internal name cache.
- NBT queries the WINS server(s) defined.
- A broadcast is issued.
- NBT searches the LMHOSTS file.
- NBT issues a DNS query for the NetBIOS name in question.
If no match is found, a name-not-found error is returned to NetBIOS.
The Windows Internet Naming Service (WINS)
In essence, a WINS server is a p-node server as defined in RFCs 1001 and 1002. However it is proprietary to Microsoft in implementation. WINS servers have NetBIOS name-to-IP address databases that are built automatically from a variety of sources:
- If you are using Windows NT-based DHCP servers, they will inform all of the WINS servers they know about of all the NetBIOS names and IP addresses in their databases.
- WINS clients that come up on the network register their NetBIOS names and IP addresses with the WINS servers specified. If a name is duplicated, then it is rejected by the server. This allows the WINS database to be centrally maintained and refreshed by clients scattered around the world.
- WINS servers also store local b-node query traffic so that they can answer on behalf of other devices. This means that nodes won't have to resort to broadcasts as often, since the WINS server will respond immediately with the cached information. Note that this oly applies to broadcasts on the local segments that the WINS server(s) is attached to.
Since the WINS servers are populated by so many forms of network activity, they require almost zero administration, and are extremely reliable at the same time. This makes them the best choice for NBT mappings. A single WINS server that all clients point to can be used to enable browsing across an entire world-wide network, since the reliance on broadcasting has all but been eliminated.
Also, clients that do not have WINS software and (and therefore rely on broadcasting) can take advantage of the WINS servers, since the latter will respond to a broadcast on behalf of a remote system. This means that all NBT nodes now can know about any other node that the WINS server knows about, increasing your network's overall reliability.
As an additional note, you can distribute WINS servers to each of your various network segments. This will provide your local Windows for Workgroups PCs with a browsable interface to your entire network.
To enable name resolution with WINS servers, add the following entry to the [NBT] section of your Windows for Workgroups' SYSTEM.INI file. If the [NBT] section does not exist, create it.
NameServer1=WINS_IP_address
where WINS_IP_address is the IP address of your WINS server. You can also add a secondary WINS server if you want by defining the "NameServer2=" entry.
If you do not want your WINS servers queried before broadcasts are issued, you can change the search order by adding the following entry to the [NBT] section of your Windows for Workgroups' SYSTEM.INI file. You MUST have a NameServerX entry defined before you set this flag. Otherwise, you will receive name resolution errors.
NodeType=4
For additional information about the NodeType= flag, read the section titled Changing The Search Order below.
Configuring Windows for Workgroups as a WINS Proxy Server
In the previous section we told you that you must have a WINS server on every segment of your network in order for users to browse network-wide resources and for broadcasts to be resolved by WINS. Well, this is only partially true.
The truth is that you can actually configure your Windows for Workgroups PC to be a WINS "proxy" server that will respond to broadcasts, as well as allow you to browse remote network segments. The functionality is far from perfect, but it does provide some additional functionality that you would not otherwise have if you did not place WINS servers on every segment of your network.
The WINS proxy works by redirecting NetBIOS name queries to a defined WINS server. The Windows for Workgroups WINS proxy then stores the responses into its local NBT cache and responds to any SUBSEQUENT requests for the NetBIOS node name. This entry is held in the cache until it either expires or the cache space is needed for new entries.
To enable WINS proxy server capabilities, add the following line to the [NBT] section of your Windows for Workgroup's SYSTEM.INI file. You MUST have a NameServerX entry defined before you set this flag. Otherwise, you will receive name resolution errors.
EnableProxy=1
The LMHOSTS Database
The LMHOSTS database is a raw text file whose format is functionally identical to the TCP/IP HOSTS file. It contains a numerical IP address, a tab character, and a NetBIOS name (and optionally, a comment). LMHOSTS is read by NBT at startup and designated entries are stored in the NBT name cache. This has the absolutely wonderful effect of eliminating all broadcasts destined for nodes or services that are listed in the LMHOSTS file, since the NBT name-to-address entry is already cached.
Do not confuse the LMHOSTS database with the HOSTS database. Although they are similar in use and structure, they serve two entirely separate purposes. The HOSTS file is a database of TCP/IP host names and their corresponding IP addresses, while the LMHOSTS file is strictly for NetBIOS name to IP address mapping. Typically, the LMHOSTS file only shows a few systems. This does not mean that there are only a few nodes on the network, but that there are only a few remote nodes that must be addressed directly. Simply put, the LMHOSTS file allows NBT to take advantage of both the broadcasting and point-to-point architectures without requiring that a dedicated nameserver be on your LAN. Realizing that the "LM" in "LMHOSTS" stands for "LAN Manager" may make the clarification easier.
To enable name resolution with an LMHOSTS file, add the following entry to the [NBT] section of your Windows for Workgroups' SYSTEM.INI file. If the [NBT] section does not exist, create it.
LMHostFile=C:\WINDOWS\LMHOSTS.
You will need to use NOTEPAD or some other text editor to actually create the LMHOSTS text file.
A sample entry in the LMHOSTS file might look like this:
192.155.15.10 NWCFTP # NWC's FTP Server
This line simply tells NBT that any NetBIOS queries that are destined for the NetBIOS node TGVFTP are supposed to go to 198.93.23.13. By default, this name would be matched after a broadcast had been issued to the client's local IP broadcast address.
You may also need to define NetBIOS service name mappings. Just as a workstation has a NetBIOS name, so do services such as NetBIOS-based SNA gateways and other workgroup applications. An example of an application entry in the LMHOSTS file might look like the following:
127.1.1.1 SNAGATEWAY # SNA gateay box
This would tell NBT that the service SNAGATEWAY can be located on the host 127.1.1.1. If you had an SNA terminal emulator that needed to connect to the gateway system using the NetBIOS service name of SNAGATEWAY, then NBT would build an IP packet destined for 127.1.1.1 with a NetBIOS datagram in it.
You need to be careful about the entries you put into your LMHOSTS file. If they are not the correct name or IP address, you will obviously not get the benefit you desired. Some of the most common problems come from not providing the exact NetBIOS host name as the destination system sees it. For example, you cannot simply define the hostname of TGVFTP as TGVSERVER. The server service will not understand the request. Other problems arise when you specify the wrong IP address of the destination system. If NBT has a name-to-address mapping available, it will use it. Providing the wrong address will cause very long delays as the timeouts will have to clear before control is returned to your system.
Specifying Odd NetBIOS Names
Since NetBIOS doesn't use port numbers like TCP/IP does, its flat and limited namespace must be capable of supporting a variety of names for each destination system. For example, if you are running an SNA gateway, a licensing server, and a client-server application all on the same system, each of these services must have a unique NetBIOS name that indicates the service itself. The service will not respond if the incoming name does not match the actual service name itself.
Some vendors have gotten fairly creative over the years in assigning these NetBIOS names to their services. Some of them are case-sensitive, while other have gotten into the habit of using hexadecimal characters. While technically this is not a problem in the broadcast-centric nature of NetBIOS LANS of old, it becomes a difficulty when you are working with services running on remote servers.
NetBIOS names can be up to 15 characters in length with a 16th byte reserved for special end-of-name terminators. In order to identify these names, you must enclose the entry in quote marks, like this:
127.1.1.1 "ScrewySvcName" # Weird NetBIOS name
If you have to use a hex character in the name, then you must preface the character with the tag "\0x", like this:
127.1.1.1 "GATEWAY \0x20" # Name with Hex character
The above example would put the hex "20" in the 16th byte of the NetBIOS name.
Preloading Entries into the NBT Cache
Remember that the LMHOSTS file is only consulted after a WINS query and a broadcast have both failed, and that these searches are attempted only if the name is not already in the NBT name cache.
If you wish to add a frequently-used name to the LMHOSTS file, then you would use a tag called #PRE at the end of the line. Note that although the "#" symbol in the LMHOSTS file normally signifies a comment, NBT uses the #PRE string as a flag. This is for backward compatibility with LAN Manager servers that do not support selective preloading. They will ignore the #PRE command because they think it is a comment.
An example of a name-to-address entry that is to be pre-loaded into the NBT cache might look like the following:
192.155.15.10 NWCFTP #PRE # FTP Server
Note that everyting after the last comment tag (the "#") is ignored.
This entry would cause NBT to send a directed query directly to the TGVFTP host whenever it was requested, and a broadcast would not be issued beforehand. This is because the #PRE tag is pre-loading the entry into the NBT cache at system startup.
Specifying Domain Controllers
Whenever a client attempts to log onto a LAN Manager domain, broadcasting is used. Normally, a broadcast message follows the chain of events described above, but where domain controllers are involved, it is sometimes necessary to bypass normal channels. You can tell Windows for Workgroups that it is supposed to attempt domain logins with the hosts that are specified by using the #DOM flag.
In fact, you might want to add #DOM flags for all of the login servers in your domain. Then if the primary domain controller fails, the login request will get sent to the next server listed with a #DOM entry.
To signify that a system is a domain controller, put the #DOM:DOMAIN_NAME flag in the LMHOSTS file as follows, where DOMAIN_NAME is the name of the LAN Manager domain that you wish to login to:
127.1.1.1 MARKETING1 #DOM:MARKETING #Marketing PDC
Note that Windows for Workgroups PCs can NOT login to PathWorks domains at the time of this writing. Although PathWorks is based on LAN Manager, DEC has implemented proprietary mechanisms for logging into PathWorks-based domain controllers. This will not prevent you from connecting to resource on PathWorks servers; it only means that you cannot LOGIN to the domain if you only have PathWorks servers.
Sharing LMHOSTS Files Amongst Systems
Obviously, large networks with many servers and LANs will have a hard time dealing with massive LMHOSTS databases. There are a couple of tricks that can help in this situation. One is to use the #INCLUDE flag. #INCLUDE tells NBT to read not only the local LMHOSTS file, but remote LMHOSTS files as well. This would allow you to point NBT to a shared LMHOSTS file on a departmental server or domain controller. For instance:
#INCLUDE \\MARKETING1\public\lmhosts
In this example, the local PC will incorporate any entries in the remote LMHOSTS file whenever a lookup is needed. Although you can point to as many remote databases as needed, you should keep the list as small as possible. If you do this, make sure to give users at least read-only access to the shared file. Also, never reference drive letters for remote systems, but instead use the UNC names of the share point whenever possible (remember, remote drive letters can change!).
There are other tricks that you can do with the #INCLUDE command. For example, suppose that the MARKETING1 server was down. You would not be able to read the remote LMHOSTS file. You would not want to put multiple #INCLUDE statements for each of the servers in the MARKETING domain, as that would increase your search time with no foreseeable benefit (the data in each file would be the same).
However, by enclosing a block of #INCLUDES with #BEGIN_ALTERNATE and #END_ALTERNATE commands, you can tell NBT to search the first available LMHOSTS file. Thus, if MARKETING1 were down, NBT would search MARKETING2's LMHOSTS file:
#BEGIN_ALTERNATE #INCLUDE \\MARKETING1\public\lmhosts #INCLUDE \\MARKETING2\public\lmhosts #INCLUDE \\MARKETING3\public\lmhosts #END_ALTERNATE
Using Domain Name Service (DNS) Servers
Because of TCP/IP's 32-bit numerical node addressing, it is a truly distributed network protocol capable of spanning huge distances and multiple network segments. Unfortunately, these numbers are awful hard to remember. This is why DNS was invented; it provides a hierachial namespace that maps to IP addresses. Users can reference the host FTP.TGV.COM instead of having to remember that its IP address is 198.93.23.13.
While Microsoft has gone off and developed WINS as a mechanism for building databases that map IP addresses to NetBIOS names, DNS has been around for years, and provides a much more robust mechanism that all applications can use, instead of just NetBIOS apps.
However, the NetBIOS limitations of NBT still apply. The NetBIOS name you are querying for must match the name as registered by the system that owns it. Therefore, it is not possible for you to view the resources on the host FTP.TGV.COM by referencing it with that name. You must refer to it by it's NetBIOS name of TGVFTP.
This severly limits the usefulness of DNS as a NetBIOS name-to-IP address mapping tool. However, it is still very useful for viewing nodes that are in your same TCP/IP domain name. If you had a server called MARKETING1 that was also listed in the DNS under that same name, then you could do away with LMHOSTS and WINS altogether, and just use the existing DNS servers.
To enable name resolution with DNS servers, add the following entry to the [NBT] section of your Windows for Workgroups' SYSTEM.INI file. If the [NBT] section does not exist, create it.
EnableDNS=1
You will then need to create another section in SYSTEM.INI called [DNS], and under that add the following entry:
DNSServers=DNS_IP_address DNS_IP_address
where DNS_IP_address is the IP address of your DNS server. You can add up to two DNS servers in this field.
Changing the Search Order
Perhaps you are on a small isolated LAN segment yet you often communicate with servers at your corporate headquarters. You would want to take advantage of WINS servers that were on the remote LAN, but you would not want ALL of your name queries to go to that host before broadcasts were attempted locally. Instead, you might want to broadcast first, and if that failed then go check the WINS server. This would give you quick connections to the local services and hosts, while guaranteeing name resolutions (via WINS) for remote systems.
To change the WINS and broadcasting search order, you need to define one of the following entries in the [NBT] section of SYSTEM.INI. You MUST have a NameServerX= entry already defined, or else you will get name resolution errors.
NodeType=1; b-node, use broadcasts ONLY NodeType=2; p-node, use WINS servers ONLY NodeType=4; m-node, use broadcasts, then WINS NodeType=8; h-node, use WINS, then broadcasts
Note that if you have defined a NameServerX= entry and have not defined an explicit NodeType= entry, then you are defined as a node type of "8", or an h-node. If you have NOT defined a NameServerX= entry, then you are assumed to be a node type of "1", or a b-node.
The Transport Driver Interface (TDI)
One of the few nice things about NetBIOS is that it is simply an API. It does not rely on any specific underlying protocols to connect systems together. For example, Windows for Workgroups' redirector and server (as well as the NetBIOS applications) just talk to the NetBIOS APIs. These APIs can be provided by any protocol. Windows for Workgroups provides NetBEUI and IPX protocols, both of which have NetBIOS APIs available to them. This would allow you to run your Windows for Workgroups file- and printer-sharing (as well as the NetBIOS applications) over IPX if you wanted to. Other vendors provide other protocols with NetBIOS interfaces. Digital's DECnet for example can be used as a transport for Windows for Workgroups' native networking.
However, all of the systems that wish to communicate with NetBIOS must use the same low-level transport protocol. Otherwise, they would never see each other, and the NetBIOS API would be useless.
In order to provide a consistent interface to these protocols, Windows for Workgroups uses a module called the Transport Driver Interface (TDI). TDI provides a link between NetBIOS and the underlying protocols. Without this interface, the redirector software would need to explicitly understand each of the protocols and their capabilities. Whenever a new protocol was introduced, the redirector would have to be re-written. With TDI, it doesn't have to know anything specifically about any of these protocols. It simply needs to communicate with TDI, which handles the necessary conversion and spoofing needed to make the network software work over the chosen protocol.
The biggest problem with this design is that there must be a virtual protocol for the redirector to communicate with. In the case of LAN Manager derivatives such as Windows for Workgroups, that protocol happens to be NetBIOS, which as we've seen isn't very robust. In order for TCP/IP or IPX to act like NetBIOS, lots of trickery has to occur. You lose a lot of the features that came with the underlying protocols by using a lowest-common-denominator approach such as this.
Summary
NetBIOS is extremely limited, but provides a lowest-common-denominator approach to multi-protocol networking. It's use of names for nodes and services makes it easy to use, and its lack of dependancy on any formal hierarchial addressing mechanisms makes it flexible. You can put NetBIOS on top of just about any protocol, from IPX to DECnet to TCP/IP, and it'll work.
However, all sorts of problems arise when you try to map a flat, non-hierarchial namespace onto a distributed, hierarchial address space. There are several options available to the user however, so it is possible to build a name table that meets just about any requirement.
You can use a text file to store static maps (LMHOSTS), or you can setup a Windows NT server to act as a WINS server, or you can rely on your DNS servers already in place. The more complex sites will likely use all of these mechanisms. That's okay!
Whatever methods you choose to employ, remember that NFS doesn't carry any of these burdens, and has much higer levels of portability and availability. You can get NFS servers for AS/400s, HP-3000s, and just about every other platform in the world. And, you can still use your NetBIOS-based applications if you cannot convert them to IP since NBT provides basic NetBIOS name-to-IP address mapping and is not restricted to LAN Manager-centric computing.