Difference between revisions of "Host-to-IMP Protocol"

From Computer History Wiki
Jump to: navigation, search
(A decent start)
 
m (More NCP fixups)
 
(19 intermediate revisions by 2 users not shown)
Line 1: Line 1:
The '''Host-to-IMP Protocol''' is the lowest several levels of the channel between a [[host]] and an [[Interface Message Processor|IMP]], and it used both for the Host to communicate with its IMP, and for one Host to send a [[packet]] to another, as the lowest layer of [[Network Control Program|NCP]].
+
The '''Host-to-IMP Protocol''' is the lowest [[protocol]] layer of the [[protocol suite|protocol stack]] in the [[ARPANET]]. It was used both for the [[host]] to communicate with its [[Interface Message Processor|IMP]], and for one host to send a [[packet]] to another, as the lowest layer of [[Network Control Protocol|NCP]].
  
The service provided was reliable (although if a packet was irretrievably lost, the IMP would indicate that to the Host with an error message), with flow control.
+
Communication and between IMPs and their connected hosts was all done with packets (for which the formal ARPANET term was "messages"); the host to host data carriage service provided was reliable (although if a packet was irretrievably lost, the IMP would indicate that to the host with an error message), with [[flow control]].
  
==Physical layer==
+
==Host addresses==
  
At the very lowest layer, there are three different choices for the [[physical layer]]; 'Local Host' (LH), 'Distant Host' (DH), and 'Very Distant Host' (VDH).
+
Host [[address]]es in the ARPANET consisted of the IMP number, and the host number on the IMP. In the original 'short leader' format (below), IMP numbers were 6 bits, and host numbers were 2 bits. In the later 'long leader' format, these were increased to 16 bits and 8 bits respectively.
  
The first two are logically the same, and differ only in the physical details - DH uses [[transistor-transistor logic|TTL]] signals over cable using twisted pairs, with a [[ground]] being the other line in the pair, whereas LH uses [[differential pair]]s.
+
==Packet formats==
  
Above that, the interface is [[asynchronous]], bit-serial, with a handshake on every bit; there is no fixed word length, the IMP was prepared to talk to machines with different word lengths. There are also two pairs of 'ready' lines (one from the IMP, and one from the Host), which are connected to ground via a [[relay]] when that entity wants to signal that it is ready.
+
There were two versions of the Host-IMP headers:
  
The VDH uses an entirely different protocol, essentially the [[modem]] to modem [[protocol]] which the IMPs use to talk to each other over a long-distance serial line.
+
* The so-called "short leader" format, used from 1970 until roughly the end of 1975 (the exact date is not yet ascertained); although it continued to be supported after that date, but hosts using it could not reach all of the other hosts in the network at some point shortly thereafter. It was 32 bits long.
+
* The so-called "long leader" format, introduced around the end of 1975, which allowed i) more IMPs in the network, ii) more hosts per IMP, and iii) various other improvements. It was 96 bits long.
==Network layer==
+
 
 +
For details, see the external link below.
 +
 
 +
==Links==
 +
 
 +
In both the original 32-bit leader and the later 96-bit leader, there was a 12-bit field called the 'message ID'; the high 8 bits of this field were designated as the '''link'''.
 +
 
 +
The NCP protocol used links 0, and 2-0107; the low 4 bits of the message ID were always set to zero. The [[Internet Protocol]] used links 0233-0236. Several other [[internetworking layer]] protocols had links assigned, to allow their packets to be carried over the ARPANET: 0230 for [[PARC Universal Packet|PUP]], and 0227 for [[Chaosnet|CHAOS]].  
 +
 
 +
==Packet Types (Host->IMP) ==
  
 
The network layer uses a number of different packet types; some are used by the IMP and Host to communicate with each other, others are used to send data from one Host to another.
 
The network layer uses a number of different packet types; some are used by the IMP and Host to communicate with each other, others are used to send data from one Host to another.
  
