Zum Hauptinhalt springen

II. Das Protokoll

Der in NWG/RFC #33 erläuterte Begriff der Verbindung durchzieht das gesamte Protokoll. Eine Verbindung ist ein Simplex-Kommunikationspfad, der zwischen zwei Prozessen bestehen soll.

Die Hauptaufgabe des Protokolls besteht darin, (1) die Herstellung von Verbindungen, (2) die Regelung des Flusses über Verbindungen und (3) die Beendigung von Verbindungen zu ermöglichen.

Darüber hinaus bietet das Protokoll einige Hilfsfunktionen, etwa das Senden simulierter Interrupt-Impulse und das Echo von Testnachrichten.

Um einen Pfad für den Austausch von Informationen über Verbindungen bereitzustellen, legen wir bestimmte Links als Steuerlinks fest, nämlich Link eins zwischen jedem Hostpaar. Der Verkehr auf Steuerlinks besteht ausschließlich aus Steuerbefehlen, die weiter unten definiert werden.

Verbindungen werden durch ein Paar von Sockets benannt. Sockets sind 40 Bit lange Namen, die im gesamten Netzwerk bekannt sind. Jedem Host wird eine private Teilmenge dieser Namen zugewiesen, und ein Befehl, der eine Verbindung anfordert, benennt einen Socket, der lokal beim anfordernden Host liegt, und einen, der lokal beim Empfänger der Anforderung liegt.

Sockets sind polarisiert: Sockets mit gerader Nummer sind Empfangssockets, solche mit ungerader Nummer Sendesockets. Für eine Verbindung wird je einer von beiden benötigt.

Um die Übertragung von Informationen über eine Verbindung zu erleichtern, wird jeder Verbindung ein eindeutiger Link zugewiesen. Einer der Schritte beim Herstellen einer Verbindung ist daher die Zuweisung eines Links. Von den Nicht-Steuerlinks ist Link null für netzinterne Zwecke reserviert, und die Links 32 bis 255 sind für Experimente und Erweiterungen reserviert. Somit stehen nur die Links 2 bis 31 für den regulären Gebrauch zur Verfügung. Die Link-Zuweisung muss entweder immer durch den Empfänger oder immer durch den Sender erfolgen. Wir haben (nahezu) willkürlich festgelegt, dass dies in der Verantwortung des Empfängers liegt.

Alle regulären Nachrichten bestehen aus einem 32 Bit langen Nachrichtenkopf, der Markierung, dem Text und der Auffüllung. Die Markierung ist eine (möglicherweise leere) Folge von Nullen, gefolgt von einer 1; die Auffüllung ist eine 1, gefolgt von einer (möglicherweise leeren) Folge von Nullen.

Eine reguläre Nachricht, die über den Steuerlink (Link 1) gesendet wird, heißt Steuernachricht. Ihr Text besteht aus einer ganzzahligen (möglicherweise null betragenden) Anzahl von Steuerbefehlen in der unten beschriebenen Form, und dieser Text muss an einer Befehlsgrenze enden.

Die Befehle zum Herstellen einer Verbindung sind STR und RTS. Der STR-Befehl wird von einem künftigen Sender an einen künftigen Empfänger gesendet. Sein Feld <my socket> enthält einen Sendesocket, der lokal beim künftigen Sender liegt; sein Feld <your socket> enthält einen Empfangssocket, der lokal beim künftigen Empfänger liegt. Der RTS-Befehl ist das Gegenstück dazu, enthält aber zusätzlich ein Feld <link> für die Link-Zuweisung. Diese beiden Befehle werden als Verbindungsanforderungen (RFC) bezeichnet. Ein STR und ein RTS passen zusammen, wenn das Feld <my socket> des einen mit dem Feld <your socket> des anderen übereinstimmt und umgekehrt. Eine Verbindung ist hergestellt, sobald ein zusammenpassendes Paar von RFCs ausgetauscht wurde.

Hosts dürfen zu keinem lokalen Socket mehr als eine Verbindung herstellen. Daher darf ein Host einen Socket nicht für das Feld <my socket> eines RFC verwenden, wenn dieser Socket in einem früheren RFC genannt wurde und die Verbindung noch nicht beendet ist.

Der Befehl zum Beenden einer Verbindung ist CLS. Jede Seite muss einen CLS-Befehl senden und empfangen, bevor eine Verbindung vollständig beendet ist und die Sockets für andere Verbindungen frei sind. Es ist nicht erforderlich, dass beide RFCs ausgetauscht wurden, bevor eine Verbindung beendet wird. Weitere Einzelheiten zur Beendigung folgen weiter unten.

Nachdem eine Verbindung hergestellt ist, sendet der empfangende Host einen ALL-Befehl, der der Verbindung Speicher zuteilt. Der Sender verfolgt, wie viel Speicher beim empfangenden Host verfügbar ist, und überträgt nicht mehr Text, als der empfangende Host annehmen kann, wie oben erläutert. Zudem hindert der lokale IMP einen Sender daran, eine Nachricht über eine Verbindung zu senden, bevor das RFNM der vorherigen Nachricht eingegangen ist.

