home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Black Box 4
/
BlackBox.cdr
/
lan
/
an008b.arj
/
AN008B.TXT
Wrap
Text File
|
1991-01-29
|
26KB
|
525 lines
A Comparison of NetWare IPX, SPX and NetBIOS
Bill Bodine
Consultant
Systems Engineering Division
Abstract:
One of the first questions always asked during comparisons of NetWare
IPX, SPX and NetBIOS is which of these protocols will transfer data
the fastest, and how much slower the others are. This AppNote details
the results of four benchmarks written to illustrate the relative
speed of each of these communication interfaces. Performance, maximum
packet length, naming capabilities and memory usage are each singled
out as additional factors in the decision to implement systems using
these protocols. Clarification and explanation of SHELL.CFG parameters
are also included.
Novell, Inc. makes no representations or warranties with respect to
the contents or use of these Application Notes, or any of the third-party
products discussed in the AppNotes. Novell reserves the right to revise
these Application Notes and to make changes in their contents at any
time, without obligation to notify any person or entity of such revisions
or changes. These AppNotes do not constitute an endorsement of the
third-party product or products that were tested. The configuration
or configurations tested or described may or may not be the only available
solution. Any test is not a determination of product quality or
correctness, nor does it ensure compliance with any federal, state or local
requirements. Novell does not warranty products except as stated in
applicable Novell product warranties or license agreements.
Copyright { 1990 by Novell, Inc., Provo, Utah. All rights reserved.
As a means of promoting NetWare Application Notes, Novell grants you
without charge the right to reproduce, distribute and use copies of
the AppNotes provided you do not receive any payment, commercial benefit
or other consideration for the reproduction or distribution, or change
any copyright notices appearing on or in the document.
Introduction
When Novell began operations in 1982, several proprietary protocols
for transferring data between workstations were used. As time went
on, the decision was made to base Novell's network communications
on a fast and efficient networking standard. Xerox's XNS protocol
was determined to be one of the best available at the time so Novell's
Internetwork Packet Exchange (IPX) protocol was developed to conform
to the XNS standard. NetWare IPX is functionally equivalent to Xerox's
Internet Datagram Protocol (IDP).
This AppNote discusses the three primary peer-to-peer protocols
that are supported in the NetWare LAN environment-NetWare IPX, SPX
and NetBIOS. Additional protocols supported include the Transport
Layer Interface (TLI), Named Pipes, LU6.2 and others, but are not
covered in this AppNote.
NetWare IPX
NetWare IPX is a true datagram protocol. It makes a best-effort
attempt to send packets by using a 12-byte addressing scheme.
The 12-byte address is split into three addresses: the network
address, which is used to address individual workgroups; the node
address, which addresses network nodes within the workgroups; and
the socket address, which can be used to multiplex between functions
within a network node. When sending an NetWare IPX packet from one
node to another, the sending node must know the receiving node's 12-byte
address.
SPX
The Sequenced Packet Exchange protocol (SPX) is a connection-oriented
communications protocol that is built upon NetWare IPX. When a call
is made to SPX to send a packet by an application program, SPX will
do some housekeeping-type work on the packet, but will call NetWare
IPX to actually send the packet. SPX guarantees packet delivery, whereas
NetWare IPX only gives a best effort to deliver packets. This added
feature of SPX has obvious advantages, but as we shall see later in
the paper, it also adds overhead to the data transfer cycle and is
slower.
NetBIOS
The Network Basic Input/Output System (NetBIOS) functions in either
a connectionless mode or a connection-oriented mode. An application
written to the NetBIOS interface can be designed to use either of
these modes. For instance, if an application functions in a request/reply
mode with a transfer size of only one packet, then the connectionless
mode should be used to take advantage of connectionless response times.
On the other hand, if most of the transfers are one-sided or consist
of large numbers of packets, the transfers should use the connection-
oriented mode in order to ensure packet delivery and integrity of data.
Novell's NetBIOS emulator is built upon NetWare IPX in the same way
that SPX is.
The NetBIOS emulator is called an emulator because it is implemented
entirely in software, whereas the original NetBIOS introduced by IBM
and Sytek was located in firmware.
Because NetBIOS was introduced by IBM, it was almost instantly accepted
as an industry standard. Most networking vendors have implemented
the specification given by IBM that allows almost any application
written to the NetBIOS interface to operate in any environment.
A common problem with the NetBIOS specification, however, is that
it only deals with the upper layer functions of the interface. It
does not specify what communications protocol should be used underneath
it. As a result, almost every networking vendor has written NetBIOS
on top of their own proprietary communications protocol, which cannot
communicate with other vendors' protocols.
A nice feature that NetBIOS has to offer the networking industry is
its allowance of easy address resolution among locally-connected
workstations. All nodes on a network that use NetBIOS register a unique
name. When a node desires to communicate with another node, all it
needs to know is the node's unique NetBIOS name and NetBIOS will ensure
that the packet arrives at the proper location.
Performance Results
One of the first questions regarding the comparison of NetWare IPX,
SPX and NetBIOS is which of these protocols will transfer data the
fastest, and how much slower the others are. As part of this AppNote,
four benchmarks have been written to illustrate the relative speed
of each of these communications interfaces. The scope of the benchmark
is relatively simple-to send 2,000 255-byte packets and to record
the time that it takes for the transfer to complete. All the programs
were written by the same person and were intentionally kept as simple
as possible to make each benchmark represent the speed of the interface
and not efficiencies or lack thereof in the benchmark tests.
Each of the benchmarks encompassed two programs. One program
was used to send packets and the other was used to receive. The sending
side sent a packet and then incremented a counter. Before the packet
was sent, a call was made by the sender to the system clock. Once
the 2,000th packet had been sent successfully, another call was made
to the system clock. The first value was subtracted from the second
and the result represented the time in clock ticks that it took to
send 2,000 packets on the given communication interface. The receiving
side did nothing but receive packets and count the number that arrived.
No other processing took place within the code.
The following results were achieved on standard 8MHz 80286-based
machines on a 4MB Token-Ring network. While the test does not
represent any real-world scenario, it does indicate the relative
speed of each interface tested.
NetWare IPX 366.0 packets per second
SPX 140.3 packets per second
Novell NetBIOS datagram 224.8 packets per second
Novell NetBIOS session 135.9 packets per second
NetWare IPX is the fastest protocol available from Novell. This is
expected since all others are written in terms of NetWare IPX. SPX
and NetBIOS are slower than NetWare IPX due to the extra overhead
they introduce into the communications process. SPX and the NetBIOS
session level interface run at virtually the same speed. They both
have to maintain the same level of connection overhead for the
guaranteeing of packets and are both written in terms of another
interface.
Other Decision Criteria
There are a few primary differences between writing an application
to NetWare IPX or SPX and writing an application to NetBIOS. Two of
these differences deal with the maximum length of packets that can
be sent and the address resolution.
Maximum Packet Length
With NetWare IPX and SPX the maximum packet size that can be sent
by an application depends on either of two things. If the packet to
be sent must cross a NetWare bridge, the maximum packet size possible
is 576 bytes. The bridge will drop any packets that exceed this size.
On the other hand, if the packet will not be crossing any bridges,
the network interface card (NIC) drivers limit the size. While most
drivers allow packets of 1,024 bytes or larger to be transferred,
NetWare documentation recommends that the maximum size transferred
be 576 bytes. This is in case the packet crosses a bridge or the driver
cannot handle larger packets.
NetBIOS allows an application to send packets up to 64KB in size.
This is possible because the NetBIOS emulator breaks the packet into
smaller packets for the application and sends them out in sizes that
can be handled by NetWare IPX and the NIC drivers. While this feature
is useful, some developers choose to split packets up themselves in
order to optimize the NetWare IPX bandwidth for their application.
This may or may not be a factor in different situations.
Naming Capabilities
The second primary difference is the naming capability supplied with
NetBIOS. NetBIOS makes it convenient for an application to determine
the addresses of other nodes on the network. Each workstation identifies
itself with a particular name. Once any other workstation on the LAN
knows that name, data can be sent between the two workstations.
Novell recognized the need for this easy address resolution when it
developed NetWare IPX, so the Service Advertising Protocol (SAP) was
developed. With SAP, a node advertises, or broadcasts to the entire
network its name and address. This name and address are stored internally
on all NetWare network file servers. When any other node wants to
find an address, it queries a NetWare file server and the necessary
information is returned. There are also other ways of finding an address
without accessing the NetWare file server, but they are not as common.
Both of these methods have advantages and disadvantages. While it
is probably easier for an application with the naming capability of
NetBIOS to be developed, using the SAP provided by NetWare does not
require much more work. The advantage gained by using the SAP is that
once the address is resolved, the underlying protocol is very fast.
The SAP is designed for a client-server environment, which means
that a client always initiates a dialogue with the server. The client
can always find the server's address through the SAP. Since all packets
on the network contain the 12-byte address of the node they were
sent from, the server will know which address to send responses to.
Memory Usage
When an application runs on a network workstation, particularly in
the DOS environment, the amount of memory that is free for the application
to use is often a primary concern. In NetWare the first software to
load on the network is a terminate-and-stay-resident (TSR)
program called IPX.COM. This program contains all the interfaces needed
to run NetWare IPX programs and SPX, and uses about 14KB of workstation
memory. This is the only piece of NetWare software that needs to be
run in the workstation if no communications are needed with any file
servers. If a file server is needed, the TSR NET3.COM is loaded after
IPX.COM. This program contains all the functions needed by the workstation
to communicate with any NetWare file server on the LAN. It uses about
38KB of workstation memory. NetBIOS is an optional TSR like NET3.
IPX.COM must be loaded first. When NetBIOS is loaded it takes up about
30KB of workstation memory. Just as NET3 is only used when communications
are sent to a NetWare file server, NetBIOS is only run if an application
needs to use the NetBIOS services. Native NetWare does not use NetBIOS
for any of its communications services.
Appendix A lists parameters that have been modified in the recent
versions of NetBIOS. Because of the differences among versions, they
will be discussed as they relate to the specific versions.
The values listed in Appendix A are approximates. It is not possible
to state exactly how much memory any of the three protocols will use
up because they all contain custom parameters that change their sizes
and configurations. The parameters that alter these configurations
are located in a file named SHELL.CFG. As IPX.COM or NetBIOS.EXE is
loaded, it looks for this file in the local directory or a search
directory. Once it locates SHELL.CFG it searches within the file to
determine if any of its default parameters have been altered. These
parameters can be configured from within the SHELL.CFG file. Appendix
B of the NetWare Supervisor Reference manual also explains
the parameters.
Conclusion
While the primary advantage of writing to NetWare IPX is speed, the
main advantage of writing to NetBIOS is that the application will
work on other environments in addition to NetWare. This should obviously
be considered for applications that are marketed on a variety of platforms.
Even though different vendors' NetBIOSs can rarely communicate with
each other, most applications do port well over these vendors'
implementations.
There are a variety of reasons applications are developed to
one protocol or another. One reason a protocol is chosen is because
it is perceived as the defacto standard. For many developers, NetBIOS
is seen as a standard. Applications are developed to that platform
for reasons of portability to a variety of environments. On the other
hand, many developers are developing to NetWare IPX because they recognize
NetWare's large market share and want to reach the greatest market
possible with the most efficient protocol available.
Sometimes, one protocol may be perceived as easier to develop to than
another. Of course whether one is actually easier than another depends
entirely on the resources that are available, such as the Novell C
Interface libraries for NetWare IPX and SPX, the experience of the
development team or even available documentation and training.
Appendix A: SHELL.CFG Parameters
Version 2.0a
NetWare IPX Sockets
Sockets are typically used by NetWare IPX to determine which process
within a given node is to receive a packet. For any process to receive
an NetWare IPX packet, it must first open a socket and then "post"
a listen on that socket. When NetWare IPX receives a packet, it checks
the destination socket number and delivers the packet to the process
that is listening on that socket. The default number of sockets that
can be opened in one workstation is 20. This can be altered to include
any value from 10 to 150. NET3 uses up a few NetWare IPX sockets when
it is loaded, but even with those included, rarely than more than
20 sockets will be needed at one time.
NetWare IPX Retry Count
This parameter deals with SPX, NET3 and NetBIOS. When any one of these
modules fails to transfer an NetWare IPX packet, the transfer is
automatically repeated. The number of times it retries is based on the
value set in this parameter. The default is 20, but the value can be set
from 0 to 255. Obviously, either of these extremes is not advisable. If
the value is too low, connections will constantly timeout. If the
value is too high, workstations will take a long time detecting broken
connections.
SPX Connections
This option controls the maximum number of SPX connections that can
be used at any given time. The default value is 15, while the minimums
and maximums are 5 and 150 respectively. In a client-server type
environment the default will be sufficient for the client side, but
the server side may require the maximum to be increased, depending
on how many clients exist at any one time. Before this value is
arbitrarily raised it should be recognized that by increasing the
number of SPX connections in the SHELL.CFG file, IPX.COM will use up
more of the workstation memory. For each SPX connection that is
configured SPX will use 54 bytes of RAM.
SPX Listen Timeout
SPX uses what are called watchdog packets to ensure that sessions
between workstations remain active when no other activity is occurring
on the session. SPX listen timeout, along with the following two
parameters, is used to signal to SPX when a watchdog packet should be
sent or when one should have been received from the other workstation.
If SPX has not heard from the workstation on the other side within the
time specified by SPX listen timeout, it will send a watchdog packet
asking the other side to respond. The time is indicated in clock ticks.
The default is 108 ticks (about 6 seconds). The minimum and maximums
range from 0 to 64KB, although setting the value greater than SPX
abort timeout (see next entry) will have no improved affect.
SPX Abort Timeout
SPX abort timeout controls how long an SPX connection has waited to
hear from the other side and determines the other side is no longer
communicating. If it is necessary to have a session timeout faster
than normal, this option can be modified. The default value is 540
ticks (about 30 seconds), and the minimum and maximum values are the
same as in the previous option.
SPX Verify Timeout
This option determines how often packets should be sent to the other
side, to indicate. The default is 54 clock ticks (about 3 seconds),
and the minimum and maximum values range from 0 to 64KB.
Ipatch
This option allows the user to patch any location within the NetWare
IPX data segment with any value desired.
Npatch
This option allows the user to patch any location within the NetBIOS
segment with any value desired.
NetBIOS Session
This option is used in the same way as the SPX connections option.
The minimum value that can be set is four and the maximum is 250.
The emulator uses 88 bytes of RAM for each NetBIOS session configured.
NetBIOS Commands
When an application makes any request of NetBIOS, a command is issued.
By default, 12 commands can be outstanding within NetBIOS. In other
words, if 12 requests have been made to NetBIOS, NetBIOS must respond
to at least one of the requests before more requests can be made.
This parameter allows a user to configure the number of outstanding
commands to any value between 4 and 250. For each NetBIOS command
that is configured, the emulator will use 64 bytes of workstation
memory.
NetBIOS Send Buffers
When an application requests NetBIOS to send a packet, control information
must be initialized for each packet sent. NetBIOS allocates space
for as many control buffers as are configured by NetBIOS send buffers.
NetBIOS is a Stop-and-Wait protocol. This means that if an
application hands two packets to NetBIOS to send, the second will
not be sent until the first has successfully arrived at its destination.
NetBIOS requires some buffering space for this second packet. That
space is essentially accommodated by this configuration parameter.
The default value for this option is six. The minimum and maximum
values are four and 20, respectively. Sixty two bytes of RAM are used
by the emulator for each send buffer that is configured.
NetBIOS Receive Buffers
This option is similar to the previous option, except that it relates
to the number of receives that can arrive at a workstation. Most
applications have the ability to receive a number of packets at a time.
For example, five requests may be made to NetBIOS to listen for arriving
packets. As NetBIOS receives packets, it puts the control information
pertaining to those packets in the space allocated by NetBIOS. If a second
packet arrives while NetBIOS is still processing the first packet, there
must be space to buffer that packet until NetBIOS is able to finish
processing the first packet. The configurable values are the same
for this option as for the previous one. Under most circumstances
the default values should suffice. Under extreme conditions, however,
they may need to be bumped. If many sessions are sending data to NetBIOS,
increasing this value may improve throughput. As with the send buffers,
the emulator uses 62 bytes of RAM for each receive buffer that is
configured.
NetBIOS Listen Timeout
This option and the next two function in exactly the same in NetBIOS
as do the corresponding options in SPX.
NetBIOS Abort Timeout
See SPX abort timeout.
NetBIOS Verify Timeout
See SPX verify timeout.
Version 2.1
NetBIOS Retry Delay
When an application registers a unique name with NetBIOS, NetBIOS
broadcasts the name to every other NetBIOS workstation on the network.
If any other workstation has the name already registered, it sends
a response packet to the workstation trying to add the name. This
indicates that the name has already been registered elsewhere.
For this scenario to work properly, the workstation adding the name
must wait to hear from all others on the network. On large networks
with many bridges this can take much longer than on small networks.
This parameter is used in conjunction with the NetWare IPX retry count
to determine the time the workstation will wait when registering a
NetBIOS name. The node attempting to register the name sends out as
many packets as are specified by NetWare IPX retry count. The time
between each send is given in NetBIOS retry delay. If both of these
values are decreased, the time it takes to add a name will also be
decreased.
The options are also used when a node is trying to determine the address
of another node on the network. The first time a packet is sent to
another node, NetBIOS sends a broadcast on the network asking for
the workstation that has the name registered to please send a packet
indicating its address. Once this packet is received the node knows
where to send the packet. This process requires the requesting workstation
to give every node on the LAN the chance to respond.
In addition to the naming functions, this parameter is used for session
maintenance within NetBIOS. When communicating on a session in NetBIOS
(or SPX) an acknowledgment (ACK) is sent for every packet that is
initiated on the session. For example, if station A sends a packet
to station B, the NetBIOS emulator in station B will send an ACK to
A. If A never receives the ACK, it will assume the packet was lost
and will re-send the packet. NetBIOS retry delay is used to determine
the time a station will wait for an ACK before it assumes the packet
was lost.
NetWare IPX retry count is also used to determine how many times
the station will re-send the packet before determining the transmission
is hopeless.
Version 2.15B
NetBIOS Retry Count
In this version of the emulator, this parameter replaces NetWare IPX
retry count for determining how long NetBIOS should wait when adding
a name or querying the network for the address of a name. It also
replaces NetWare IPX retry count when determining how many times to
re-send lost packets before determining that a session is no longer
functional.
Version 3.01
In this version of the emulator, the naming functions and the session
maintenance functions are separated into four different parameters.
NetBIOS Retry Delay
This parameter now deals exclusively with session maintenance within
NetBIOS.
NetBIOS Retry Count
This parameter is also used entirely for session maintenance in this
version of the emulator.
NetBIOS Broadcast Delay
This parameter deals entirely with name resolution in NetBIOS.
NetBIOS Broadcast Count
This parameter also deals exclusively with name resolution.
NetBIOS Internet
If NetBIOS will be used over LAN bridges, this value should be set
to on. This indicates that packets are going to take longer to traverse
the entire internetwork. In such a case, the values for NetBIOS retry
count, NetBIOS broadcast count, and NetBIOS broadcast delay are by
default 20, 4 and 38 respectively. If NetBIOS internet is set to off
(all communication will be done on one network), the default values
are 10, 2 and 18. If any of these parameters is set within SHELL.CFG,
the defaults presented by this parameter will not be used.
As can be seen by the options that can be configured with these protocols,
there are many timing issues involved with them. Any time a connection
service is offered, timing becomes a key issue. Timing also plays
a key role in the naming functionality associated with NetBIOS. It
is mostly for this reason that NetBIOS is not considered to be a useful
protocol for wide area communications. Much of NetBIOS deals with
waiting for workstation responses. Operation of the NetBIOS protocol
would be prohibitively slow if it also had to wait for responses from
networks or nodes connected over slow link lines. It is for this reason
that Novell says its NetBIOS emulator is not supported over lines
slower than 1 Mbit/s.