TRANSMISSION OF IP DATAGRAMS OVER NET/ROM NETWORKS

 [The following paper has been submitted to the 7th ARRL Computer

 Networking Conference.  You may read it and pass it on to others

 to read, but please do not reproduce it in any other publication.

 Copyright 1988 by Daniel M. Frank.]

 

[This is a DOS text version of a document originally produced

 with a word processing program.  In the translation process,

 some text formatting may have been disturbed, and the bold

 facing has definitely been lost.  So, it may not scan quite

 like the original.  Sorry.]

 

 

       TRANSMISSION OF IP DATAGRAMS OVER NET/ROM NETWORKS

 

                      Daniel M. Frank, W9NK

                        1802 Keyes Avenue

                     Madison, WI 53711-2006

 

 

ABSTRACT

 

One of the main design goals of the Internet Protocol was that IP

datagrams could be carried over existing local- and wide-area

networks.  This characteristic of IP makes it possible to build so

called "internetworks" out of existing network facilities.  We

built support for an existing Amateur wide area network, NET/ROM,

into the KA9Q TCP/IP package, allowing the use of NET/ROM to carry

IP datagrams, and adding features which make the KA9Q software

useful as a full duplex NET/ROM packet switch.  We have also shown

that NET/ROM may be used as a datagram network only, independent

of its transport and application layer facilities.

 

 

INTRODUCTION

 

In the late Seventies and early Eighties, the world of computer

communications consisted of many isolated local- and wide-area

networks.  Enough communications capacity existed to link the

entire country, and much of the world, into a single large network,

but the existing facilities were physically and logically

dissimilar.  They could not simply be "plugged together" to make

this large "internetwork" (or "Internet").

 

The designers of the Internet Protocol (the "IP" in "TCP/IP") were

committed to overcoming the obstacles that prevented an Internet

>from developing.  They came up with two key ideas:

 

o Gateways can be established between networks.  A gateway

          is a computer which possesses the physical resources and

          software to connect with and speak to more than one kind

          of network.

 

o A single protocol can be developed whose messages

          ("datagrams") can pass through any network, hidden inside

          that network's "native" messages.  When a message with

          a datagram inside it encounters a gateway, the gateway

          "unwraps" the datagram, rewraps it in the native message

          of a second network, and sends it on its way.  If a

          datagram is too large to fit inside the native message

          type of a network, the gateway breaks it into pieces

          ("fragments"), each of which is then wrapped in a native

          message and sent on.

 

By using IP and gateways, the designers of the Internet have

created a global "network of networks", which today encompasses

hundreds of thousands of computer systems, connected to every

conceivable kind of network.

 

Amateur packet radio networking, like computer networking, consists

of many different network technologies and protocols.  Local AX.25

communications, digipeating, TexNet, ROSE, and NET/ROM, to name

only a few, coexist or compete for dominance as the network

technology of choice.  This competition is healthy, and is in the

spirit of amateur radio experimentation.  Any attempt to establish

one network over another as the single "standard" is both pointless

and doomed to failure.  No single standard can ever be imposed on

radio amateurs any more than it could have been imposed on computer

networks, given the investments already made in equipment,

software, and education.

 

As the dissimilar amateur networks grow in size, they meet up with

each other.  Sometimes they coexist on the same channels.  But

without gateways and some kind of Internet Protocol, each network

is an island of communication, unable to send or receive data

beyond its own shores.

 

The work described in this paper is a first step towards true

Amateur Radio internetworking.  Using the KA9Q TCP/IP package as

a basis, we have built a software system which functions as a

gateway between local TCP/IP networks and the NET/ROM network.  It

allows IP datagrams to be forwarded automatically and transparently

across existing NET/ROM facilities.  In addition, as a full

implementation of NET/ROM layer 3, it is capable of functioning as

a NET/ROM relay node (as opposed to an AX.25 endpoint), and as a

full duplex NET/ROM packet switch.

 

 

IP OPERATIONS OVER STANDARD AX.25 CONNECTIONS

 

In order to properly understand how we have interfaced to the

NET/ROM network, we should first examine how "ordinary" TCP/IP

operations take place over AX.25.  This description follows the ISO