Nachdem eine Verbindung hergestellt ist, haben CLS-Befehle von Empfänger und Sender leicht unterschiedliche Wirkungen. Ein vom Sender gesendeter CLS-Befehl zeigt an, dass keine weiteren Nachrichten über die Verbindung gesendet werden. Dieser Befehl darf nicht gesendet werden, solange sich eine Nachricht auf der Verbindung in Übertragung befindet.

Vom Empfänger gesendete CLS-Befehle wirken als Aufforderung an den Sender, die Übertragung zu beenden. Da der CLS-Befehl den Sender jedoch erst mit Verzögerung erreicht, muss der Empfänger damit rechnen, dass sich seine Puffer bis zu der in den ALL-Befehlen zugeteilten Grenze füllen.

Solange eine Verbindung besteht, kann jede Seite INR- oder INS-Befehle senden. Die Interpretation dieser Befehle ist eine lokale Angelegenheit, im Allgemeinen werden sie jedoch eine Ausstiegsfunktion bereitstellen.

Beachten Sie, dass die Befehle ALL, INR und INS nur gesendet werden dürfen, nachdem die Verbindung hergestellt ist und bevor ein CLS-Befehl gesendet wurde.

Eine sehr einfache Testmöglichkeit bieten die Befehle ECO und ERP. Beim Empfang eines ECO-Befehls muss ein Host die ersten acht Bits in ERP ändern und ihn zurücksenden. Diese Befehle stehen in keinem Zusammenhang mit Verbindungen.

Ein NOP-Befehl ist der Einfachheit halber enthalten. Er ist als null codiert, um den Aufbau von Befehlsnachrichten zu erleichtern.

Schließlich gibt es einen ERR-Befehl, um einem fremden Host mitzuteilen, dass er (anscheinend) einen Fehler gemacht hat. Derzeit ist weder eine konkrete Fehlerliste noch eine Reaktion auf den Empfang von ERR-Befehlen definiert. Hosts sollten ERR-Befehle beim Empfang protokollieren, damit Systemprogrammierer das Problem diagnostizieren können. Ein Host kann jederzeit und aus beliebigem Grund einen ERR-Befehl erzeugen, es wird jedoch empfohlen, dass jeder Host eine vollständige Liste der ERR-Befehle, die er senden kann, samt ihrer Interpretation veröffentlicht.

Netzwerk-Steuerbefehle​

Im Folgenden werden Struktur und Format jedes einzelnen Steuerbefehls ausführlich beschrieben.

Um die Beschreibung der Sockets zu erleichtern und zu verdeutlichen, gelten folgende Konventionen:

<my socket> und <your socket> werden in den Befehlsbeschreibungen verwendet.

<my socket> liegt lokal beim Urheber des Befehls.

<your socket> liegt lokal beim Empfänger des Befehls.

Formate der Steuerbefehle​

Keine Operation​

                      _______
| |
| NOP |
|_______|

Verbindungsanforderung, Empfänger an Sender​

                      ______________________________________________
| | | | |
| RTS | my socket | your socket | link |
|_______|_____________|_______________|________|

Verbindungsanforderung, Sender an Empfänger​

                      _____________________________________
| | | |
| STR | my socket | your socket |
|_______|_____________|_______________|

Schließen​

                      _____________________________________
| | | |
| CLS | my socket | your socket |
|_______|_____________|_______________|

Zuteilen​

                      __________________________
| | | |
| ALL | link | space |
|_______|________|_________|

Interrupt, gesendet vom empfangenden Prozess​

                      _______________
| | |
| INR | link |
|______|________|

Interrupt, gesendet vom sendenden Prozess​

                     _______________
| | |
| INS | link |
|______|________|

Echo-Anforderung​

                     ____________________________   _________
| | \ \ |
| ECO | length / / text |
|_______|____________________\ \________|

Echo-Antwort​

                     ____________________________   _________
| | \ \ |
| ERP | length / / text |
|_______|____________________\ \________|

Fehler erkannt​

                     ____________________________   _________
| | \ \ |
| ERR | length / / text |
|_______|____________________\ \________|

Der Host wird im Nachrichtenkopf angegeben.

<link> umfasst 8 Bit

<space> ist 32 Bit lang und eine vorzeichenlose Ganzzahl.

<length> ist eine vorzeichenlose 16-Bit-Ganzzahl.

<text> ist so lang wie <length>. Der Befehl ist daher 24 Bit länger als <length>. Die maximale Länge beträgt eine Nachricht, um die Decodierung und Verarbeitung der Befehle zu erleichtern.

Alle Steuerbefehlscodes sind 8 Bit lang:

             NOP = 0
RTS = 1
STR = 2
CLS = 3
ALL = 4
INR = 5
INS = 6
ECO = 7
ERP = 8
ERR = 9

<my socket> und <your socket> sind 32 Bit lang,

                     _______________________
| | |
| User number | AEN |
|_______________|_______|

24 Bit für die Benutzernummer und 8 Bit für die AEN.