Chaosnet was first developed by Thomas Knight and Jack Holloway at MIT's AI Lab in 1975 and thereafter. It refers to two separate, but closely related, technologies. The more widespread was a set of computer communication packet-based protocols intended to connect the then-recently developed and very popular (within MIT) Lisp machines; the second was one of the earliest local area network (LAN) hardware implementations.
The Chaosnet protocol originally used the latter, an implementation over CATV coaxial cable modeled on the early Xerox PARC 3 megabit/second Ethernet, the early ARPANET, and Transmission Control Protocol (TCP). It was a contention-based system intended to work over a 0–1000 meter range, that included a pseudo-slotted feature intended to reduce collisions, which worked by passing a virtual token of permission from host to host; successful packet transmissions updated each host's knowledge of which host had the token at that time. Collisions caused a host to fall silent for a duration depending on the distance from the host it collided with. Collisions were never a real problem, and the pseudo-slotting fell into disuse.
Chaosnet's network topology was usually series of linear (not circular) cables, each up to a maximum of a kilometer and roughly 12 clients. The individual segments were interconnected by "bridges" (much in the ARPANET mold), generally older computers like PDP-11s with two network interfaces.
The protocols were also later implemented as a payload that could be carried over Ethernet (usually the later 10 megabit/second variety). Chaosnet was specifically for LANs; features to support WANs were left out for the sake of simplicity.
Chaosnet can be regarded as a contemporary of both the PUP protocols invented by PARC, and the Internet Protocol (IP), and was recognized as one of the other network classes (other than "IN" and "HS") in the Domain Name System. BIND uses a built-in pseudo-top-level-domain in the "CHAOS class" for retrieving information about a running DNS server.
The Chaosnet protocol identifies hosts by 16-bit addresses, 8 bits of which identify the subnet, 8 bits of which identify the host within the subnet. The basic protocol was a full-duplex reliable packet transmission between two user processes. The packet contents could be treated as bytes of 8 or 16 bits, with support for other word sizes provided by higher-level protocols. The connection was identified by a combination of the 16-bit addresses of each host and a 16-bit "connection index" assigned by each host to maintain uniqueness. "Controlled" packets within a connection were identified by a 16-bit packet number, which was used to deliver controlled packets reliably and in order, with re-transmission and flow control. "Uncontrolled" packets were not retransmitted, and were used at a lower level to support the flow-control and re-transmission. Chaosnet also supported "BRD" broadcast packets to multiple subnets.
Initial establishment of the connection was made using "contact names." These names identified the network service and higher-level protocol. For example "STATUS" was the contact name which requested basic network statistics from a host. "TELNET" was a contact name for the Arpanet TELNET protocol. "FILE" was a contact name for the Lisp Machine network file service. Other contact names included "SUPDUP", "MAIL", "NAME" for the Arpanet Finger protocol, "TIME", "SEND" for interactive messaging, "ARPA" for a gateway service to Arpanet. "DOVER" was the contact name for sending print jobs to Chaosnet hosts with a Xerox Dover printer attached (an early laser printer). Developers could easily experiment with new protocols by inventing new contact names. In ITS, a new server for that protocol could be installed by creating a link to the program in the location DSK:DEVICE;CHAOS <cname> where <cname> was up to six letters of the contact name.
Simple transactions could be completed by a single "RFC" packet containing a contact name, answered by a single "ANS" packet with the relevant information. For example, an RFC to contact name "TIME" would result in a single ANS packet containing a 32-bit number indicating the time.
The original GNU Manifesto mentioned that it aimed to, among other things, support the Chaosnet protocol.