OSI Reference Model (RM), a seven-layer classification of network

facilities.

 

>From the bottom up, the layers used in packet TCP/IP operation are:

 

(1) A physical layer, made up of the radios, antennas, and

          modems used to generate and carry the tones used to

          convey digital data from one place to another.

 

(2) A data link layer, made up of HDLC and AX.25, used to

          format and address the data, detect errors and discard

          bad packets.  The link layer only knows about and

          communicates with stations with which we are directly

          connected.  In the case of packet radio, this means

          stations with which we have reliable, direct

          communications.  (Digipeating doesn't count, for purposes

          of this discussion.)

 

(3) A network layer, responsible for routing packets to their

          destinations through one or more link-to-link hops.  The

          main distinction between the data link and network layers

          is that the network layer provides facilities for

          communication between stations not directly connected.

          The network layer has to have some concept of routing,

          that is, the path to be taken by a packet to reach its

          destination.  We use IP as our network protocol.

 

(4) A transport layer, responsible for reliable end-to-end

          communications.  Our network layer does not guarantee

          that a packet will actually reach its destination.  While

          AX.25 provides link layer acknowledgement and

          retransmission, it does not guard against nodes which go

          down, software errors, or a destination station which is

          not on the air.  The transport layer provides for an

          acknowledgment to be sent from the packet's ultimate

          destination, and for retries in case that acknowledgment

          doesn't arrive within a reasonable amount of time.

 

The other function of a transport layer is multiplexing.

          The network layer provides only host-to-host addressing.

          However, a computer can have many users, and provide many

          different services.  The transport layer takes incoming

          packets from the network and directs them to the proper

          programs based on information contained in the transport

          header portion of the packets.

 

Our transport protocol is TCP, the Transmission Control

          Protocol.

 

(5) The session layer is mainly involved with providing

          services to individual programs within the computer.  It

          is not of importance for the current discussion.

 

(6) The presentation layer is mainly concerned with the

          uniform formatting of data, or its conversion between

          different character sets.  Some of the TCP/IP user

          programs have a very simple presentation "layer" which

          maps plain text messages in the native character set of

          the user's computer, to and from ASCII with a standard

          line-ending convention.

 

(7) The application layer is made up of the various programs

          and services that use networking facilities.  Users of

          TCP/IP mainly make use of telnet, for keyboard to

          keyboard chat and remote login, smtp for automated

          transfer of mail, and ftp, for easy exchange of files.

 

 

 

LINK LAYER MULTIPLEXING

 

As can be seen from our description, local TCP/IP operation uses

regular AX.25 communications for its link layer.  An AX.25 packet

containing an IP datagram contains a special code in the protocol

ID (PID) field of its header.  This allows the link layer software

to forward the contents of the packet to the proper part of the

KA9Q package, in this case the IP routing code.

 

If the AX.25 packet contained a PID of "no level 3", the link layer

would forward it to a different part of the package, in this case

the AX.25 session code, which allows users of the package to hold

"regular" AX.25 conversations, bypassing all layers between the

link and application layers.  (This brings up an important point

about the reference model we've presented:  an implementation may

not contain certain layers from the RM if the services they would

have provided are unused or unneeded.)

 

This switching of packets at the link layer based on their PIDs is

known as link layer multiplexing.  Multiplexing at the link layer

is extremely useful, because it allows different network layer

protocols to share the same data link services, and often the same

link connections.  Link layer multiplexing is what allows the KA9Q

software with NET/ROM support to act as a digipeater, an IP relay,

and a NET/ROM relay node, all on the same channel, through the same

TNC.

 

 

AN OVERVIEW OF NET/ROM

 

Now that we understand how IP datagrams are carried over packet

radio links, we should examine how NET/ROM operates.  Again, we

will use the ISO OSI Reference Model as our framework:

 

(1) The physical layer is the same, i.e. radios, antennas,

          and modems.

 

(2) The data link layer is again AX.25, but the Protocol ID

          field of NET/ROM packets is set to a special NET/ROM ID.

 

