2. HOST-HOST-Prozeduren
2.1 Allgemeines
Die Grundidee ist, dass mehrere Benutzer an einem gegebenen HOST gleichzeitig das Netzwerk nutzen können sollen, indem sie seine physischen Einrichtungen im Timesharing verwenden.
Dies bedeutet, dass innerhalb jedes HOST-Betriebssystems ein spezielles Programm existieren muss, das die ausgehenden Nachrichten der Benutzer in das Netzwerk multiplext und die eingehenden Nachrichten an die entsprechenden Benutzer verteilt. Wir nennen dieses spezielle Programm das Netzwerkprogramm.
2.2 Links und Verbindungen (siehe Abbildung 1)
2.2.1 Definitionen
Es ist zweckmäßig, das Netzwerk als Blackbox zu betrachten - ein System, dessen Verhalten bekannt ist, dessen Mechanismen aber nicht -, um Nachrichten zwischen entfernten Benutzern und nicht zwischen Paaren von HOST-Rechnern zu übermitteln.
(a) Logische Verbindungen
Wir definieren eine logische Verbindung als einen Kommunikationspfad, der zwei Benutzer an entfernten HOST[s] verbindet.
Mit diesem Konzept kann ein Benutzer (Benutzerprogramm) in einem HOST-Rechner (1) mehrere logische Verbindungen zu beliebigen entfernten HOST-Benutzern aufbauen und (2) Nachrichten über diese Verbindungen senden oder empfangen.
Verbindungen erscheinen den Benutzern als Vollduplex.
Einer der Zwecke des Netzwerkprogramms ist es, den Benutzern beim Aufbauen, Identifizieren und Aufrechterhalten dieser Verbindungen zu dienen.
(b) Logische Links
Jede logische Verbindung besteht aus einem Paar gerichteter Links: einer zum Senden, der andere zum Empfangen.
Diese Links, logische Links genannt, werden von den Netzwerkprogrammen aufgebaut und von ihnen verwendet.
Beachten Sie hier, dass Benutzer nur an Verbindungen interessiert sind und sich der Links überhaupt nicht bewusst sind. Die Beziehungen zwischen Links und Verbindungen werden vom Netzwerkprogramm hergestellt.
Einer der Vorteile, eine Verbindung als ein Paar gerichteter Links zu definieren, ist, dass ein HOST die Fähigkeit hat, sich über seinen IMP selbst zu schleifen (er öffnet eine Verbindung zu sich selbst). Diese Eigenschaft kann für Debugging-Zwecke nützlich sein.
Im weiteren Verlauf dieser Arbeit werden wir das Attribut logisch nicht mehr verwenden, wenn wir uns auf Links oder Verbindungen beziehen.
2.2.2 Verbindungstypen
Um eine hohe Flexibilität bei der Nutzung des Netzwerks zu erreichen, ist es von Vorteil, die Verbindungen zu klassifizieren.
Es werden drei Arten von Verbindungen unterschieden: (a) Steuerverbindung, (b) Primärverbindung und (c) Hilfsverbindung.
(a) Steuerverbindung
Diese Verbindung hat einen besonderen Status und ist zwischen einem Paar von HOST[s] eindeutig, d. h., wenn das Netzwerk x HOST[s] umfasst, gibt es höchstens x von einem HOST ausgehende Steuerverbindungen.
Diese Verbindung wird von entfernten Netzwerkprogrammen verwendet, um Steuernachrichten hin und her zu übermitteln. Steuernachrichten sind grundlegend für den Aufbau/Abbau von Standardverbindungen. (Siehe 2.4.2)
Beachten Sie hier, dass diese Steuerverbindung die einzige Verbindung ist, die nicht von den HOST-Benutzern verwendet wird.
Beschreiben wir nun die Standardverbindungen.
(b) Primärverbindung
Diese Verbindungen verbinden entfernte Benutzer.
Eine Primärverbindung:
- Ist zwischen einem Paar von Benutzern eindeutig und wird als erste aufgebaut.
- Ist "fernschreiberartig", d. h.:
- ASCII-Zeichen werden übertragen;
- Echos werden vom entfernten HOST erzeugt;
- Die empfangenden HOST[s] suchen nach Break-Zeichen;
- Die Übertragungsrate ist langsam (weniger als 20 Zeichen/s).
- Wird hauptsächlich zum Übertragen von Steuerbefehlen verwendet, z. B. zum Anmelden bei einem entfernten HOST-Betriebssystem.
(c) Hilfsverbindung
Diese Verbindungen verbinden ebenfalls entfernte Benutzer:
Eine Hilfsverbindung:
- Wird parallel zu einer Primärverbindung geöffnet und ist nicht eindeutig, d. h., zwischen Benutzern können mehrere Hilfsverbindungen aufgebaut werden.
- Wird zum Übertragen großer Datenmengen verwendet (dateiorientiert).
- Wird entweder für binäre Übertragung oder für Zeichenübertragung verwendet.
[Abbildung 1 - Links und Verbindungen - siehe PDF-Datei]
2.3 Nachrichtenstruktur
Die HOST[s] kommunizieren miteinander über Nachrichten. Eine Nachricht kann in ihrer Länge bis zu 8095 Bit variieren (siehe weiter unten die Struktur). Größere Übertragungen müssen daher von HOST-Benutzern in eine Folge solcher Nachrichten aufgeteilt werden.
Eine Nachrichtenstruktur ist in Abbildung 2 dargestellt.
Sie umfasst Folgendes:
(1) Einen Kopf (32 Bit): Nachrichtentyp, Quell-/Ziel-HOST, Link-Nummer. (Siehe BBN-Bericht Nr. 1822, S. 13, 17)
(2) Eine Markierung (32 Bit, wenn von der Sigma 7 gesendet) zum Beginnen eines Nachrichtentextes an einer Wortgrenze. (Siehe BBN-Bericht Nr. 1822, S. 17, 19)
(3) Den Nachrichtentext (max.: 8015 Bit für die Sigma 7). Er besteht größtenteils aus dem Text des Benutzers. Er kann jedoch auch Informationen zur Verwendung durch die Netzwerkprogramme darstellen. (Steuernachrichten, siehe 2.4.2)
(4) Eine Prüfsumme (16 Bit). Ihr Zweck ist es, auf der HOST-Ebene die korrekte Übertragung einer Nachricht zu prüfen. (Änderungen im Bitmuster oder Paketvertauschung; Pakete sind im BBN-Bericht Nr. 1763, S. 13 definiert) Siehe weiter unten zur Prüfsummenberechnung.
(5) Eine Auffüllung zum Lösen von Problemen mit unterschiedlicher Wortlänge. (Siehe BBN-Bericht Nr. 1822, S. 17, 19.). Was die Software betrifft, so ist die Auffüllung nur beim Nachrichtenempfang beteiligt, um das Ende einer Nachricht abzugrenzen. (Bei der Übertragung kümmert sich die Hardware um die Auffüllung.)
Anmerkung:
Prüfsummenberechnung:
Die letzten 16 Bit jeder von einem HOST gesendeten Nachricht sind eine Prüfsumme. Diese Prüfsumme wird über die gesamte Nachricht einschließlich einer etwaigen Markierung, jedoch unter Ausschluss des 32-Bit-Kopfes und einer etwaigen Auffüllung berechnet. Zur Berechnung der Prüfsumme:
- Betrachten Sie die Nachricht als mit Nullen auf eine Länge von 8640 Bit aufgefüllt.
- Unterteilen Sie die 8640 Bit in sechs 1440-Bit-Segmente, S0, S1...S5.
- Unterteilen Sie jedes 1440-Bit-Segment S in 90 16-Bit-Elemente, T0, T1...T89.
- Definieren Sie eine Funktion [(+)], die zwei 16-Bit-Elemente als Eingaben nimmt und ein 16-Bit-Element ausgibt. Diese Funktion ist definiert durch
Tm [(+)] Tn = Tm [(+)] Tn, falls Tm + Tn < 2[exp 16]
Tm [(+)] Tn = Tm [(+)] Tn - 2[exp 16] + 1, falls Tm + Tn >= 2[exp 16]
- Berechnen Sie für jedes 1440-Bit-Segment Si Ci = K(Si), wobei
K(S) = T0 [(+)] T1 + ..... T89
- Berechnen Sie C = C0[(+)]C1[(+)]C1[(+)]C2[(+)]C2[(+)]C2[(+)]C2....[(+)]C5
(Beachten Sie, dass C1[(+)]C1 einfach C1 um ein Bit nach links rotiert ist)
Die Zahl C ist die Prüfsumme. Der Grund, warum die Ci um i Bit rotiert werden, ist das Erkennen von Paketvertauschung.
[Abbildung 2 - Format einer von der Sigma 7 gesendeten Nachricht - siehe PDF-Datei]
2.4 Benutzertransaktionen
Nach dem, was bisher erörtert wurde, erscheint das Netzwerk einem Benutzer als eine Ansammlung von Verbindungen. Erklären wir nun, wie man diese Verbindungen nutzen kann.
Zuerst beschreiben wir die Menge von Transaktionen, auf die ein Benutzer zugreifen können sollte, um die Verbindungseinrichtungen zu nutzen.
Dann erklären wir die Rolle des Netzwerkprogramms bei der Ausführung dieser Transaktionen. Dies umfasst ein HOST-HOST-Protokoll, bei dem Steuernachrichten zwischen Netzwerkprogrammen ausgetauscht werden.
Zu Erklärungszwecken werden diese Transaktionen auf der Benutzerebene in Form von Unterprogrammaufrufen und Parametern dargestellt. Dies bedeutet jedoch keineswegs, dass die Implementierung diesem Muster genau folgen wird. (Wir befassen uns hier mehr mit der Beschreibung als mit dem Implementierungsaspekt, siehe Kapitel 3.)
2.4.1 Liste der Transaktionen
Nachfolgend sind die Beschreibungen von Unterprogrammen aufgeführt, die dem Benutzer zum Erstellen/Abbauen von Verbindungen und zum Senden/Empfangen von Daten über sie zur Verfügung stehen könnten. Diese Menge von Unterprogrammen kann als eine Art Schnittstelle zwischen der Benutzerebene und der Ebene des Netzwerkprogramms betrachtet werden.
(a) Primärverbindung öffnen:
OPENPRIM (CONNECTID, HOSTID, BUFFADDR, [OPT]) CONNECTID: Verbindungsidentifikation # HOSTID: Identifikation des entfernten HOST # BUFFADDR: Pufferadresse für eingehende Nachrichten. OPT: Optionen wie eine nach erfolgreichem Verbindungsaufbau erforderliche Nachricht, "vollständiges Echo" (jede Nachricht wird vom entfernten HOST zu Prüfzwecken zurückgesendet) usw.
Anmerkung: [ ] bedeutet optional
(b) Hilfsverbindung öffnen
OPENAUX (CONNECTID, BUFFADDR, N, [OPT]) CONNECTID: Verbindungsidentifikation #, d. h. die Identifikation der entsprechenden Primärverbindung (zuerst muss ein Benutzer eine Primärverbindung öffnen). BUFFADDR: Gleiche Bedeutung wie oben. N: Anzahl der Hilfsverbindungen, die geöffnet werden sollen. OPT: Gleiche Bedeutung wie oben.
(c) Übertragung über eine Verbindung
TRANSM (CONNECTID, NO, BUFFADDR, N, [OPT]) CONNECTID: Verbindungsidentifikation # NO: Verbindung #. Die Primärverbindung wird stets als NO=0 bezeichnet. Eine Hilfsverbindungsnummer entspricht der Reihenfolge, in der sie aufgebaut wurde. (Die erste geöffnete Hilfsverbindung wird mit NO=1 bezeichnet, die zweite mit NO=2 usw.) BUFFADDR: Pufferadresse der zu sendenden Nachricht. N: Nachrichtengröße (Byte-Anzahl) OPT: Optionen wie Datentyp (Zeichen vs. binär), Trace-Bit usw.
(d) Verbindung schließen
CLOSE (CONNECTID, [N], [NO]) CONNECTID: Verbindungsidentifikation #. N: Anzahl der zu schließenden Verbindungen. Wird sie weggelassen, werden alle vom Benutzer verwendeten Verbindungen, einschließlich des primären Links, geschlossen. NO: Falls N von null verschieden ist, gibt diese Zahl die zu schließende Hilfsverbindung # an.
2.4.2 HOST-HOST-Protokoll und Steuernachrichten
Das HOST-HOST-Protokoll wird von den Netzwerkprogrammen ausgeführt. Es umfasst hauptsächlich die Ausführung der vorhergehenden Transaktionen (von Benutzern initiiert) und beinhaltet einen HOST-HOST-Dialog.
Dieser Dialog erfüllt Steuerprozeduren zum Öffnen oder Abbauen von Verbindungen und besteht im Austausch von Steuernachrichten über den Steuerlink. Eine Steuernachricht hat eine Struktur, die mit der einer regulären Nachricht identisch ist; sie unterscheidet sich von dieser nur durch den Text, der zur Verwendung durch Netzwerkprogramme anstelle von Benutzern bestimmt ist.
Wir betonen, dass diese Steuerprozedur völlig unabhängig von den in den IMP-Rechnern implementierten Übertragungssteuerprozeduren ist. Wir befinden uns hier auf der HOST-Ebene (Netzwerkprogramme), und daher werden die unten beschriebenen Steuernachrichten wie reguläre Nachrichten über die IMP[s] übertragen.
Betrachten Sie nun die vorhergehenden Transaktionen und beschreiben Sie für jede von ihnen, welche Nachrichten über welche Links ausgetauscht werden. Jeder Fall wird anhand einfacher Beispiele erklärt.
Wir nehmen an, dass ein Benutzer von HOST(x) ein entferntes HOST(y)-Programm namens URSA ansprechen möchte.
(a) Eine Primärverbindung öffnen: (OPENPRIM)
Das Netzwerkprogramm von HOST (x), von einem Benutzer zum Öffnen einer Primärverbindung aufgeweckt (siehe 3.3), beginnt einen Dialog mit dem Netzwerkprogramm von HOST (y).
(i) HOST(x) sendet die folgende Steuernachricht:
HOST(x) Control link HOST(y)
-------------------->
ENQ PRIM 0 1 2
ENQ: Anfrage zum Verbindungsaufbau (ein ASCII-Zeichen) PRIM: Verbindungstyp: primär (ein spezielles Zeichen) 0 1 2: Ausgehender Link #. Es ist eine Dezimalzahl (3 ASCII-Zeichen), z. B. Link #12.
Dieser Link # wurde vom Netzwerkprogramm von HOST(x) bestimmt (siehe Implementierung: 3.3)
(ii) HOST(y) bestätigt, indem es die folgende Steuernachricht zurücksendet:
HOST(x) Control link HOST(y)
<------------------------
ACK ENQ PRIM 0 1 2 0 1 5
ACK: Positive Bestätigung (ein ASCII-Zeichen) ENQ PRIM 0 1 2: Gleiche Bedeutung wie oben. Dieser Teil der Nachricht wird zu Prüfzwecken zurückgesendet. 0 1 5: Eingehender Link #. Er folgt demselben Muster wie der ausgehende Link #. Dieser Link # wurde vom Netzwerkprogramm von HOST(y) bestimmt.
Nun ist die Verbindung aufgebaut; sie wird die Links #12 und 15 zum Austausch von Benutzernachrichten verwenden. Die Verbindung befindet sich im Zustand vor der Anmeldung, d. h., der entfernte HOST(y) erwartet seine Standard-Anmeldeprozeduren.
(b) Übertragung über die Primärverbindung: (TRANSM)
Mithilfe von TRANSM-Unterprogrammen, die sich auf die Primärverbindung beziehen, kann sich der Benutzer von HOST(x) beim Betriebssystem von HOST(y) anmelden und dann das Programm URSA (Benutzerprogramm von HOST(y)) aufrufen.
Die Netzwerkprogramme an beiden Enden verwenden die Links #12 und #15 zum Weiterleiten von Nachrichten. Diese Nachrichten sind Standardnachrichten, deren Inhalte der Anmeldesequenz dienen.
Ein einfaches Beispiel könnte sein:
HOST(x) Prim. Link #12 HOST(y)
---------------------------->
! S I G N - I N : X X
HOST(x) Prim. Link #15 HOST(y)
<--------------------------
! ! R E A D Y
HOST(x) Prim. Link #12 HOST(y)
---------------------------->
! U R S A
(c) Eine Hilfsverbindung öffnen: (OPENAUXI)
In sehr ähnlicher Weise wie in (a) wird eine Hilfsverbindung zwischen HOST(x) und HOST(y) aufgebaut. Zu diesem Zweck werden Steuernachrichten über den Steuerlink ausgetauscht.
HOST(x) Control link HOST(y)
------------------------------>
ENQ AUX 0 2 5
HOST(x) Control link HOST(y)
<--------------------------------
ACK ENQ AUX 0 2 5 0 2 1
Nun ist die Hilfsverbindung aufgebaut; sie wird die Links #25 und 21 zum Austausch von Standardnachrichten verwenden.
(d) Übertragung über die Hilfsverbindung: (TRANSM)
Mithilfe von TRANSM-Unterprogrammen, die sich auf die Hilfsverbindung beziehen, können die Benutzer an beiden Enden Daten austauschen:
HOST(x) Aux. Link #25 HOST(y)
-------------------------------->
X X ..... X X
HOST(x) Aux. Link #21 HOST(y)
<--------------------------------
X ......... X
usw.......
(e) Verbindungen schließen: (CLOSE)
Dies wird in ähnlicher Weise wie in (a) ausgeführt. Der Benutzer ruft ein CLOSE-Unterprogramm auf, und dann tauschen die Netzwerkprogramme an beiden Enden Steuernachrichten aus.
HOST(x) Control Link HOST(y)
----------------------------->
EOT 0 0 1 0 1 2
EOT: Ende der Übertragung (ein ASCII-Zeichen) 0 0 1 : Anzahl der zu schließenden Verbindungen (3 dezimale ASCII-Zeichen) 0 1 2 : Zu schließender ausgehender Link #.
Dann bestätigt HOST(y) zurück wie in (a).
HOST(x) Control Link HOST(y)
<-----------------------------
ACK EOT 0 0 1 0 1 2 0 1 5
Anmerkung 1 - In (a), (c) und (e) kann HOST(y) eine Nachricht zurücksenden, die anstelle von ACK ein negatives Bestätigungszeichen NAK enthält. Dies aus vielen verschiedenen Gründen wie: falsche Reihenfolge, Verbindung bereits geöffnet und so weiter. Die Nachricht könnte NAK IND sein, wobei IND ein alphanumerisches Zeichen ist, das in codierter Form angibt, warum der vorhergehende Block abgelehnt wurde. Beim Empfang solcher Bestätigungen wiederholt HOST(x) seine Nachricht, bis HOST(y) sie akzeptiert. Eine Notfallprozedur tritt in Kraft, wenn zu viele aufeinanderfolgende "NAK-Nachrichten" auftreten.
Anmerkung 2 - In jeder der obigen Darstellungen (Pfeile) ist nur der Nachrichtentext dargestellt. Tatsächlich werden über diese Links vollständige Nachrichten (mit Kopf, Markierung, Auffüllung ...) ausgetauscht.