[comp.protocols.tcp-ip.ibmpc] XNET Summary

martillo@cpoint.UUCP (Joacim Martillo) (01/12/89)

I wrote this summary description of XNET and would appreciate comments.




            Development Memorandum                                  0001
                                                                        
            To:            XNET Developers
            
            From:          Joachim Martillo
            
            Subject:       XNET Essentials
            
            Date:          January 11, 1989
            
            ____________________________________________________________
            
            I. Introduction
            
            Originally,  communications  networks  were  used  only  for
            remote login  and file  transfer.   Thus, kermit is actually
            the modern  incarnation of  the original  network  programs.
            Fairly  quickly  people  realized  that  more  sophisticated
            resource  sharing   is  desirable.     The   most  lucrative
            sophisticated  network   application  is   probably   remote
            database systems.   The  most flashy  sophisticated  network
            application is  probably network transparent window systems.
            The  most  ubiquitous  is  probably  network  file  systems.
            Network file  systems being  an  obvious  generalization  of
            remote file transfer is one of the earliest developed of the
            genuine resource  sharing systems.   When I was a student in
            1978, we  already had  remote file  systems for  the  PDP-10
            working.
            
            Remote file  systems are apparently the most complicated and
            least standardized  of  genuine  resource  sharing  systems.
            Important network  file systems  (sometimes actually  remote
            virtual disk  systems) include  NFS, RFS,  XNET (Xenix  Net,
            basically equivalent  to MS-Net),  Novell and  Vines.    The
            Berkeley Unix  developers have  recently implemented  a  new
            network file  system, and  proprietary remote  file  systems
            like Primenet  and DECNET  remote disks have been around for
            years.    The  plethora  of  remote  file  systems  and  the
            complication in  network file systems probably originates in
            the inherent  difficulty of joining communications to such a
            basic operating  system service  like file  service.  Unlike
            the implementer  of a network transparent window system, the
            implementer of  a remote  file system has to know lots about
            networking and  the target  operating system.  Data caching,
            concurrency and  security issues are really complicated, and
            there is  no particular  consensus on handling these issues.
            When I  was a  student,  a  computer  scientist  proved  his
            machismo by implementing a debugger.  Nowadays, implementing
            a network  file system  seems to  be the  current  proof  of
            machismo.
            













            II. TCP/IP
            
            Most  current  popular  network  file  systems  take  TCP/IP
            virtual circuits  (or UDP/IP  datagram service) as a starting
            point.   TCP/UDP/IP was  developed by  DARPA as  a means to
            interconnect different  physical networking  systems. (It is
            not obvious  that most  commercial TCP/IP based file systems
            actually make  use of  the ability to interconnect different
            physical  networks.)   IP  datagrams   provide   a   network
            independent means for gateways to move data packets from one
            physical network  to  another.    Gateways  are  allowed  to
            fragment IP  datagrams when  the maximum  packet size on the
            next subnetwork  is smaller  than the maximum packet size on
            the current  subnetwork.   TCP  and  UDP  identify  specific
            source and  target applications  on the  source  and  target
            machines.   TCP, UDP  and IP  are typically  implemented  as
            protocol processing  finite state  automata in  an operating
            system kernel.   While  about 10 years old, TCP/IP is one of
            the few  network protocol  suites which effectively makes of
            network  bandwidth   and  avoids  thrashing  and  hysteresis
            problems which arise in packet counting based flow  control.
            
            A system  interface is  necessary for  user applications  to
            actually use  TCP or  UDP services.   In  Berkeley Unix, the
            system designers  developed a  generalization  of  files  to
            provide the  interface.   The process  file  table  contains
            entries associated  with file  or socket  descriptor indices
            pointing either  to entries  in the global kernel file table
            or to  entries in  a global  network data  connection table.
            The double  table formalism  allows various forms of file or
            connection sharing.  The details are straightforward but not
            so important at this point.  The essentials are:
            
             1.  operations on  file descriptors,  pipe descriptors
                 and socket  descriptors are  essentially identical
                 and
            
             2.  sockets are  a generalization  of pipes  which can
                 handle   multiplexed   data   streams   and   non-
                 simultaneous rendezvous between several processes.
            
            There is  no requirement  that the  interface to TCP/IP look
            like sockets.   Inside  the unix  kernel there  is  actually
            another less  general interface  to TCP/IP  which is used by
            kernel processes. In the local environment,  both TCP/IP and
            the socket interface are provided by Excelan.
            
            III. NetBIOS
            
            NetBIOS is  both a protocol suite and user interface defined
            in the  IBM PC  Net Technical Reference.  The protocol suite
            does  not   provide   internetting   (connectivity   between
            different networks)  but does  provide a  device independent












            way of  using network  services which in the case of netbios
            consists  of   reliable  point-to-point   virtual  circuits.
            NetBIOS  can   handle   media   providing   only   broadcast
            communications  or   media  providing   only  point-to-point
            service or media providing both types of service.
            
            In NetBIOS, a machine (in the DOS case) or a process (in the
            XENIX case) allots itself a name with the local NetBIOS Name
            Server (NBSS)  and  then  sends  a  packet  to  the  NetBIOS
            Datagram Distribution  Server (NBDDS)  which connects to the
            NBNS to  find the  address of  the destination host and then
            redirects the  connection to the destination host. In a pure
            broadcast system the connection setup is slightly different.
            NetBIOS is  a much  more chatty  communications system  than
            basic  TCP/IP.     It  seems  to  use  either  single-frame-
            acknowledged or  packet-counting flow control.  In the Xenix
            case, both  the NBNS  and NBDDS are implemented on each node
            so that  many of  the  steps  of  connection  setup  do  not
            actually require the transmission of network data.
            
            In one LAN environment, Excelan implements NetBIOS on top of
            TCP/IP.   This sort  of implementation  immediately provides
            internetting capabilities to NetBIOS.  Yet, NetBIOS does not
            provide any  service that  TCP/IP does  not already provide.
            In fact,  NetBIOS provides  less than TCP/IP and in terms of
            network bandwidth utilization actually provides this service
            much less  efficiently.   One  might  legitimately  ask  why
            anyone would  implement NetBIOS on top of TCP/IP and thereby
            cripple network  performance.   In fact, many companies have
            done the inverse by implementing TCP/IP on top of NetBIOS so
            that a  NetBIOS network is simply treated as another type of
            physical network.   The  reason for  implementing NetBIOS on
            top of  TCP/IP is that there are many applications like XNET
            or MS-NET  which assume  a NetBIOS interface to the network.
            Implementing NetBIOS  on top  of TCP/IP gives the ability to
            make quick  and dirty  ports of  NetBIOS applications  to  a
            TCP/IP environment.
            
            The major  complexity of  implementing  NetBIOS  on  top  of
            TCP/IP seems  to be  naming.   A NetBIOS name (or a group of
            names in  the case  of a multiprocessing Xenix system) needs
            to be mapped to a TCP/IP domain name which is then mapped to
            an  IP  address.    NetBIOS  names  and  Domain  Names  have
            different sets of legal characters.  The high and low nibble
            of each  byte of  the NetBIOS  name is  added to 'A' and put
            into a  separate byte  which produces an all caps name twice
            as long  as the  original NetBIOS  name.   The local  domain
            suffix is  then added  to the  new name.  This new name plus
            suffix is  used as the domain name.  These names can be seen
            with the Excelan Lanalyzer.
            
            The NetBIOS application interface uses the int 5c DOS system
            calls.   Excelan provides  an int5c  interface for  Xenix so
            that application  developers can  actually make direct calls












            and write NetBIOS applications (like xfserv -- the XNET file
            server daemon)  under Xenix.   The  manuals do  not document
            this interface  very well.   Really  no more  information is
            provided than  can be  found in  the  system  include  file.
            There seems  to be no way to wait on several NetBIOS virtual
            circuits at  the same  time using  the int5c  interface, and
            there seems  to be no interface from select() to the NetBIOS
            virtual circuits.   As  a consequence,  each client  process
            gets associated  with its  own xfserv  server process on the
            file server machine.
            
            IV. Local and Remote File Systems
            
            Understanding local  file systems helps understanding remote
            file systems.   I  suppose it  might be possible to define a
            network representation  of files  and file  systems which is
            completely independent  of the  source and  target operating
            system file  systems, but operating systems tend to consider
            different  types   of  information   important.     XNET  is
            influenced by the MS-DOS file system while NFS is influenced
            by the Unix file system.
            
            A. The DOS File System
            
            A hard disk which contains a DOS partition starts off with a
            partition table  which identifies  DOS partitions and how to
            get to them.  A DOS partition starts off with a system block
            which contains  boot and  partition  parameter  information.
            The system  block is  followed by N (specified in the system
            block) FATs  (File Allocation  Tables).   The root directory
            follows the  partition table.  The root directory contains a
            list of files (including directories) in the root directory.
            With each  file entry is associated the files first cluster.
            (Clusters are  sequentially numbered groups of disk sectors)
            To get  the next cluster, DOS looks at this cluster index in
            the FAT.   If  the cluster index references 0xFFFF (for a 16
            bit FAT),  the file  has but one cluster.  Otherwise the FAT
            entry referenced  by the  first cluster  index contains  the
            index for  the second  cluster.   The FAT  entry for the Nth
            cluster contains  the cluster index for the Nth+1 cluster of
            the file  or 0xFFFF  if the  current  cluster  is  the  last
            cluster in the file.
            
            B. The UNIX File System
            
            A hard disk which contains a Unix partition starts off which
            a partition  table which  identifies Unix partitions and how
            to get  to them.   A  Unix partition  starts off with a boot
            block, a system block (which parameterizes the file system),
            an inode  list which  includes the  root inode and then data
            blocks.   Every file has an inode which identifies the first
            N blocks  of a  file (which  can be  a directory).   The N+1
            block entry in the inode actually is an indirect block which
            contains M+1  entries identifying  M indirect blocks and one












            indirect block.  The amount of permitted indirection depends
            on the Unix implementation.
            
            Unix file  system access  tends to  be faster  than DOS file
            access because  inode  access  is  simply  faster  than  FAT
            chaining and because Unix maintains read and write inode and
            disk block  caches.   DOS can  only be enhanced to contain a
            write through  cache.  Because Unix maintains a write cache,
            disk write  strategy can  be optimized.   Read  strategy  is
            harder to  optimize and  database programs  for this  reason
            prefer to  treat disks  as raw  devices  and  do  their  own
            caching.   Directories contain  a list of pairs of the files
            contained  in  the  directory  and  the  associated  inodes.
            Reading a  unix file  involves opening  the directory  which
            contains the  file to  get the  file inode  (namei routine),
            getting the  inode and  then getting  data out  of the  disk
            blocks.  Each process maintains its own fixed-length process
            file table  which contains N file read and write buffers and
            a pointer  to an entry in the fixed-length global file table
            which points  to an  entry in  the fixed-length global inode
            table.  An inode can only have one entry in the global inode
            table, while  several global file table entries can point to
            the same  inode.   If two  processes open  the same file the
            process file  table entries  point to  two different  global
            file table  entries which  point to  the  same  inode  table
            entry.   If the  two processes  are related  by a  fork, the
            process file  table entries  point to  the same  global file
            table entry  which obviously  points to but one global inode
            table entry.
            
            One file  system can be mounted on another file system at an
            empty directory  inode which  is then  marked as a "mounted"
            inode and  references an  entry in  the  fixed-length  mount
            table.   The mount  table identifies  the disk  device which
            contains the  second file  system.  The Unix user unlike the
            DOS, VMS  or PRIMOS  user generally  does not  have to worry
            about how the file system is laid out on the underlying disk
            partitions.
            
            C. XNET and NFS
            
            XNET uses  the SMB  protocol to  convey information from the
            server machine  so that  a client  DOS process when invoking
            DOS system  calls can  read remote  files as  if  they  were
            local.   That means  virtual disk  FATs, cluster indices and
            clusters can  be built  out of  SMB (XNET)  protocol blocks.
            SMB  protocol   blocks  are   passed  over  NetBIOS  virtual
            circuits.  Cluster caching is on the remote server.  The SMB
            protocol  provide   an  unacceptable   form  of   passworded
            directory security,  and is  a stated  protocol which  means
            that it  is possible  for bad  things to  happen to  a  file
            system if  one side  of an XNET connection goes away and the
            other side then gets out of synchronization in terms of what
            it believes  about the  file system.   Fortunately, there is












            not much  in the  way of  state associated with the DOS file
            system, so  that if both client and server are DOS machines,
            there is not much problem with crashes.  Aborted circuits on
            Xenix  clients   are  probably   a  symptom   of   loss   of
            synchronization and  are probably  the equivalent of the DOS
            critical error  Abort, Ignore, Retry? prompt which is always
            a pain when it occurs.
            
            NFS uses  the NFS  protocol to  convey information  from the
            server machine  so that  a client Unix process when invoking
            Unix system  calls can  read remote  files as  if they  were
            local.  This means that virtual disk inodes and virtual disk
            blocks are  built out  of NFS protocol blocks.  NFS protocol
            blocks are  passed via  UDP datagrams.   Generally inode and
            block caching  is on  the remote server.  NFS also lacks for
            security.   NFS is  a stateless  protocol in  which a remote
            read requires  the remote  file system to be instantaneously
            mounted with  a request to the remote mount daemon, followed
            immediately by  a remote  open request,  then a remote lseek
            request, then a remote read and then a remote close all done
            more or  less atomically.   Other file system operations are
            handled similarly  so that  it is  next  to  impossible  for
            server  and   client  file  system  states  to  get  out  of
            synchronization.   Since mount  tables are  not file  system
            structures but  rather are  in-core kernel  structure, it is
            not possible  on a  client machine  to access  file  systems
            which are mounted on remote file systems.
            
            In many respects NFS is more work than XNET, but the NFS and
            UDP/IP protocol  suites actually  make a much more efficient
            use of  bandwidth.   Further a  Xenix XNET  server basically
            takes Unix  file information  translates  it  into  the  SMB
            protocol in  anticipation that  the remote  client  will  be
            converting this  information will be converted by the client
            into DOS  file system information.  It is possible that such
            conversion does  happen, and  then the  DOS  information  is
            converted into Unix inode/disk block information.  With NFS,
            the NFS  protocol is  optimized to  carry information  to be
            converted back into inodes and disk blocks.
            
            V. Conclusion
            
            Generally, one  would expect a Unix-based remote file system
            like NFS  to work  better in  the Unix  environment  than  a
            system like  XNET.  If someone has the time to look into the
            int5c() interface,  it may  be possible  to clean up aborted
            circuits via  direct NetBIOS calls.  Unfortunately, it might
            not be  possible to  get  sufficient  information  from  SCO
            actually to write such applications.  I am still looking for
            the IBM  PC Net  Technical Reference which would probably be
            helpful.   Another way to handle the problem might be to run
            the file  servers as  DOS  machines.    XNET  under  DOS  is
            probably stabler.  Also, with such a configuration effective
            Unix/DOS conversion  contortions would  only  occur  at  the












            communications servers and not also at the file servers.  It
            might be worth a try just for the sake of curiosity.