(3) The network layer of NET/ROM handles the automatic

          routing of packets to their destination.  A NET/ROM

          network packet header contains the source and destination

          callsigns of the NET/ROM endpoints.  There is no

          information about the route the packet will travel to its

          destination.  Instead, every node maintains a routing

          table based on routing adjacencies:  it receives

          broadcasts from other nodes which say, essentially, "I

          am willing to take traffic for such-and-such a node."

          When a NET/ROM node receives a network packet, it

          examines its routing table to see if anyone is willing

          to pass it on toward its destination.  If so, it hands

          off the packet to the next station.  If not, it simply

          throws the packet away without comment.

 

The type of network communications service (as opposed

          to the routing techniques) used in NET/ROM (and IP) is

          usually called an unreliable, connectionless datagram

          layer, and the network layer packets are generally called

          datagrams.  The service is unreliable, because it does

          not guarantee or confirm ultimate delivery.  It is

          connectionless, because no circuit is established over

          which datagrams will travel.  (This contrasts with some

          public data network protocols, where before data may be

          sent to a remote system, a fixed path to that system must

          be set up through the network, with resources

          preallocated at every intervening node.  Each approach

          has its advantages and adherents.)

 

(4) The transport layer of NET/ROM uses what is called a

          sequenced packet protocol.  Unlike TCP, which delivers

          an unsegmented stream of bytes to the receiver, and is

          free to pack as many or as few bytes into each message

          as it likes, the NET/ROM transport delivers a sequence

          of packets.  The amount of data in these packets is

          determined by the amount of data in the AX.25 packets the

          NET/ROM user presents for transmission.  NET/ROM is not

          free to combine packets together for greater efficiency,

          although it can fragment and reassemble packets which are

          too large to fit in one of its transport messages.

 

The NET/ROM transport protocol provides end-to-end

          delivery and acknowledgement, as well as demultiplexing

          of arriving messages by circuit number.  A NET/ROM node

          can be handling traffic for more than one circuit, or

          connection, at a time, and it directs that traffic

          internally by examining the circuit number field of the

          transport header.

 

(5) The session layer is not present in NET/ROM.

 

(6) The presentation layer is not present in NET/ROM.

 

(7) The application layer is what a user sees when he or she

          connects to a NET/ROM node.  It is responsible for

          responding to user commands to list routes and nodes, and

          establish connections.  "No layer 3" AX.25 packets

          arriving at a NET/ROM node are shunted directly up to the

          application layer, while "NET/ROM" PID packets are

          forwarded up to the NET/ROM network layer.  This link

          layer multiplexing should be familiar from our earlier

          discussion.

 

 

A full explanation of how the NET/ROM software works is beyond the

scope of this paper.  The reader is referred to the NET/ROM manual

for further details.

 

 

NETWORK AND INTERNETWORK

 

Our presentation of the ISO OSI RM has been somewhat simplified.

In particular, the ISO recognizes a subdivision of Layer 3 into a

Network Layer (3A) and an Internetwork Layer (3B).  Strictly

speaking, the Internet Protocol (IP) is a 3B protocol, while the

NET/ROM network service is a 3A protocol.  To put it somewhat

crudely, IP is an Internetwork Layer because its messages can be

routed through multiple logically and physically distinct networks.

The same cannot be said of X.25, for example, or of NET/ROM layer

3.  Our NET/ROM support in the KA9Q package reflects this

distinction.

 

The KA9Q NET/ROM software is not a full NET/ROM implementation.

That was unnecessary for our purposes.  We didn't need the NET/ROM

transport protocol, since our reliable end-to-end services are

already provided by TCP.  We didn't need the application layer, for

similar reasons.  What we did need was an existing network service

that could carry our IP datagram traffic to remote destinations

simply and easily.  The NET/ROM network layer was sufficient for

this purpose.

 

We use the NET/ROM nodes as a datagram network.  When we have

traffic to pass through a local NET/ROM, our software makes sure

we have an AX.25 connection to that node, then puts a NET/ROM layer

3 header on our IP datagram and sends it off to the NET/ROM via an

AX.25 packet with a protocol ID of NET/ROM.  The NET/ROM link layer

sees the protocol ID and passes the packet to its network layer,

which examines its routing table and passes the packet on to the

appropriate neighboring NET/ROM.  This process continues until the

