diff options
Diffstat (limited to 'doc/rfc/rfc891.txt')
-rw-r--r-- | doc/rfc/rfc891.txt | 1405 |
1 files changed, 1405 insertions, 0 deletions
diff --git a/doc/rfc/rfc891.txt b/doc/rfc/rfc891.txt new file mode 100644 index 0000000..81844ee --- /dev/null +++ b/doc/rfc/rfc891.txt @@ -0,0 +1,1405 @@ +Network Working Group D.L. Mills +Request for Comments: 891 December 1983 + + + DCN Local-Network Protocols + +This RFC is a description of the protocol used in the DCN local +networks to maintain connectivity, routing, and timekeeping +information. These procedures may be of interest to designers and +implementers of other networks. + +1. Introduction + + This document describes the local-net architecture and protocols +of the Distributed Computer Network (DCN), a family of local nets +based on Internet technology and an implementation of PDP11-based +software called the Fuzzball. DCN local nets have been in operation +for about three years and now include clones in the USA, UK, Norway +and West Germany. They typically include a number of PDP11 or LSI-11 +Fuzzballs, one of which is elected a gateway, and often include other +Internet-compatible hosts as well. + + The DCN local-net protocols are intended to provide connectivity, +routing and timekeeping functions for a set of randomly connected +personal computers and service hosts. The design philosophy guiding +the Fuzzball implementation is to incorporate complete functionality +in every host, which can serve as a packet switch, gateway and service +host all at the same time. When a set of Fuzzballs are connected +together using a haphazard collection of serial, parallel and +contention-bus interfaces, they organize themselves into a network +with routing based on minimum delay. + + The purpose of this document is to describe the local-net +protocols used by the DCN to maintain connectivity, routing and +timekeeping functions. The document is an extensive revision and +expansion of Section 4.2 of [1] and is divided into two parts, the +first of which is an informal description of the architecture, +together with explanatory remarks. The second part consists of a +semi-formal specification of the entities and protocols used to +determine connectivity, establish routing and maintain clock +synchronization and is designed to aid in the implementation of cohort +systems. The link-level coding is described in the appendix. + +2. Narrative Description + + The DCN architecture is designed for local nets of up to 256 +hosts and gateways using the Internet Protocol (IP) and client +protocols. It provides adaptive routing and clock synchronization +functions in an arbitrary topology including point-to-point links and +multipoint bus systems. It is intended for use in connecting personal +computers to each other and to service machines, gateways and other +hosts of the Internet community. However, it is not intended for use +in large, complex networks and does not support the sophisticated +routing and control algorithms of, for example, the ARPANET. + + A brief description of the process and addressing structure used +in the DCN may be useful in the following. A DCN physical host is a +PDP11-compatible processor which supports a number of cooperating +sequential processes, each of + +DCN Local-Network Protocols Page 2 +D.L. Mills + +which is given a unique 8-bit identifier called its port ID. Every +DCN physical host contains one or more internet processes, each of +which supports a virtual host given a unique 8-bit identifier called +its host ID. + + Each virtual host can support multiple internet protocols, +connections and, in addition, a virtual clock. Each physical host +contains a physical clock which can operate at an arbitrary rate and, +in addition, a 32-bit logical clock which operates at 1000 Hz and is +assumed to be reset each day at 0000 hours UT. Not all physical hosts +implement the full 32-bit precision; however, in such cases the +resolution of the logical clock may be somewhat less. + + There is a one-to-one correspondence between Internet addresses +and host IDs. The host ID is formed from a specified octet of the +Internet address to which is added a specified offset. The octet +number and offset are selected at configuration time and must be the +same for all DCN hosts sharing the local net. For class-B and class-C +nets normally the fourth octet is used in this way for routing within +the local net. In the case of class-B nets, the third octet is +considered part of the net number by DCN hosts; therefore, this octet +can be used for routing between DCN local nets. For class-A nets +normally the third octet (ARPANET logical-host field) is used for +routing where necessary. + + Each DCN physical host is identified by a host ID for the purpose +of detecting loops in routing updates, which establish the +minimum-delay paths between the virtual hosts. By convention, the +physical host ID is assigned as the host ID of one of its virtual +hosts. A link to a neighbor net is associated with a special virtual +host, called a gateway, which is assigned a unique host ID. + + The links connecting the various physical hosts together and to +foreign nets can be distributed in arbitrary ways, so long as the net +remains fully connected. If full connectivity is lost, due to a link +or host fault, the virtual hosts in each of the surviving segments can +continue to operate with each other and, once connectivity is +restored, with all of them. + + Datagram routing is determined entirely by internet address - +there is no local leader as in the ARPANET. Each physical host +contains two tables, the Host Table, which is used to determine the +outgoing link to each other local-net host, and the Net Table, which +is used to determine the outgoing host (gateway) to each other net. +The Host Table contains estimates of roundtrip delay and logical-clock +offset for all virtual hosts in the net and is indexed by host ID. +For the purpose of computing these estimates the delay and offset of +each virtual host relative to the physical host in which it resides is +assumed zero. The single exception to this is a special virtual host +associated with an NBS radio time-code receiver, where the offset is +computed relative to the broadcast time. + + The Net Table contains an entry for every neighbor net that may +be connected to the local net and, in addition, certain other nets +that are not + +DCN Local-Network Protocols Page 3 +D.L. Mills + +neighbors. Each entry contains the net number, as well as the host ID +of the local-net gateway to that net. The routing function simply +looks up the net number in the Net Table, finds the host ID of the +gateway and retrieves the port ID of the net-output process from the +Host Table. Other information is included in the Host Table and Net +Table as described below. + + The delay and offset estimates are updated by HELLO messages +exchanged on the links connecting physical-host neighbors. The HELLO +messages are exchanged frequently, but not so as to materially degrade +the throughput of the link for ordinary data messages. A HELLO +message contains a copy of the delay and offset information from the +Host Table of the sender, as well as information to compute the +roundtrip delay and logical-clock offset of the receiver relative to +the sender. + + The routing algorithm is similar to that (formerly) used in the +ARPANET and other places in that the roundtrip (biased) delay estimate +calculated to a neighbor is added to each of the delay estimates given +in its HELLO message and compared with the corresponding delay +estimates in the Host Table. If a delay computed in this way is less +than the delay already in the Host Table, the routing to the +corresponding virtual host is changed accordingly. The detailed +operation of this algorithm, which includes provisions for host +up-down logic and loop suppression, is summarized in a later section. + + DCN local nets are self-configuring for all hosts and neighbor +nets; that is, the routing algorithms will find minimum-delay paths +between all hosts and gateways to neighbor nets. In addition, +timekeeping information can be exchanged using special HELLO messages +between neighboring DCN local nets. For routing beyond neighbor nets +additional entries can be configured in the Net Tables as required. +In addition, a special entry can be configured in the Net Tables which +specifies the host ID of the gateway to all nets not explicitly +included in the table. + + For routing via the ARPANET and its reachable nets a selected +local-net host is equipped with an IMP interface and configured with a +GGP/EGP Gateway process. This process maintains the Net Table of the +local host, including ARPANET leaders, dynamically as part of the +GGP/EGP protocol interactions with other ARPANET gateways. GGP/EGP +protocol interactions are possibly with non-ARPANET gateways as well. + + The portable virtual-host structure used in the DCN encourages a +rather loose interpretation of addressing. In order to minimize +confusion in the following, the term "host ID" will be applied only to +virtual hosts, while "host number" will be applied to the physical +host, called generically the DCN host. + +2.1. Net and Host Tables + + There are two tables in every DCN host which control routing of +Internet Protocol (IP) datagrams: the Net Table and the Host Table. +The Net Table is used to determine the host ID of the gateway on the +route to a foreign net, + +DCN Local-Network Protocols Page 4 +D.L. Mills + + +while the Host Table is used to determine the link, with respect to +the DCN host, on the route to a virtual host. The Host Table is +maintained dynamically using updates generated by periodic HELLO +messages. The Net Table is fixed at configuration time for all DCN +hosts except those that support a GGP/EGP Gateway process. In these +cases the Net Table is updated as part of the gateway operations. In +addition, entries in either table can be changed by operator commands. + + The Net Table format is shown in Figure 1. + + 1 0 + 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Net Name | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Net(2) | Net(1) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Index | Net(3) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Hops | Gateway ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + | Gateway Leader | + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 1. Net Table Entry + + The "Net Name" field defines a short (RAD50) name for the net, +while the "Net" fields define the class A/B/C net number. The +"Gateway ID" field contains the host ID of the first gateway to the +net and the "Hops" field the number of hops to it. The remaining +fields are used only by the GGP/EGP Gateway process and include the +"Index" field, which contains an index into the routing matrix. and +the "Gateway Leader" field, which contains the (byte-swapped) +local-net leader for the gateway on a neighbor net. + + The Net Table contains an indefinite number of entries and is +terminated by a special entry with all "Net" fields set to zero. If +the "Hops" field of this entry is less than 255, the "Gateway ID" +field of this entry is used for all nets not in the table. If the +"Hops" field is 255 all nets not explicitly mentioned in the table +appear unreachable. + + The Host Table format is shown in Figure 2. + +DCN Local-Network Protocols Page 5 +D.L. Mills + + + 1 0 + 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Name | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TTL | Port ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Delay | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Offset | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + + + + | Local Leader | + + + + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + + Update Timestamp + + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 2. Host Table Entry + + The ordinal position of each Host Table entry corresponds to its +host ID. The "Name" field contains a short (RAD50) name for +convenient reference. The "Port ID" field contains the port ID of the +net-output process on the shortest path to this virtual host and the +"Delay" field contains the measured roundtrip delay to it. The +"Offset" field contains the difference between the logical clock of +this host and the logical clock of the local host. The "Local Leader" +field contains information used to construct the local leader of the +outgoing packet, for those nets that require it. The "Update +Timestamp" field contains the logical clock value when the entry was +last updated and the "TTL" field the time (in seconds) remaining until +the virtual host is declared down. + + All fields except the "Name" field are filled in as part of the +routing update process, which is initiated upon arrival of a HELLO +message from a neighboring DCN host. This message takes the form of +an IP datagram carrying the reserved protocol number 63 and a data +field as shown in Figure 3. + +DCN Local-Network Protocols Page 6 +D.L. Mills + + + 1 0 + 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + --- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +Fixed | Checksum | +Area +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Date | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + + Time + + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Timestamp | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Offset | Hosts (n) | + --- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +Host | Delay Host 0 | +Area +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Offset Host 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Delay Host n-1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Offset Host n-1 | + --- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Figure 3. HELLO Message Format + + There are two HELLO message formats, depending on the length of +the message. One format, sent by a DCN host to another host on the +same local net, includes both the fixed and host areas shown above. +The second format, sent in all other cases, includes only the fixed +area. + + Note that all word fields shown are byte-swapped with respect to +the ordinary PDP11 representation. The "Checksum" field contains a +checksum covering the fields indicated. The "Date" and "Time" fields +are filled in with the local date and time of origination. The +"Timestamp" field is used in the computation of the roundtrip delay +(see below). The "Offset" field contains the offset of the block af +Internet addresses used by the local net. The "Delay Host n" and +"Offset Host n" fields represent a copy of the corresponding entries +of the Host Table as they exist at the time of origination. The +"Hosts (n)" field contains the number of entries in this table. + +2.2. Roundtrip Delay Calculations + + Periodically, each DCN physical host sends a HELLO message to its +neighbor on each of the communication links common to both of them. +For each of these links the sender keeps a set of state variables, +including a copy of the source-address field of the last HELLO message +received. + +DCN Local-Network Protocols Page 7 +D.L. Mills + + +When constructing a HELLO message the sender sets the +destination-address field to this state variable and the +source-address field to its own address. It then fills in the "Date" +and "Time" fields from its logical clock and the "Timestamp" field +from another state variable. It finally copies the "Delay" and +"Offset" values from its Host Table into the message. + + A host receiving a HELLO message discards it if the format is bad +or the checksum fails. If valid, it initializes a link state variable +to show that the link is up. Each time a HELLO message is transmitted +this state variable is decremented. If it decrements to zero the link +is declared down. + + The host then checks if the source-address field matches the +state variable containing the last address stored. If not, the link +has been switched to a new host, so the state variables are flushed +and the link forced into a recovery state. The host then checks if +the destination-address field matches its own address. If so, the +message has been looped (legal only in the case of a broadcast net) +and the roundtrip delay information is corrected. The host and net +areas are ignored in this case. If not, the host and net areas of the +message are processed to update the Host and Net Tables. + + Roundtrip delay calculations are performed in the following way. +The link input/output processes assigned each link maintain an +internal state variable which is updated as each HELLO message is +received and transmitted. When a HELLO message is received this +variable takes the value of the "Time" field minus the current +time-of-day. When the next HELLO message is transmitted, the value +assigned the "Timestamp" field is computed as the low-order 16-bits of +this variable plus the current time-of-day. The value of this +variable is forced to zero if either the link is down of the system +logical clock has been reset since the last HELLO message was +received. + + If a HELLO message is received with zero "Timestamp" field, no +processing other than filling in the internal state variable. +Otherwise, the roundtrip delay is computed as the low-order 16-bits of +the current time-of-day minus the value of this field. In order to +assure the highest accuracy, the calculation is performed only if the +length of the last transmitted HELLO message (in octets) matches the +length of the received HELLO message. + + The above technique renders the calculation independent of the +clock offsets and intervals between HELLO messages at either host, +protects against errors that might occur due to lost HELLO messages +and works even when a neighbor host simply forwards the HELLO message +back to the originator without modifying it. The latter behavior, +typical of ARPANET IMPs and gateways, as well as broadcast nets, relies +on the loop-detection mechanism so that correct calculations can be +made and, furthermore, that spurious host updates can be avoided. + + +DCN Local-Network Protocols Page 8 +D.L. Mills + + +2.3. Host Updates + + When a HELLO message arrives which results in a valid roundtrip +delay calculation, a host update process is performed. This consists +of adding the roundtrip delay to each of the "Delay Host n" entries in +the HELLO message in turn and comparing each of these calculated +delays to the "Host Delay" field of the corresponding Host Table +entry. Each entry is then updated according to the following rules: + +1. If the link connects to another DCN host on the same net and the + port ID (PID) of the link output process matches the "Port ID" + field of the entry, then update the entry. + +2. If the link connects to another DCN host on the same net, the PID + of the link output process does not match the "Port ID" field and the + calculated delay is less than the "Host Delay" field by at least a + specified switching threshold (currently 100 milliseconds), then + update the entry. + +3. If the link connects to a foreign net and is assigned a host ID + corresponding to the entry, then update the entry. In this case + only, use as the calculated delay the roundtrip delay. + +4. If none of the above conditions are met, or if the virtual host + has been declared down and the "TTL" field contains a nonzero + value, then no update is performed. + + The update process consists of replacing the "Delay" field with +the calculated delay, the "Port ID" field with the PID of the link +output process, the "Update Timestamp" field with the current time of +day and the "TTL" field by a specified value (currently 120) in +seconds. If the calculated delay exceeds a specified maximum interval +(currently 30 seconds), the virtual host is declared down by setting +the corresponding "Delay" field to the maximum and the remaining +fields as before. For the purposes of delay calculations values less +than a specified minimum (currently 100 milliseconds) are rounded up +to that minimum. + + The "Offset" field is also replaced during the update process. +When the HELLO message arrives, The value of the current logical clock +is subtracted from the "Time" field and the difference added to +one-half the roundtrip delay. The resulting sum, which represents the +offset of the local clock to the clock of the sender, is added to the +corresponding "Offset" field of the HELLO message and the sum replaces +the "Offset" field of the Host Table. Thus, the "Offset" field in the +Host Table for a particular virtual host is replaced only if that host +is up and on the minimum-delay path to the DCN host. + + The purpose of the switching threshold in (2) above and the +minimum delay specification in the update process is to avoid +unnecessary switching between links and transient loops which can +occur due to normal variations in propagation delays. The purpose of +the "TTL" field test in (4) above is to ensure consistency by purging +all paths to a virtual host when that virtual host goes down. + +DCN Local-Network Protocols Page 9 +D.L. Mills + + + In addition to the updates performed as HELLO messages arrive, each +virtual host in a DCN host also performs a periodic update of its own +Host Table entry. The update procedure is identical to the above, +except that the calculated delay and offset are taken as zero. At +least one of the virtual hosts in a DCN host must have the same host +ID as the host number assigned the DCN host itself and all must be +assigned the same net number. Other than these, there are no +restrictions on the number or addresses of internet processes resident +in a single DCN host. + + It should be appreciated that virtual hosts are truly portable +and can migrate about the net, should such a requirement arise. The +host update protocols described here insure that the routing +procedures always converge to the minimum-delay paths via operational +links and DCN hosts. In the case of broadcast nets such as Ethernets, +the procedures are modified slightly as described below. In this case +the HELLO messages are used to determine routing from the various +Ethernet hosts to destinations off the cable, as well as to provide +time synchronization. + +2.4. Timeouts + + The "TTL" field in every Host Table entry is decremented once a +second in normal operation. Thus, if following a host update another +update is not received within an interval corresponding to the value +initialized in that field, it decrements to zero, at which point the +virtual host is declared down and the Host Table entry set as +described above. The 120-second interval used currently provides for +at least four HELLO messages to be generated by every neighbor on +every link during that interval, since the maximum delay between HELLO +messages is 30 seconds on the lowest-speed link (1200 bps). Thus, if +no HELLO messages are lost, the maximum number of links between any +virtual host and any other is four. + + The "TTL" field is initialized at 120 seconds when an update +occurs and when the virtual host is declared down. During the +interval this field decrements to zero immediately after being +declared down, updates are ignored. This provides a decent interval +for the bad news to propagate throughout the net and for the Host +Tables in all DCN hosts to reflect the fact. Thus, the formation of +routing loops is prevented. + + The IP datagram forwarding procedures call for decrementing the +"time-to-live" field in the IP header once per second or at each point +where it is forwarded, whichever comes first. The value used +currently for this purpose is 30, so that an IP datagram can live in +the net no longer than that number of seconds. This is thus the +maximum delay allowed on any path between two virtual hosts. If this +maximum delay is exceeded in calculating the roundtrip delay for a +Host Table entry, the corresponding virtual host will be declared +down. + + +DCN Local-Network Protocols Page 10 +D.L. Mills + + The interval between HELLO messages on any link depends on the +data rate supported by the link. As a general rule, this interval is +set at 16 times the expected roundtrip time for the longest packet to +be sent on that link. For 1200-bps asynchronous transmission and +packet lengths to 256 octets, this corresponds to a maximum HELLO +message interval of about 30 seconds. + + Although the roundtrip delay calculation, upon which the routing +process depends, is relatively insensitive to net traffic and +congestion, stochastic variations in the calculated values ordinarily +occur due to coding (bit or character stuffing) and medium +perturbations. In order to suppress loops and needless path changes a +minimum switching threshold is incorporated into the routing mechanism +(see above). The interval used for this threshold, as well as for the +minimum delay on any path, is 100 milliseconds. + +3. Formal Specification + + The following sections provide a formal framework which describe +the DCN HELLO protocol. This protocol is run between neighboring DCN +hosts that share a common point-to-point link and provides automatic +connectivity determination, routing and timekeeping functions. + + The descriptions to follow are organized as follows: First a +summary of data structures describes the global variables and packet +formats. Then three processes which implement the protocol are +described: the CLOCK, HELLO and HOST processes. The description of +these processes is organized into sections that describe (1) the local +variables used by that process, (2) the parameters and constants and +(3) the events that initiate processing together with the procedures +they evoke. In the case of variables a distinction is made between +state variables, which retain their contents between procedure calls, +and temporaries, which have a lifetime extending only while the +process is running. Except as noted below, the initial contents of +state variables are unimportant. + +3.1. Data Structures + +3.1.1. Global Variables + +ADDRESS + This is a 32-bit bit-string temporary variable used to contain an + Internet address. + + +CLOCK-HID + This is an eight-bit integer state variable used to contain the + host ID of the local-net host to be used as the master clock. It + is initialized to the appropriate value depending upon the net + configuration. + +DATE + This is a 16-bit bit-string state variable used to contain the + date in RT-11 format. Bits 0-4 contain the year, with zero + corresponding to 1972, bits 5-9 contain the day of the month and + +DCN Local-Network Protocols Page 11 +D.L. Mills + + bits 10-14 contain the month, starting with one for January. + +DATE-VALID + This is a one-bit state variable used to indicate whether the + local date and time are synchronized with the master clock. A + value of one indicates the local clock is not synchronized with + the master clock. This variable is set to one initially and when + the local time-of-day rolls over past midnight. It is set to zero + each time a valid date and time update has been received from the + master clock. + +DELAY + This is a 16-bit integer temporary variable which represents the + roundtrip delay in milliseconds to a host. + +HID + This is an eight-bit integer temporary variable containing the + host ID of some host on the local net. + + There is a one-to-one correspondence between the Internet + addresses of local hosts and their HIDs. The mapping between them + is selected on the basis of the octet number of the Internet + address. For DCN hosts it is the fourth octet, while for hosts + directly connected to a class-A ARPANET IMP or gateway, it is the + third octet (logical-host field). The contents of this octet are + to be added to ADDRESS-OFFSET to form the HID associated + with the address. + +HOLD + This is an eight-bit counter state variable indicating whether + timestamps are valid or not. While HOLD is nonzero, timestamps + should be considered invalid. When set to some nonzero value, the + counter decrements to zero at a 1-Hz rate. Its initial value is + zero. + +HOST-TABLE + This is a table of NHOSTS entries indexed by host ID (HID). There + is one entry for each host in the local net. Each entry has the + following format: + + HOST-TABLE.DELAY + This is a 16-bit field containing the computed roundtrip delay + in milliseconds to host HID. + + HOST-TABLE.OFFSET + This is a 16-bit field containing the computed signed offset + in milliseconds which must be added to the local apparent + clock to agree with the apparent clock of host HID. + + HOST-TABLE.PID + This is an eight-bit field containing the PID of the net-output + process selected by the routing algorithm to forward packets + to host HID. + + +DCN Local-Network Protocols Page 12 +D.L. Mills + + + HOST-TABLE.TTL + This is an eight-bit field used as a time-to-live indicator. + It is decremented by the HOST process once each second and + initialized to a chosen value when a HELLO message is + received. The table is initialized with the HOST-TABLE.DELAY + field set to MAXDELAY for all entries. The contents of the + other fields are unimportant. + +LOCAL-ADDRESS + This is a 32-bit bit-string state variable used to contain the + local host Internet address. + +NET-TABLE + This is a table of NNETS entries with the following format: + + NET-TABLE.HID + This is an eight-bit field containing the host ID of the + pseudo-process to forward packets to the NET-TABLE.NET net. + + NET-TABLE.NET + This is a 24-bit field containing an Internet class-A (eight + bits), class-B (16 bits) or class-C (24 bits) net number. + Note that the actual field width for class-B net numbers is 24 + bits in order to provide a subnet capability, in which the + high-order eight bits of the 16-bit host address is + interpreted as the subnet number. + + The table is constructed at configuration time and must include an + entry for every net that is a potential neighbor. A neighbor net + is defined as a net containing a host that can be directly + connected to a host on the local net. The entry for such a net is + initialized with NET-TABLE.NET set to the neighbor net number and + NET-TABLE.HID set to an arbitrary vitual-host ID not assigned any + other local-net virtual host. + + The remaining entries in NET-TABLE are initialized at initial-boot + time with the NET-TABLE.NET fields set to zero and the + NET-TABLE.HID fields set to a configuration-selected host ID to be + used to forward packets to all nets other than neighbor nets. In + the case where a gateway module is included in the local host + configuration, the GGP and/or EGP protocols will be used to + maintain these entries; while, in the case where no gateway + module is included, only one such entry is required. + +OFFSET + This is a 16-bit signed integer temporary variable which + represents the offset in milliseconds to be added to the apparent + clock time to yield the apparent clock time of the neighbor host. + +3.1.2. Parameters + +ADDRESS-OFFSET + This is an integer which represents the value of the Internet + address field corresponding to the first host in HOST-TABLE. + +DCN Local-Network Protocols Page 13 +D.L. Mills + +NHOSTS + This is an integer which defines the number of entries in HOST-TABLE. + +NNETS + This is an integer which defines the number of entries in MET-TABLE. + +3.1.3. HELLO Packet Fields + +PKT.ADDRESS-OFFSET + This eight-bit is copied from ADDRESS-OFFSET by the sender. + +PKT.DATESTAMP + Bits 0-14 of this 16-bit field are copied from DATE by the sender, + while bit 15 is copied from DATE-VALID. + +PKT.DATE-VALID + This one-bit field is bit 15 of PKT.DATESTAMP. + +PKT.DESTINATION + This 32-bit field is part of the IP header. It is copied from + HLO.NEIGHBOR-ADDRESS by the sender. + +PKT.HOST-TABLE + This is a table of PKT.NHOSTS entries, each entry of which + consists of two fields. The entries are indexed by host ID and + have the following format: + + PKT.HOST-TABLE.DELAY + This 16-bit field is copied from the corresponding HOST-TABLE.DELAY + field by the sender. + + PKT.HOST-TABLE.OFFSET + This 16-bit field is copied from the corresponding HOST-TABLE.OFFSET + field by the sender. + +PKT.LENGTH + This 16-bit field is part of the IP header. It is set by the sender to + the number of octets in the packet. + +PKT.NHOSTS + This eight-bit field is copied from NHOST by the sender. + +PKT.SOURCE + This 16-bit field is part of the IP header. It is copied from + LOCAL-ADDRESS by the sender. + +PKT.TIMESTAMP + This 32-bit field contains the apparent time the packet was transmitted + in milliseconds past midnight UT. + + +DCN Local-Network Protocols Page 14 +D.L. Mills + + +PKT.TSP + This 16-bit field contains a variable used in roundtrip delay + calculations. + +3.2 CLOCK Process (CLK) + + The timekeeping system maintains three clocks: (1) the physical +clock, which is determined by a hardware oscillator/counter; (2) the +apparent clock, which maintains the time-of-day used by client +processes and (3) the actual clock, which represents the time-of-day +provided by an outside reference. The apparent and actual clocks are +maintained as 48-bit quantities with 32 bits of significance available +to client processes. These clocks run at a rate of 1000 Hz and are +reset at midnight UT. + + The CLOCK process consists of a set of state variables along with +a set of procedures that are called as the result of hardware +interrupts and client requests. An interval timer is assumed +logically separate from the local clock mechanism, although both could +be derived from the same timing source. + +3.2.1. Local Variables + +CLK.CLOCK + This is a 48-bit fixed-point state variable used to represent the + apparent time-of-day. The decimal point is to the right of bit 16 + (numbering from the right at bit 0). Bit 16 increments at a rate + equivalent to 1000 Hz independent of the hardware clock. (In the + case of programmable-clock hardware the value of CLK.CLOCK must be + corrected as described below.) + +CLK.COUNT + This is a hardware register that increments at rate R. It can be + represented by a simple line clock, which causes interrupts at the + line-frequency rate, or by a programmable clock, which contains a 16-bit + register that is programmed to count at a 1000-Hz rate and causes an + interrupt on overflow. The register is considered a fixed-point variable + with decimal point to the right of bit 0. + +CLK.DELTA + This is a 48-bit signed fixed-point state variable used to represent the + increment to be added to CLK.CLOCK to yield the actual time-of-day. The + decimal point is to the right of bit 16. + +3.2.3. Parameters + +ADJUST-FRACTION + This is an integer which defines the shift count used to compute a + fraction that is used as a multiplier of CLK.DELTA to correct CLK.CLOCK + once each clock-adjust interval. A value of seven is suggested. + + +DCN Local-Network Protocols Page 15 +D.L. Mills + + +ADJUST-INTERVAL + This is an integer which defines the clock-adjust interval in + milliseconds. A value of 500 (one-half second) is suggested for + the line clock and 4000 (four seconds) for the 1000-Hz clock. + +CLOCK-TICK + This is a fixed-point integer which defines the increment in + milliseconds to be added to CLK.CLOCK as the result of a clock + tick. The decimal point is to the right of bit 16. In the case + of a line-clock interrupt, the value of CLOCK-TICK should be + 16.66666 (60 Hz) or 20.00000 (50 Hz). In the case of a 1000-Hz + programmable-clock overflow, the value should be 65536.00000. + +HOLD-INTERVAL + This is an integer which defines the number of seconds that HOLD will + count down after CLK.CLOCK has been reset. The resulting interval must be + at least as long as the maximum HELLO-INTERVAL used by any HELLO process. + +3.2.3. Events and Procedures + +INCREMENT-CLOCK Event + This event is evoked as the result of a tick interrupt, in the case of a + line clock, or a counter overflow, in the case of the 1000-Hz clock. It + causes the logical clock to be incremented by the value of CLOCK-TICK. + + 1. Add the value of CLOCK-TICK to CLK.CLOCK. + +ADJUST-CLOCK Event + This event is evoked once every ADJUST-INTERVAL milliseconds to slew the + apparent clock time to the actual clock time as set by the SET-CLOCK + procedure. This is done by subtracting a fraction of the correction + factor CLK.DELTA from the value of CLK.DELTA and adding the same fraction + to CLK.CLOCK. This continues until either the next SET-CLOCK call or + CLK.DELTA has been reduced to zero. + + The suggested values for ADJUST-INTERVAL and ADJUST-FRACTION + represent a maximum slew rate of less than +-2 milliseconds per + second, in the case of 1000-Hz clock. The action is to smooth + noisy clock corrections received from neighboring systems to + obtain a high-quality local reference, while insuring the apparent + clock time is always monotonically increasing. + + 1. Shift the 48-bit value of CLK.DELTA arithmetically ADJUST-FRACTION + bits to the right, discarding bits from the right and saving the + result in a temporary variable F. Assuming the decimal point of F to + be positioned to the right of bit 16 and sign-extending as necessary, + subtract F from CLK.DELTA and add F to CLK.CLOCK. + + +DCN Local-Network Protocols Page 16 +D.L. Mills + +DECREMENT-HOLD Event + This event is evoked once per second to decrement the value of HOLD. + + 1. If the value of HOLD is zero, do nothing; otherwise, decrement its + value. + +READ-CLOCK Procedure + + This procedure is called by a client process. It returns the apparent + time-of-day computed as the integer part of the sum CLK.CLOCK plus + CLK.COUNT. Note that the precision of the value returned is limited to + +-1 millisecond, so that client processes must expect the apparent + time to "run backward" occasionally due to drift corrections. When + this happens the backward step will never be greater than one + millisecond and will never occur more often than twice per second. + + 1. In the case of line clocks CLK.COUNT is always zero, while in + the case of programmable clocks the hardware must be + interrogated to extract the value of CLK.COUNT. If following + interrogation a counter-overflow condition is evident, add + CLOCK-TICK to CLK.CLOCK and interrogate the hardware again. + + 2. When the value of CLK.COUNT has been determined compute the sum + CLK.COUNT + CLK.CLOCK. If this sum exceeds the number of + milliseconds in 24 hours (86,400,000), reduce CLK.CLOCK by + 86,400,000, set HOLD-INTERVAL -> HOLD, set CLOCK-VALID (bit 15 + of DATE) to one, roll over DATE to the next calendar day and + start over. If not, return the integer part of the sum as the + apparent time-of-day. + + The CLOCK-VALID bit is set to insure that a master-clock update is + received at least once per day. Note that, in the case of + uncompensated crystal oscillators of the type commonly used as the + 1000-Hz time base, a drift of several parts per million can be + expected, which would result in a time drift of several tenths of a + second per day, if not corrected. + +SET-CLOCK Procedure + This procedure is called by a client process. It sets a time-of-day + correction factor in milliseconds. The argument represents a 32-bit + signed fixed-point quantity with decimal point to the right of bit + 0 that is to be added to CLK.CLOCK so that READ-CLOCK subsequently + returns the actual time-of-day. + + 1. If the correction factor is in the range -2**(16-ADJUST-FRACTION) to + +2**(16-ADJUST-FRACTION) - 1 (about +-128 milliseconds with the + suggested value of ADJUST-FRACTION), the value of the argument + replaces CLK.DELTA and the procedure is complete. If not, add the + value of the sign-extended argument to CLK.CLOCK and set CLK.DELTA to + zero. In addition, set HOLD-INTERVAL -> HOLD, since this + represents a relatively large step-change in apparent time. + The value of HOLD represents the remaining number of seconds + in which timestamps should be considered invalid and is used + by the HELLO process to suppress roundtrip delay calculations + which might involve invalid timestamps. + +DCN Local-Network Protocols Page 17 +D.L. Mills + + + +3.3. HELLO Process + + The HELLO process maintains clock synchronization with a neighbor +HELLO process using the HELLO protocol. It also participates in the +routing algorithm. There is one HELLO process and one set of local +state variables for each link connecting the host to one of its +neighbors. + +3.3.1. Local variables + +HLO.BROADCAST + This is a one-bit switch state variable. When set to zero a + point-to-point link is assumed. When set to one a broadcast (e.g. + Ethernet) link is assumed. + +HLO.KEEP-ALIVE + This is an eight-bit counter state variable used to indicate whether the + link is up. It is initialized with a value of zero. + +HLO.LENGTH + This is a 16-bit integer state variable used to record the length in + octets of the last HELLO message sent. + +HLO.NEIGHBOR-ADDRESS + This is a 32-bit integer state variable used to contain the neighbor host + Internet address. + +HLO.PID + This is an eight-bit integer state variable used to identify the + net-output process associated with this HELLO process. It is initialized + by the kernel when the process is created and remains unchanged + thereafter. + +HLO.POLL + This is a one-bit switch state variable. When set the HELLO process + spontaneously sends HELLO messages. When not set the HELLO process + responds to HELLO messages, but does not send them spontaneously. + +HLO.TIMESTAMP + This is a 32-bit integer temporary variable used to record the time of + arrival of a HELLO message. + +HLO.TSP + This is a 16-bit signed integer state variable used in roundtrip delay + calculations. + + +DCN Local-Network Protocols Page 18 +D.L. Mills + + +3.3.2. Parameters + +HELLO-INTERVAL + This is an integer which defines the interval in seconds between HELLO + messages. It ranges from about eight to a maximum of 30 seconds, + depending on line speed. + +HOLD-DOWN-INTERVAL + This is an integer which defines the interval in seconds a host will be + considered up following receipt of a HELLO message indicating that + host is up. A value of 120 is suggested. + +KEEP-ALIVE-INTERVAL + This is an integer which defines the interval, in units of + HELLO-INTERVAL, that a HELLO process will consider the link up. A + value of four is suggested. + +MAXDELAY + This is an integer which defines the maximum roundtrip delay in + seconds on a path to any reachable host. A value of 30 is suggested. + +MINDELAY + This is an integer which defines the minimum switching threshold in + milliseconds below which routes will not be changed. A value of 100 is + suggested. + +3.3.3. Events and Procedures + +INPUT-PACKET Event + When a packet arrives the net-input process first sets HLO.TIMESTAMP to + the value returned by the READ-CLOCK procedure, then checks the + packet for valid local leader, IP header format and checksum. If + the protocol field in the IP header indicates a HELLO message, the + packet is passed to the HELLO process. If any errors are found + the packet is dropped. + + The HELLO process first checks the packet for valid HELLO header format + and checksum. If any errors are found the packet is dropped. Otherwise, + it proceeds as follows: + + 1. If PKT.SOURCE is equal to LOCAL-ADDRESS, then the line to the + neighbor host is looped. If this is a broadcast link + (HLO.BROADCAST is set to one), then ignore this nicety; if + not, this is considered an error and further processing is + abandoned. Note that, in special configurations involving + other systems (e.g. ARPANET IMPs and gateways) it may be + useful to use looped HELLO to monitor connectivity. The DCN + implementation provides this feature, but is not described here. + + 2. Set KEEP-ALIVE-INTERVAL -> HLO.KEEP-ALIVE. This indicates the + maximum number of HELLO intervals the HLO.TSP field is + considered valid. + + +DCN Local-Network Protocols Page 19 +D.L. Mills + + + 3. Set PKT.TIMESTAMP - HLO.TIMESTAMP -> HLO.TSP. This is part of the + roundtrip delay calculation. The value of HLO.TSP will be + updated and returned to the neighbor in the next HELLO message + transmitted. Next, compute the raw roundtrip delay and offset: + HLO.TIMESTAMP - PKT.TSP -> DELAY and HLO.TSP + DELAY/2 -> OFFSET. + Note: in the case of a broadcast link (HLO.BROADCAST set to one) set + DELAY to zero. + + 4. Perform this step only in the case of non-broadcast links + (HLO.BROADCAST set to zero). If PKT.SOURCE is not equal to + HLO.NEIGHBOR-ADDRESS, then a new neighbor has appeared on this + link. Set PKT.SOURCE -> HLO.NEIGHBOR ADDRESS, MAXDELAY -> + DELAY and proceed to the next step. This will force the line + to be declared down and result in a hold-down cycle. + Otherwise, if either PKT.TSP is zero or HOLD is nonzero, then + the DELAY calculation is invalid and further processing is + abandoned. Note that a hold-down cycle is forced in any + case if a new neighbor is recognized. + + 5. If processing reaches this point the DELAY and OFFSET + variables can be assumed valid as well as the remaining data + in the packet. First, if DELAY < MINDELAY, set MINDELAY -> + DELAY. This avoids needless path switching when the + difference in delays is not significant and has the effect + that on low-delay links the routing algorithm degenerates to + min-hop rather than min-delay. Then set HLO.PID -> PID. There are + two cases: + + Case 1: PKT.NHOSTS is zero. + This will be the case when the neighbor host has just come up or + is on a different net or subnet. Set NEIGHBOR-ADDRESS -> ADDRESS + and call the ROUTE procedure, which will return the host + ID. Then call the UPDATE procedure. In the case of + errors, do nothing but return. + + Case 2: PKT.NHOSTS is nonzero. + This is the case when the neighbor host is on the same net or + subnet. First, save the values of DELAY and OFFSET in temporary + variables F and G. Then, for each value of HID from zero to + NHOSTS-1 consider the corresponding PKT.HOSTS-TABLE entry and do + the following: Set F + PKT.HOST-TABLE.DELAY -> DELAY and + G + PKT.HOST-TABLE.OFFSET -> OFFSET and call the UPDATE procedure. + This completes processing. + + ROUTE Procedure + This procedure returns the host ID in HID of the host represented + by the global variable ADDRESS. + + 1. First, determine if the host represented by ADDRESS is on the same + local net as LOCAL-ADDRESS. For the purposes of this + comparison bits 0-7 and 16-31 are compared for class-A nets + and bits 8-31 are compared for class-B and class-C nets. This + provides for a subnet capability, where the bits 0-7 and 16-23 + (class-A) or 8-15 (class-B) are used as a subnet number. + +DCN Local-Network Protocols Page 20 +D.L. Mills + + + Case 1: The host is on the same net or subnet. + Extract the address field of ADDRESS, subtract ADDRESS-OFFSET and + store the result in HID. If 0 <= HID < NHOSTS, the procedure + completes normally; otherwise it terminates in an error + condition. + + Case 2: The host is not on the same net or subnet. + Search the NET-TABLE for a match of the net fields of + LOCAL-ADDRESS and NET-TABLE.NET. If found set + NET-TABLE.HID -> HID and return normally. If the NET-TABLE.NET + field is zero, indicating the last entry in the table, set + HET-TABLE.HID -> HID and return normally. Note that, in the case + of hosts including GGP/EGP gateway modules, if no match is found + the procedure terminates in an error condition. + +UPDATE Procedure + This procedure updates the entry of HOST-TABLE indicated by HID using + three global variables: DELAY, OFFSET and PID. Its purpose is to update + the HOST-TABLE entry corresponding to host ID HID. In the following all + references are to this entry. + + 1. If PID is not equal to HOST-TABLE.PID, the route to host HID is not + via the net-output process associated with this HELLO process. In + this case, if DELAY + MINDELAY > HOST-TABLE.DELAY, the path is longer + than one already in HOST-TABLE, so the procedure does nothing. + + 2. This step is reached only if either the route to host HID is via the + net-output process associated with this HELLO process or the newly + reported path to this host is shorter by at least MINDELAY. + There are two cases: + + Case 1: HOST-TABLE.DELAY < MAXDELAY. + The existing path to host HID is up and this is a point-to-point + link (HLO.BROADCAST is set to zero). If DELAY < MAXDELAY the + newly reported path is also up. Proceed to the next step. + Otherwise, initiate a hold-down cycle by setting + MAXDELAY -> HOST-TABLE.DELAY and + HOLD-DOWN-INTERVAL -> HOST-TABLE.TTL and return. + + Case 2: HOST-TABLE.DELAY >= MAXDELAY. + The existing path to host HID is down. If DELAY < MAXDELAY and + HOST-TABLE.TTL is zero, the hold-down period has expired and the + newly reported path has just come up. Proceed to the next step. + Otherwise simply return. + + 3. In this step the HOST-DELAY entry is updated. Set + DELAY -> HOST-TABLE.DELAY, HOLD-DOWN-INTERVAL -> HOST-TABLE.TTL and + HLO.PID -> HOST-TABLE.PID. + + +DCN Local-Network Protocols Page 21 +D.L. Mills + + + 4. For precise timekeeping, the offset can be considered valid only if + the length of the last HELLO packet transmitted is equal to + the length of the last one received. Thus, if HLO.LENGTH + equal to PKT.LENGTH, set OFFSET -> HOST-TABLE.OFFSET; + otherwise, leave this field alone. Finally, if HID is equal to + CLOCK-HID and bit 15 (the DATE-VALID bit) + of DATE is zero, set PKT.DATESTAMP -> DATE and call the SET-CLOCK + procedure of the CLOCK process with argument HLO.TIMESTAMP. + +OUTPUT-PACKET Event + This event is evoked once every HELLO-INTERVAL seconds. It determines if + a HELLO message is to be transmitted, transmits it and updates state + variables. + + 1. If HLO.KEEP-ALIVE is nonzero decrement its value. + + 2. If HLO.POLL is zero and HLO.KEEP-ALIVE is zero, do not send a HELLO + message. If either is nonzero initialize the packet fields as + follows: LOCAL-ADDRESS -> PKT.SOURCE, + HLO.NEIGHBOR-ADDRESS -> PKT.DESTINATION and DATE -> PKT.DATESTAMP. + Note: PKT.DESTINATION is set to zero if this is a broadcast link + (HLO.BROADCAST set to one). Also, note that bit 15 of DATE is the + DATE-VALID bit. If this bit is one the receiver will not update its + master clock from the information in the transmitted packet. + This is significant only if the sending host is on the + least-delay path to the master clock. Set PKT.TIMESTAMP to + the value returned from the READ-CLOCK procedure. If + HLO.KEEP-ALIVE is zero or HOLD is nonzero, set PKT.TSP to + zero; otherwise, set PKT.TIMESTAMP + HLO.TSP -> PKT.TSP. + + 3. Determine if the neighbor is on the same net or subnet. If the + neighbor is on a different net set PKT.NHOSTS to zero and + proceed with the next step. Otherwise, set NHOSTS -> + PKT.NHOSTS and for each value of HID from zero to PKT.HOSTS-1 + copy the HOST-TABLE.DELAY and HOST-TABLE.OFFSET fields of the + corresponding HOST-TABLE entry in order into the packet. For + each entry copied test if the HOST-TABLE.PID field matches the + HLO.PID of the HELLO process. If so, a potential routing loop + is possible. In this case use MAXDELAY for the delay field in + the packet instead. + + 4. Finally, set HLO.LENGTH to the number of octets in the packet + and send the packet. + +3.4. HOST Process (HOS) + + This process maintains the routing tables. It is activated once per +second to scan HOST-TABLE and decrement the HOST-TABLE.TTL field of each +entry. It also performs housekeeping functions. + + +DCN Local-Network Protocols Page 22 +D.L. Mills + + +3.4.1. Local variables + +HOS.PID + This is an eight-bit integer used to identify the HOST process. It is + initialized by the kernel when the process is created and remains + unchanged thereafter. + +HOS.HID + This is an eight-bit temporary variable. + +3.4.2. Events and Procedures + +SCAN Event + This event is evoked once each second to scan the HOST-TABLE and perform + housekeeping functions. + + 1. For each value of a temporary variable F from zero to NHOSTS-1 do the + following: Set LOCAL-ADDRESS -> ADDRESS and call the ROUTE + procedure, which will return the host ID HID. If F is equal + to HID, then set both DELAY and OFFSET to zero, HOS.PID -> PID + and call the UPDATE procedure. This will cause all packets + received with the local address to be routed to this process. + + If HOST-TABLE.TTL is zero skip this step. Otherwise, decrement + HOST-TABLE.TTL by one. If the result is nonzero skip the + remainder of this step. Otherwise, If HOST-TABLE.DELAY <MAXDELAY set + HOLDOFF-INTERVAL -> HOST-TABLE.TTL and MAXDELAY -> HOST-TABLE.DELAY. + The effect of this step is to declare a hold-down cycle when a host + goes down. + +4. References + +1. Mills, D.L. Final Report on Internet Research, ARPA Packet Switching + Program. Technical Report TSLAB 82-7, COMSAT Laboratories, + December 1982. + +DCN Local-Network Protocols Page 23 +D.L. Mills + + +Appendix A. Link-Level Packet Formats + +A.1. Serial Links Using Program-Interrupt Interfaces + + Following is a description of the frame format used on +asynchronous and synchronous serial links with program-interrupt +interfaces such as the DEC DLV11 and DPV11. This format provides +transparency coding for all messages, including HELLO messages, but +does not provide error detection or retransmission functions. It is +designed to be easily implemented and compatible as far as possible +with standard industry protocols. + + The protocol is serial-by-bit, with the same interpretation on +the order of transmission as standard asynchronous and synchronous +interface devices; that is, the low-order bit of each octet is +transmitted first. The data portion of the frame consists of one +Internet datagram encoded according to a "character-stuffing" +transparency convention: + +1. The frame begins with the two-octet sequence DLE-STX, in the case of + asynchronous links, or the four-octet sequence SYN-SYN-DLE-STX, in the + case of synchronous links. The data portion is transmitted next, + encoded as described below, followed by the two-octet sequence + DLE-ETX. No checksum is transmitted or expected. If it is + necessary for any reason to transmit time-fill other than in the + data portion, the DEL (all ones) is used. + +2. Within the data portion of the frame the transmit buffer is + scanned for a DLE. Each DLE found causes the sequence DLE-DLE to + be transmitted. If it is necessary for some reason for the + transmitter to insert time-fill within the data portion, the + sequence DLE-DEL is used. + +3. While scanning the data stream within the data portion of the + frame the sequence DLE-DLE is found, a single DLE is inserted in + the receive buffer. If the sequence DLE-ETX is found, the buffer + is passed on for processing. The sequence DLE-DEL is discarded. + Any other two-octet sequence beginning with DLE and ending with + other than DLE, ETX or DEL is considered a protocol error + (see note below). + + Note: In the case of synchronous links using program-interrupt +interfaces such as the DPV11, for example, a slightly modified +protocol is suggested when both ends of the link concur. These +interfaces typically provide a parameter register which can be loaded +with a code used both to detect the receiver synchronizing pattern and +for time-fill when the transmit buffer register cannot be serviced in +time for the next character. + + The parameter register must be loaded with the SYN code for this +protocol to work properly. However, should it be necessary to +transmit time-fill, a single SYN will be transmitted, rather than the +DLE-DEL sequence specified. Disruptions due to these events can be +minimized by use of the following rules: + +DCN Local-Network Protocols Page 24 +D.L. Mills + + +1. If the transmitter senses a time-fill condition (usually by a + control bit assigned for this purpose) between frames or + immediately following transmission of a DLE, the condition is ignored. + +2. If the transmitter senses a time-fill condition at other times it sends + the sequence DLE-CAN. + +3. If the receiver finds a SYN either between frames or immediately + following DLE, the SYN is discarded without affecting sequence + decoding. + +4. If the receiver finds the sequence DLE-CAN in the data portion, it + discards the sequence and the immediately preceding octet. + + These rules will work in cases where a single SYN has been +inserted by the transmitter and even when a SYN has been inserted in +the DLE-CAN sequence. If an overrun (lost data) condition is sensed +at the receiver, the appropriate action is to return to the +initial-synchronization state. This should also be the action if any +code other than STX is found following the initial DLE. or if any +code other than DLE, ETX, DEL or CAN is found following a DLE in the +data portion. + +A.2. Serial Links Using DDCMP Devices + + Following is a description of the frame format used on DEC DDCMP links +with DMA interfaces such as the DEC DMV11 and DMR11. These interfaces +implement the DEC DDCMP protocol, which includes error detection and +retransmission capabilities. The DDCMP frame format is as follows: + ++-------------+-----+-----+-----+-----+-----+------+------+------+ +| SYN SYN SOH |Count|Flag |Resp | Seq | Adr | CRC1 | Data | CRC2 | ++-------------+-----+-----+-----+-----+-----+------+------+------+ +bits 24 14 2 8 8 8 16 ... 16 + +With respect to this diagram, each octet is transmitted starting from the +leftmost octet, with the bits of each octet transmitted low-order bit first. +The contents of all fields except the "Data" field are managed by the +interface. The Internet datagram is placed in this field as-is, with no +character or bit stuffing (the extent of this field is indicated by the +interface in the "Count" field. + +A.3. Serial Links Using HDLC Devices + + Following is a description of the frame format used on HDLC links with +program-interrupt interfaces such as the DEC DPV11. + + +--------+--------+--------+--------+--------+--------+ + | Flag | Addr | Ctrl | Data | CRC | Flag | + +--------+--------+--------+--------+--------+--------+ +coding 01111110 00000000 00000000 xxxxxxxx cccccccc 01111110 + + +DCN Local-Network Protocols Page 25 +D.L. Mills + + +With respect to this diagram, each octet is transmitted starting from +the leftmost octet, with the bits of each octet transmitted low-order +bit first. The code xxxxxxxx represents the data portion and cccccccc +represents the checksum. The bits between the "Flag" fields are +encoded with a bit-stuffing convention in which a zero bit is stuffed +following a string of five one bits. The "Addr" and "Ctrl" fields are +not used and the checksum is ignored. The Internet datagram is placed +in the "Data" field, which must be a multiple of eight bits in length. + +A.4. ARPANET 1822 Links Using Local or Distant Host Interfaces + + Following is a description of the frame format used with ARPANET +1822 Local or Distant Host interfaces. These interfaces can be used +to connect a DCN host to an ARPANET IMP, Gateway or Port Expander or +to connect two DCN hosts together. When used to connect a DCN host to +an ARPANET IMP, Gateway or Port Expander, a 96-bit 1822 leader is +prepended ahead of the Internet datagram. The coding of this leader +is as described in BBN Report 1822. When used to connect two DCN +hosts together, no leader is used and the frame contains only the +Internet datagram. + +A.5. ARPANET 1822 Links Using HDH Interfaces + + Following is a description of the frame format used with ARPANET +1822 HDH interfaces. These interfaces can be used to connect a DCN +host to an ARPANET IMP or Gateway or to connect two DCN hosts +together. In either case, the frame format is as described in +Appendix J of BBN Report 1822. + +A.6. X.25 LAPB Links Using RSRE Interfaces + + Following is a description of the frame format used on X.25 LAPB +links with the Royal Signals and Radar Establishment interfaces. +These interfaces implement the X.25 Link Access Protocol - Balanced +(LAPB), also known as the frame-level protocol, using a frame format +similar to that described under A.3 above. Internet datagrams are +placed in the data portion of I frames and encoded with the +bit-stuffing procedure described in A.3. There is no packet-level +format used with these interfaces. + +A.7. Ethernet Links + + Following is a description of the frame format used on Ethernet links. + + +-----------+-----------+------+------+-----+ + | Dest Addr | Srce Addr | Type | Data | CRC | + +-----------+-----------+------+------+-----+ +bits 48 48 16 ... 32 + +With respect to this diagram, each field is transmitted starting from +the leftmost field, with the bits of each field transmitted low-order +bit first. The "Dest Addr" and "Srce Addr" contain 48-bit Ethernet +addresses, while the "Type" field contains the assigned value for IP +datagrams (0800 hex) or for + +DCN Local-Network Protocols Page 26 +D.L. Mills + + +ARP datagrams (0806 hex). The Internet datagram is placed in the +"Data" field and followed by the 32-bit checksum. The Address +Resolution Protocol (ARP) is used to establish the mapping between +Ethernet address and Internet addresses. +
\ No newline at end of file |