Arpanet - larsbrinkhoff/its-manual GitHub Wiki

Background

Arpanet was an experimental computer network funded by the Information Processing Techniques Office at ARPA. It began to operate in 1969 with four sites, and MIT joined early as site number six.

The ARPA network is made up of routers called IMPs - Interface Message Processors. A computer on the network is called a host, and is connected to an IMP. The IMPs take care of passing network traffic between each other and the hosts. Traffic between IMPs were provided by Bell 303C wideband modems providing synchronous 50,000 bits/s circuits. The IMPs are running a 1973 version of the network software. It can only handle 63 IMPs, and each IMP can have a maximum of four hosts attached. MIT had several IMPs, the first of which was number 6. The four hosts were Multics and three PDP-10s running ITS: Dynamic Modeling, the AI lab, and Mathlab. The host number is on top of the IMP number, so the addresses were 006, 106, 206, and 306, or in decimal 6, 70, 134, and 198. The MC KL10 came later with 354 (or 236). Arpanet documentation often uses the decimal numbers.

The interface between a host and an IMP is specified by BBN Report 1822. It specifies how hosts and IMPs exchange "messages". Messages are further spit into "packets" which are sent into the IMP network and reassembled into the original message for the destination host. At this level, messages are only between hosts - corresponding to the IP level. On top of this, there's the Arpanet Host/Host protocol, which specifies how to talk between specific processes on two hosts. The term "NCP" initially stood for Network Control Program - the software running on an Arpanet host. Later NCP has come to mean Network Control Protocol. In this sense NCP means the Host/Host protocol and perhaps the 1822 protocol too.

Arpanet was the forerunner of Internet, and TCP/IP was developed and tested there. Many of the now-popular application level protocols existed already on the Arpanet, and worked the same way. There is one difference: where a TCP connection is bidirectional and the endpoints are called "ports", an Arpanet connection is unidirectional and between "sockets". Applications use two connections, where the sending socket must have an odd number, and the receiving socket an even number. Thus all server socket numbers are always odd.

How to use Arpanet on ITS

Currently, ITS is built with both INETP and NCPP enabled. So both TCP/IP and NCP should work. However, the PDP-10 emulator IMP device is only able to deal with one type at a time, and anyway, the 1973 software running on the IMP emulator certainly doesn't know how to do anything clever with TCP/IP coming from the host. So for now, you must choose between one or the other.

To connect to a remote host, it must be in a host table, or you must know it's host number. Some programs have a built-in host table, with data coming from the file SYSENG;HOSTS TXT. Others dynamically load the data from SYSHST;H3TEXT. Currently, ITS is host 176 in octal, or 126 in decimal. You can verify this from DDT. Either non-timesharing DDT before you type $G to start ITS: type IMPUS= to see the octal host number, or from timesharing DDT: type SYS$J to see the ITS core image, and then IMPUS=.

ITS has servers and clients for most of the usual protocols: telnet, ftp, finger, email.

For remote login clients, use UT, TELNET, or SUPDUP.

  • UT is the old "user telnet" using server socket 1.
  • TELNET is a newer implementation.
  • SUPDUP is a full-display remote session, primarily between ITS, WAITS, and Lispm systems.

ITS generally uses octal for host numbers.

How to use Arpanet from your computer

The ITS start script accepts arpanet for starting an IMP emulator and the local NCP. This is all that's needed to set up the IMP network, configure the PDP-10 emulator, and enable ARPA networking on your local computer.

The local NCP has an API for applications to talk to ARPANET. The entry point is a Unix domain socket. This appears as a file called ncp076 in the ITS git directory. This file must be known to applications through the NCP environment variable, so type export NCP=$PWD/ncp076.

The directory tools/ncp/apps has applications that implement some ARPANET protocols: telnet, finger, echo, discard, etc. They all need to access the socket specified by the NCP environment variable.

How to set up the emulators

The PDP-10 emulator must be configured to use either Arpanet or TCP/IP, and you must specify how to talk to an IMP emulator. E.g., for the PDP-10 to listen to port 1234 and talk to an IMP at localhost port 4321:

SET IMP NCP
ATTACH IMP 1234:localhost:4321

The IMP emulator runs on the H316 emulator in SIMH. It too must be configured properly. The IMP hardware must be enabled, the IMP software must be loaded, and you must specify how to talk to the PDP-10 emulator. There are four host ports, but for now only the first two works. Moreover, the 1973 IMP software is using an older version of the IMP-host protocol, whereas ITS requires a newer version. The H316 emulator has an option to transparently convert between the two. E.g. for IMP number six to have host port one listen to port 4321 and talk to ITS at localhost 1234:

DO impconfig.simh
SET IMP NUM=6
DO impcode.simh

SET HI1 ENABLED
SET HI1 CONVERT
ATTACH HI1 4321:localhost:1234

Please find impconfig.simh and impcode.simh elsewhere, for example under H316/tests in SIMH.

To expand the network with more IMPs, you also run more instances of H316, set up their modem interfaces and point them to each other.

Finally, there is also an NCP that runs locally. This program acts as an Arpanet host, provides services to applications, and knows how to talk the Arpanet protocols. There are clients and servers for telnet and finger.

The ncpd program talks to an IMP the same way another host does. E.g. for NCP to listen to port 5678 and talk to an IMP at localhost port 8765:

ncpd localhost 8765 5678

You will also need to set up the host port on the IMP side, e.g.

SET HI2 ENABLED
ATTACH HI2 8765:localhost:5678
⚠️ **GitHub.com Fallback** ⚠️