packet arrives at the destination computer running the KA9Q

software, where it is unwrapped and passed back up to the IP code.

 

At no point is the NET/ROM user interface or transport layer

involved.  We do not have to issue CONNECT commands, or make use

of NET/ROM virtual circuits in any way.  The NET/ROM nodes accept

and pass our datagrams because they do not examine the contents of

network datagrams not specifically addressed to them.  We are able

to take advantage of the link-layer acknowledgements and automatic

routing of the NET/ROM system without the overhead of its higher

level services.

 

 

SOFTWARE ARCHITECTURE

 

Let's examine how this is done in more detail.  Our once-simple

protocol stack has grown a bit by now.  Let's have a look at it:

 

(1) The physical layer is basically unchanged (although we

          did added another physical layer service, described

          later).

 

(2) At the data link layer, we still have AX.25.  However,

          the link layer now multiplexes three different kinds of

          packets.  "No level 3" packets still go up the AX.25

          session code, and IP packets will go directly up to layer

          3B, but now we also direct packets with a NET/ROM PID to

          the NET/ROM 3A routing layer.

 

(3A) Incoming packets with a NET/ROM PID go to the network

          layer.  This is a full implementation of NET/ROM layer

          3.  It has its own routing table, similar to that found

          in any NET/ROM node.  It sends NODES broadcasts, which

          update the routing tables of neighboring NET/ROM nodes,

          and updates its own routing table on receipt of NODES

          broadcasts from those neighbors.

 

The NET/ROM layer examines incoming NET/ROM datagrams to

          see if our station is their destination.  If the

          datagrams are not for us, the routing table is examined

          to see if we can forward them on to a neighboring node

          for handling.  If we can, they are sent back down to the

          link layer to continue their journey.  In other words,

          a station running the KA9Q package with NET/ROM support

          can act as a NET/ROM relay station.  As far as

          neighboring NET/ROM nodes are concerned, they are simply

          passing traffic on through another NET/ROM.

 

If a NET/ROM datagram is for us, the network layer makes

          sure that it isn't a NET/ROM transport packet.  If it is,

          it is dropped.  If it isn't, it is sent up to layer 3B.

 

(3B) The internetwork layer contains the IP router and

          protocol code.  (Remember that IP has its own routing

          table and algorithms!).  It receives AX.25 traffic with

          a protocol ID of IP, as well as IP datagrams arriving in

          NET/ROM network datagrams.

 

 

The remaining layers are the same as before, so we won't repeat

them.

 

 

IP ROUTING VIA NET/ROM

 

The IP routing table is similar, although not identical, to the one

used for NET/ROM.  It contains two kinds of entries, which we will

call local routes and gateway routes.

 

A local route consists of an IP address and an interface name.  The

KA9Q software supports multiple interfaces, similar to the way that

NET/ROM supports both a TNC's modem and its serial port.  One

component of a route, both in NET/ROM and the KA9Q package, is the

interface through which an outgoing datagram should pass.  (The

main difference is that, while NET/ROM only supports AX.25 and two

interfaces, the KA9Q code supports many different link layers and

an almost unlimited number of interfaces.)  When a local route is

found in the IP routing table, this means that the station with the

given IP address is on the local subnet, which for packet radio

purposes means that it is within radio communications range.  The

datagram is forwarded to the link layer with an indication that

direct delivery should be attempted.

 

A gateway route consists of an IP address, an interface name, and

a gateway IP address.  When we encounter a gateway route, it means

that the station in question is not on our local subnet (i.e. not

within radio range), and must be reached via a relay station, or

gateway.  (You will recall the idea of gateways from our earlier

introduction of internetworking.)  The IP datagram is forwarded to

the link layer with an indication that the message should be sent,

not directly to its destination, but to the gateway station, which

will make an attempt to reach the recipient, perhaps via another

gateway.

 

When we added the NET/ROM support, we were concerned that it be

fully transparent to the IP layer, both out of concern over proper

design, and out of a desire to avoid any unnecessary rewrite of the

existing code.  One key assumption in the KA9Q IP routing software

is that of routing adjacency:  the IP layer makes the assumption

that it can reach, via the interface given, some IP address