One important type is the 'Ready For Next Message', used between the Host and the IMP (with cooperation from the destination Host's IMP) for flow control; it indicated when a message had been successfully delivered to the desination Host, and the Host's IMP was ready for another packet to that host.
+
One important type is the 'Ready For Next Message' ('''RFNM'''), used between the Host and the IMP (with cooperation from the destination Host's IMP) for flow control; it indicated when a message had been successfully delivered to the destination Host, and that Host's IMP was ready for another packet to that destination host.
  
(Depending on the exact version of the code running in the IMP, there was generally a maximum of 8 outstanding packets to any given destination allowed at a time.)
+
(Depending on the exact version of the code running in the IMP, there was generally a maximum of 8 outstanding packets to any given destination allowed at a time from a source host.)
 +
 
 +
Here are the packet types, listed by type and (indented) sub-type:
 +
 
 +
:0 - Regular Message
 +
:: 0 - Standard, Non-Refusable
 +
:: 1* - Refusable
 +
:: 2* - Get Ready
 +
:: 3 - Uncontrolled
 +
:1 - Error Without Message Identification
 +
:: 0 - Host's error flip-flop set during transmission
 +
:: 1 - Host received a message less than 80 bits
 +
:: 2 - Host received a message of an unassigned type
 +
:2 - Host Going Down
 +
:: 0 - Reserved for IMP use
 +
:: 1 - Reserved for IMP use
 +
:: 2 - Reserved for IMP use
 +
:: 3 - Reserved for IMP use
 +
:: 4 - Reserved for IMP use
 +
:: 5 - Scheduled PM
 +
:: 6 - Scheduled hardware work
 +
:: 7 - Scheduled software work
 +
:: 8 - Reserved for IMP use
 +
:: 9 - Reserved for IMP use
 +
:: 10 - Emergency Restart
 +
:: 11 - Power Outage
 +
:: 12 - Software Breakpoint
 +
:: 13 - Hardware Failure
 +
:: 14 - Not scheduled to be up
 +
:: 15 - Unspecified Reason
 +
:3 - Unassigned
 +
:4 - NOP
 +
:5 - Unassigned
 +
:6 - Unassigned
 +
:7 - Unassigned
 +
:8 - Error with Message Identification
 +
 
 +
<nowiki>*</nowiki> = Non-blocking interface, not implemented
 +
 
 +
==Packet Types (IMP->Host)==
 +
 
 +
Listed by type and (indented) sub-type:
 +
 
 +
:0 - Regular Message
 +
:1 - Error in Leader
 +
:: 0 - IMP's error flip-flop set during transmission
 +
:: 1 - IMP received a message less than 80 bits
 +
:: 2 - IMP received a message of an unassigned type
 +
:: 3 - IMP received a message of the opposite leader style than it was expecting
 +
:2 - IMP Going Down
 +
:3 - Unused
 +
:4 - NOP
 +
:5 - RFNM
 +
:: 0 - Original Message Nno-Refusable
 +
:: 1 - Original Message Refusable
 +
:6 - Dead Host Status
 +
:: 0 - Currently Unused
 +
:: 1 - Destination Host not communicating - took its ready-line down
 +
:: 2 - Destination Host not communicating - tardy taking traffic
 +
:: 3 - Destination Host does not exist
 +
:: 4 - IMP software is preventing communication with this Host
 +
:: 5 - Destination Host is down for scheduled PM
 +
:: 6 - Destination Host is down for scheduled hardware work
 +
:: 7 - Destination Host is down for scheduled software work
 +
:: 8 - Destination Host is down for emergency restart
 +
:: 9 - Destination Host is down because of a power outage
 +
:: 10 - Destination Host is stopped at a software breakpoint
 +
:: 11 - Destination Host is down because of a hardware failure
 +
:: 12 - Destination Host is not scheduled to be up
 +
:: 13 - Currently Unused
 +
:: 14 - Currently Unused
 +
:: 15 - Destination Host is in the process of coming up
 +
:7 - Destination Host or IMP Dead or Unknown
 +
:: 0 - The destination IMP cannot be reached
 +
:: 1 - The destination Host is not up
 +
:: 2 - Communication with the destination Host is not possible because it does not support new leaders
 +
:: 3 - Communication with the destination Host is administratively prohibited
 +
:8 - Error in Data
 +
:9 - Incomplete Transmission
 +
:: 0 - Destination Host did not accept the message quickly enough
 +
:: 1 - Message was too long
 +
:: 2 - The Host took too long to transmit the message to the IMP
 +
:: 3 - Message lost in the network dur to IMP or circuit failure
 +
:: 4 - The IMP could not accept the message quickly enough because of unavailable resources
 +
:: 5 - Source IMP I/O failure during receipt of this message
 +
:10 - Interface Reset
 +
:11* - Refused, Try Again
 +
:: 0 - IMP buffer was not available
 +
:: 1 - Transmit block for connection was not available
 +
:12* - Refused, Will Notify
 +
:: 0 - Currently unused
 +
:: 1 - Currently unused
 +
:: 2 - Connection not available
 +
:: 3 - Reassemly space not available at destination
 +
:: 4 - Message number not available
 +
:: 5 - Transaction block for message not available
 +
:13* - Refused, Still Trying
 +
:14* - Ready
 +
 
 +
<nowiki>*</nowiki> = Non-blocking interface, not implemented
  
 
==See also==
 
==See also==
  
* BBN Report #1822, "[http://www.bitsavers.org/pdf/bbn/imp/BBN1822_Jan1976.pdf Specification for the Inteconnection of a Host and an IMP]" - The 1976 revision of this key document, it includes the earliest specification of the new long leader format
+
* [[Bolt, Beranek, and Newman|BBN]] Report #1822, [http://www.bitsavers.org/pdf/bbn/imp/BBN1822_Jan1976.pdf Specification for the Interconnection of a Host and an IMP] - The 1976 revision of this key document, it includes the earliest specification of the new long leader format
  
=External links==
+
==External links==
  
 
* [http://www.chiappa.net/~jnc/tech/arpanet.html ARPANET Technical Information]
 
* [http://www.chiappa.net/~jnc/tech/arpanet.html ARPANET Technical Information]
 +
** [http://www.chiappa.net/~jnc/tech/arpapkt.html ARPANET Technical Information: Packet Formats]
 +
** [http://www.chiappa.net/~jnc/tech/arpaprot.html ARPANET Technical Information: ARPANET Protocol Handbook]
 +
 +
[[Category: ARPANET]]

Latest revision as of 13:56, 29 June 2022

The Host-to-IMP Protocol is the lowest protocol layer of the protocol stack in the ARPANET. It was used both for the host to communicate with its IMP, and for one host to send a packet to another, as the lowest layer of NCP.

Communication and between IMPs and their connected hosts was all done with packets (for which the formal ARPANET term was "messages"); the host to host data carriage service provided was reliable (although if a packet was irretrievably lost, the IMP would indicate that to the host with an error message), with flow control.

Host addresses

Host addresses in the ARPANET consisted of the IMP number, and the host number on the IMP. In the original 'short leader' format (below), IMP numbers were 6 bits, and host numbers were 2 bits. In the later 'long leader' format, these were increased to 16 bits and 8 bits respectively.

Packet formats

There were two versions of the Host-IMP headers:

  • The so-called "short leader" format, used from 1970 until roughly the end of 1975 (the exact date is not yet ascertained); although it continued to be supported after that date, but hosts using it could not reach all of the other hosts in the network at some point shortly thereafter. It was 32 bits long.
  • The so-called "long leader" format, introduced around the end of 1975, which allowed i) more IMPs in the network, ii) more hosts per IMP, and iii) various other improvements. It was 96 bits long.

For details, see the external link below.

Links

In both the original 32-bit leader and the later 96-bit leader, there was a 12-bit field called the 'message ID'; the high 8 bits of this field were designated as the link.

The NCP protocol used links 0, and 2-0107; the low 4 bits of the message ID were always set to zero. The Internet Protocol used links 0233-0236. Several other internetworking layer protocols had links assigned, to allow their packets to be carried over the ARPANET: 0230 for PUP, and 0227 for CHAOS.

Packet Types (Host->IMP)

The network layer uses a number of different packet types; some are used by the IMP and Host to communicate with each other, others are used to send data from one Host to another.

One important type is the 'Ready For Next Message' (RFNM), used between the Host and the IMP (with cooperation from the destination Host's IMP) for flow control; it indicated when a message had been successfully delivered to the destination Host, and that Host's IMP was ready for another packet to that destination host.

(Depending on the exact version of the code running in the IMP, there was generally a maximum of 8 outstanding packets to any given destination allowed at a time from a source host.)

Here are the packet types, listed by type and (indented) sub-type:

0 - Regular Message
0 - Standard, Non-Refusable
1* - Refusable
2* - Get Ready
3 - Uncontrolled
1 - Error Without Message Identification
0 - Host's error flip-flop set during transmission
1 - Host received a message less than 80 bits
2 - Host received a message of an unassigned type
2 - Host Going Down
0 - Reserved for IMP use
1 - Reserved for IMP use
2 - Reserved for IMP use
3 - Reserved for IMP use
4 - Reserved for IMP use
5 - Scheduled PM
6 - Scheduled hardware work
7 - Scheduled software work
8 - Reserved for IMP use
9 - Reserved for IMP use
10 - Emergency Restart
11 - Power Outage
12 - Software Breakpoint
13 - Hardware Failure
14 - Not scheduled to be up
15 - Unspecified Reason
3 - Unassigned
4 - NOP
5 - Unassigned
6 - Unassigned
7 - Unassigned
8 - Error with Message Identification

* = Non-blocking interface, not implemented

Packet Types (IMP->Host)

Listed by type and (indented) sub-type:

0 - Regular Message
1 - Error in Leader
0 - IMP's error flip-flop set during transmission
1 - IMP received a message less than 80 bits
2 - IMP received a message of an unassigned type
3 - IMP received a message of the opposite leader style than it was expecting
2 - IMP Going Down
3 - Unused
4 - NOP
5 - RFNM
0 - Original Message Nno-Refusable
1 - Original Message Refusable
6 - Dead Host Status
0 - Currently Unused
1 - Destination Host not communicating - took its ready-line down
2 - Destination Host not communicating - tardy taking traffic
3 - Destination Host does not exist
4 - IMP software is preventing communication with this Host
5 - Destination Host is down for scheduled PM
6 - Destination Host is down for scheduled hardware work
7 - Destination Host is down for scheduled software work
8 - Destination Host is down for emergency restart
9 - Destination Host is down because of a power outage
10 - Destination Host is stopped at a software breakpoint
11 - Destination Host is down because of a hardware failure
12 - Destination Host is not scheduled to be up
13 - Currently Unused
14 - Currently Unused
15 - Destination Host is in the process of coming up
7 - Destination Host or IMP Dead or Unknown
0 - The destination IMP cannot be reached
1 - The destination Host is not up
2 - Communication with the destination Host is not possible because it does not support new leaders
3 - Communication with the destination Host is administratively prohibited
8 - Error in Data
9 - Incomplete Transmission
0 - Destination Host did not accept the message quickly enough
1 - Message was too long
2 - The Host took too long to transmit the message to the IMP
3 - Message lost in the network dur to IMP or circuit failure
4 - The IMP could not accept the message quickly enough because of unavailable resources
5 - Source IMP I/O failure during receipt of this message
10 - Interface Reset
11* - Refused, Try Again
0 - IMP buffer was not available
1 - Transmit block for connection was not available
12* - Refused, Will Notify
0 - Currently unused
1 - Currently unused
2 - Connection not available
3 - Reassemly space not available at destination
4 - Message number not available
5 - Transaction block for message not available
13* - Refused, Still Trying
14* - Ready

* = Non-blocking interface, not implemented

See also

External links