mentioned in the route entry (either the recipient or the gateway).

However, we are using NET/ROM precisely because there is no IP

station within radio range who can handle our traffic.  In order

to maintain the adjacency assumption at the IP layer, we had to

simulate the presence of an adjacent IP station in the NET/ROM

code.

 

An IP route which uses the NET/ROM support looks just like any

other routing table entry:  it consists of a destination, an

interface, and an optional gateway.  The only difference is that

the interface is called "Netrom", and it's not a link layer

interface at all, although it appears that way to the IP routing

code.  When the IP layer sends a datagram down to the NET/ROM

"interface" for handling, it is actually calling a small stub

routine above the NET/ROM routing code.  This stub looks up the IP

address in a table which associates IP addresses, used at the IP

layer and above, with AX.25 callsigns, used by NET/ROM's network

layer.  If it finds an entry for the given IP address, it creates

a NET/ROM network layer datagram header with a destination address

set to the AX.25 callsign found in the association table, prepends

this header to the IP datagram, and hands it off to the NET/ROM

routing code.

 

The NET/ROM routing software now handles the datagram exactly as

it would any NET/ROM traffic coming in from outside:  it checks to

see if there is an entry for the destination AX.25 callsign in its

routing table.  If there is, it opens a link layer (AX.25)

connection to the neighboring NET/ROM node advertising the best

quality route, and forwards the message into the NET/ROM network,

to be delivered (ultimately) to the station whose AX.25 address is

that in the destination field of the NET/ROM network header, and

whose IP address was that of the destination or gateway in the IP

routing table entry.

 

This approach was extremely successful.  Not one line of code

needed to be changed in the IP routing code of the original KA9Q

package.

 

 

FEATURES TO SUPPORT NET/ROM PACKET SWITCHING

 

As implied above, the KA9Q package allows an almost unlimited

number of interfaces to be used for receiving and forwarding

packets.  At the IP layer, datagrams are routed from interface to

interface using information from the IP routing table.  We added

a similar functionality to the NET/ROM routing layer, allowing it

to receive and send NET/ROM traffic on any AX.25 interface it is

configured to use.  This feature allows the KA9Q software with

NET/ROM support to be used as a multi-port full duplex NET/ROM

packet switch, using standard TNCs or modem boards available for

the IBM PC.  This is vastly superior to the practice of wiring

together several NET/ROM TNCs with a diode bridge.  There is no

possibility of collisions, since each TNC has its own serial port

or bus address, so the interfaces can all run at full duplex, full

speed through the switch.  In addition, this arrangement can be

used with the high-speed interfaces and modems now becoming

available, far exceeding the capabilities of a standard TNC.

 

In several places in the United States, excess bandwidth on

commercial data links is being used to carry NET/ROM traffic.

These "wormhole" links work fairly well when there is only one

NET/ROM at each end, but their performance degrades quickly if more

are added.  Beyond the difficulties inherent in the diode bridging

scheme shown in the NET/ROM manual, there is an additional problem

not amenable to a simple hardware solution.  Most of the data links

being used are running through time-domain or statistical

multiplexing hardware, or through public data networks.  While all

of these provide some kind of carrier detect indication, in almost

every case that indication comes far too late to avoid collisions.

Carrier sense simply doesn't work, since the carrier indication

isn't there when it is needed, and arrives just in time to cause

unnecessary delays afterwards.  Performance of such an arrangement

is likely to degrade to below that of schemes using no carrier

sense at all.

 

NET/ROM nodes use a simple serial framing method to communicate

with each other over their serial ports.  We have added support for

this framing method alongside the "KISS" protocol which the KA9Q

package normally uses to communicate with TNCs.  It is possible to

plug a number of NET/ROM TNCs directly into the serial ports of an

IBM PC, and use the PC as a switch.  Some of those NET/ROM TNCs can

be at the ends of "wormhole" links.  These links can run at full

duplex with no collisions, thus getting maximum performance and

almost zero retries (assuming reliable data lines and serial

interface hardware).  The NET/ROM serial interface code is

instrumented to provide statistics on traffic volume and error

rates on its serial ports.

 

 

LESSONS LEARNED

 

The creation of the NET/ROM code has provided some interesting

lessons on how we should and should not go about building amateur

packet networks.  One of these lessons became apparent before we

even thought of writing the NET/ROM code.

 

We would probably not even have added the NET/ROM layer three

support to the KA9Q package had there been an easier way to

accomplish what we wanted, which was to use NET/ROM networks to

handle our IP traffic until we could build our own IP network.

Unfortunately, the NET/ROM software has a rather unfriendly link

layer multiplexor.  It sends "no layer 3" packets to the

application layer, and "NET/ROM" packets to the NET/ROM network

layer, but anything else it consigns to oblivion.  We could have

built fairly simple code to establish connections and send our IP

traffic over NET/ROM transport circuits, but any packet with a

protocol ID of "IP" was simply dropped by the NET/ROM software.

So, lesson number one:

 

     If you're going to build a networking product, write the

     multiplexing code to be inclusive, rather than exclusive.

     In other words, if you get something with an unfamiliar

     protocol ID, wrap it up and send it on, remembering to

     regenerate the PID properly on the other end.

 

 

Another problem we encountered was the lack of a protocol ID field

in the NET/ROM network layer header.  Both AX.25 packet headers and

IP datagram headers contain a field which indicates what sort of

higher level protocol stuff is packaged inside.  This is not unlike

the cans on your grocer's shelf:  without a label, you have a hard

time telling the beets from the beans.  The AX.25 protocol ID field

makes link layer multiplexing possible, and the protocol ID of an

IP datagram header allows many higher level protocols to use its

internetworking services.  Because the NET/ROM network header does

not contain a protocol ID field, there is no straightforward way

to put anything but a NET/ROM transport packet inside.  This is

unwise.  The authors of NET/ROM may well have been unaware that

anyone would ever attempt a project such as ours, but by leaving

this feature out of their network layer, they made it difficult,

if not impossible, to ever introduce other transport protocols into

their product line.  So, lesson number two:

 

     Include a protocol ID field in your link and network

     layer headers, even if you can't think of a use for it

     yet.  Make it big enough to be useful, and offer to be

     the repository of assigned PIDs, so that a standard

     develops.

 

 

In experimenting with the auto-routing code in our NET/ROM network

implementation, we discovered something that is a common complaint

among NET/ROM operators.  This can be summed up by the dictum,

"Just because you can hear them, doesn't mean they can hear you."

It is not unusual to have neighboring nodes that are "alligators"

(big mouth, tiny ears) or for your node to be a "rabbit" (big ears,

tiny mouth).  Also, band openings on two meters happen quite often,

and usually last just long enough for you to receive a routing

broadcast from a station from whom you will never hear again - at

least until the next band opening.  Either situation leaves your

routing table cluttered with impossible routes, which can lead to

repeated link-layer retries and transport layer failures.  Routes

based on band openings age out fairly quickly.  Ones based on deaf

neighbors come back, again and again.

 

After a bit of experience with this phenomenon, we added the

"nodefilter" feature to our implementation.  The user may specify

a list of nodes which are the only ones from which route broadcasts

will be accepted, or alternately, may specify a "reject list" of

nodes whose broadcasts will be routinely ignored.  The lesson:

 

     If your routing method involves broadcast in an

     asymmetrical or inconsistent communications environment,

     provide a way to restrict the routes accepted to those

     offered by reliable nodes.

 

 

The implementation described was actually the second one we did.

The first one grabbed AX.25 interfaces away from the IP part of the

KA9Q code, and could only be used for NET/ROM and regular AX.25

traffic.  This appeared to be a horrible idea from the moment the

first version was completed, and prompted an immediate rewrite,

producing a program that could act as a packet switch for IP as

well as NET/ROM.  The lesson here (besides "look before you leap")

is:

 

     If you're going to build a packet switch for amateur use,

     support link layer multiplexing, and try to make it

     multi-purpose.  This is a hobby, and the radios, tower

     space, and dollars are in short supply.  The more stuff

     you can do with a single one of each, the happier you

     will be in the long run.

 

 

EXPERIENCE

 

At this writing, experience with the software is necessarily

limited.  It is only now being made an official part of the

official KA9Q release (thanks, Phil!), so it has not been widely

available as for as long as we would have wished.  Still, it has

found its way into enough hands for us to have some preliminary

measurements and impressions.

 

The Madison, Wisconsin NET/ROM node (MAD) is connected to a node

(MQTA) in Marquette, in the Upper Peninsula of Michigan, via a

multiplexed commercial data line.  We have conducted tests between

W9NK, in Madison, and KV9P, in Alpha, Michigan.  Both stations sent

periodic routing broadcasts to announce their presence to their

local nodes.  The path chosen by NET/ROM was:

 

W9NK <-> MAD <-> MQT <-> MQTA <-> IRN <-> KV9P

 

where MQTA and IRN were NET/ROM or TheNet nodes in Marquette and

Iron Mountain, Michigan, respectively.  All nodes except the two

using the data line were on two meters, with a speed of 1200 baud.

 

Performance was surprisingly good, with TCP round trip times

settling in around 12 to 20 seconds, with a standard deviation of

about nine seconds.  In spite of the number of hops, performance

was good enough to hold fairly coherent keyboard-to-keyboard

conversations.

 

We did note at least one case where duplicate copies of datagrams

were delivered by the NET/ROM network.  Since TCP discards

duplicates, this causes no problem in normal operations, but in the

case we noticed it resulted in two replies to the same ICMP Echo

Request message (produced by the ping command).

 

Feedback from other users, particularly N0AN in Iowa, illuminates

a serious problem with the management of existing NET/ROM networks:

the routing tables of these networks are so inaccurate that many

experienced users don't use the network layer facilities at all!

BBS mail forwarding scripts are set up to establish connections to

the local NET/ROM node, request a transport connection to a

selected neighbor, then from that neighbor to another, and so forth

to the NET/ROM node in their destination area.  They have

discovered that, without human intervention, many NET/ROM networks'

routing facilities break down and become unusable.

 

This problem has some impact on normal operations, in the sense

that these multiple transport sessions do not in any sense add up

to end-to-end protocol support.  There is in fact no transport

facility (as we understand the term) in use in these cases, since

no acknowledgements travel from one end of the communications path

to another.  There may as well be no transport layer in NET/ROM

under these circumstances; the overhead would at least be

substantially lower, with no additional loss of reliability.

 

Unfortunately, networks in such a pathological state are unusable

by our TCP/IP software.  Since we make no use of the NET/ROM

transport layer, we must rely entirely on the accuracy of the

network layer routing tables to support the forwarding of our

packets to their destinations.  If these tables are not correct,

our traffic will not get through.

 

The good news is that, in some areas where the NET/ROM operators

are also working with TCP/IP, this problem is forcing them to pay

attention to the quality of their routing tables.  As we have noted

above, NET/ROM is somewhat short on facilities to do this, but a

few things can be and are being done with the tools available.  One

side-effect of the TCP/IP NET/ROM support may be an improvement in

quality of service to all NET/ROM users!

 

 

FUTURE DEVELOPMENT

 

We hope, at some point, to produce a version of this support that

can be put into ROM and used in a dedicated packet switch for

hostile environments.  Such a switch would allow us to begin

building IP networks, while also offering superior performance to

the NET/ROM community.  It is our hope that the two user

communities can work together, sharing resources to build a better

network than either could alone.

 

 

ACKNOWLEDGEMENTS

 

Sincere thanks are due to Phil Karn, KA9Q, who would have been rich

(or at least, richer) by now if he hadn't been dedicated to

improving the state of the art for all radio amateurs.  Also,

thanks to everyone on the tcp-group mailing list, who contributed

helpful comments during the design and development of the NET/ROM

code.  Special thanks also to Howard Leadmon, WB3FFV, and John

Limpert, N3DMC, who got it to compile under Unix.

 

Individuals who helped test or provided feedback on experience with

the software were:  Duane Brummel, NX9K; Hasan Schiers, N0AN; and

Dave Reinhart, KV9P.

 

Phil Karn, KA9Q, reviewed the first draft of this paper, providing

many helpful comments and suggestions.



Comments

Popular posts from this blog

BOTTOM LIVE script

Fawlty Towers script for "A Touch of Class"