Allgemeine Beschreibung
Nach unserer Vorstellung verfügt jeder Host über einen Satz von vier Programmen, mit denen ein Benutzer-Fernschreiber mit einem fremden Monitor kommunizieren kann. Die genaue Implementierung dieser Programme hängt stark von der jeweiligen Installation ab. Daher sollen alle Erläuterungen funktionale Eigenschaften beschreiben und nicht das Design.
Diese vier Programme treten in zwei Paaren „männlich/weiblich“ auf. Ein Benutzer verwendet auf seinem Standort einen Sende-Logger, um mit dem Empfangs-Logger am passenden fremden Standort zu kommunizieren und so eine Vollduplex-Verbindung zwischen dem Fernschreiber des Benutzers und dem Monitor der fremden Maschine aufzubauen. Dadurch befindet er sich in einem Zustand, der dem einer bereits angemeldeten Sitzung auf der anderen Maschine entspricht. Nachdem die Verbindung aufgebaut ist, treten die beiden Logger ab, und der Benutzer spricht mit einem Sender in seiner Maschine, dessen Hauptaufgabe darin besteht, die Eingaben des Benutzer-Fernschreibers entgegenzunehmen und sie über die von den Loggern aufgebaute Verbindung an den Empfänger im fremden Host zu senden, der sie an seinen Monitor weiterleitet (und sie wie Eingaben von einem lokalen Fernschreiber erscheinen lässt). Antworten des fremden Monitors werden von diesem an den Empfänger gegeben, der sie über die Verbindung an den Sender zurückschickt, welcher sie auf dem Fernschreiber des Benutzers ausgibt. Sender und Empfänger müssen in jeder Maschine entweder in mehreren Exemplaren existieren, eines für jeden Netzbemutzer, oder es muss ein einziges Exemplar geben, das alle Netzbemutzer bedienen kann. Die Logger hingegen müssen nur jeweils einen Benutzer bedienen können, da ihre Aufgabe schnell erledigt ist und sie danach frei sind, andere Anforderungen zu erfüllen. Es sollte jedoch eine Möglichkeit geben, Anforderungen, die nicht sofort erfüllt werden können, in eine Warteschlange zu stellen. Eine weniger befriedigende Alternative wäre, jedem Benutzer, der den Logger während seiner Belegung verwenden möchte, eine Besetzt-Meldung zurückzugeben. (Dies schließt natürlich nicht aus, dass eine Installation einen wiedereintrittsfähigen Logger oder mehrere Exemplare des Loggers besitzt.)
Der Empfangs-Logger sollte in jeder Maschine Benutzer null sein und stets auf Socket null lauschen. (Dasselbe lässt sich erreichen, indem der NCP alle Nachrichten an Benutzer null, Socket null abfängt und sie an den Empfangs-Logger weiterleitet; es ist jedoch einfacher und sauberer, wenn der Logger tatsächlich Benutzer null ist und der NCP seine Nachrichten wie die aller anderen behandelt.)
Wenn der Sende-Logger aufgerufen wird, entnimmt er einem Pool freier Sockets ein Paar unbenutzter Sockets (2N und 2N+1) und führt ein CONNECT von 2N+1 zu Benutzer 0, Socket 0 des gewünschten fremden Hosts aus. Dadurch wird der Empfangs-Logger aktiviert, der die Verbindung annimmt, wenn ein Platz für den fremden Fernschreiber verfügbar ist. Anschließend schließt er diese Verbindung sofort, damit Verbindungen von anderen Quellen aufgebaut werden können. Ist dagegen kein Platz für den fremden Fernschreiber vorhanden (oder möchte der Empfangs-Logger aus einem anderen Grund keine Verbindung aufnehmen), wird der Verbindungsversuch zu Socket null abgelehnt. Dies teilt dem Sende-Logger mit, dass er sich nicht am fremden Host anmelden kann, und dieser unterrichtet den Benutzer darüber. Es gibt jedoch keine Garantie, dass das Schließen tatsächlich vom fremden Logger gesendet wurde. Es könnte auch vom NCP gesendet worden sein, wenn beispielsweise die Warteschlange der ausstehenden Aufrufe für diesen Socket überlastet war.
Wenn die Verbindung zu Socket null angenommen wurde (was anzeigt, dass der Empfangs-Logger die Anforderung erfüllen kann), wählt der Empfangs-Logger nach dem Schließen dieser Verbindung ein verfügbares Socket-Paar (2M und 2M+1) aus seinem Pool und verbindet von 2M+1 nach 2N. (Die Identität von 2N erfuhr er, als sein Lauschen durch die Verbindung mit 2N+1 beantwortet wurde.) Der Sende-Logger hat in der Zwischenzeit auf Socket 2N gelauscht, nimmt die Verbindung nun an und führt ein CONNECT von 2N+1 nach 2M aus. Der Empfangs-Logger hat auf diesem Socket gelauscht und nimmt den Verbindungsversuch an.
Zu diesem Zeitpunkt besteht eine Vollduplex-Verbindung zwischen den beiden Loggern. Sie aktivieren daraufhin Sender und Empfänger, die die gesamte übrige Kommunikation zwischen dem Benutzer und dem fremden Monitor abwickeln. (Sender und Empfänger können Teil der Logger sein oder von ihnen aufgerufen werden usw.)
Wenn der Benutzer fertig ist und zu seinem Monitor zurückkehrt, obliegt es dem Sender, die Verbindungen zu schließen. Auf der Empfängerseite wäre es sehr wünschenswert, dass der NCP den Empfänger darüber unterrichtet, damit dieser den Benutzer abmelden (falls dieser das nicht selbst getan hat) und alle von ihm genutzten Ressourcen freigeben kann.
Ein formellerer Abriss des im obigen Szenario beschriebenen vorgeschlagenen Protokolls folgt:
-
Stabiler Zustand: Der Empfangs-Logger im fremden Host lauscht auf Benutzer 0, Socket 0.
-
Der lokale Benutzer ruft den Sende-Logger auf.
-
Der Sende-Logger ruft CONNECT (port, 2N+1, <foreign host#,0,0>) auf.
-
Der Sende-Logger ruft LISTEN (port, <local host#, user#, 2N>) auf.
-
Das LISTEN des fremden Loggers wird beantwortet, und ihm werden lokale Benutzernummer, Host und #2N+1 mitgeteilt.
-
Der fremde Logger sucht verfügbare Sockets (2M und 2M+1). Wenn sie vorhanden sind und er die Verbindung aufbauen kann, nimmt er sie an und schließt die Verbindung sofort.
-
Der fremde Logger ruft CONNECT (port, 2M+1, <local host#, user#, 2N>) auf.
-
Der fremde Logger ruft LISTEN (port, <local host#, user#, 2M>) auf.
-
Der Sende-Logger hat auf 2N gelauscht und nimmt die Verbindung an, dann ruft er CONNECT (port, 2N+1, <foreign host#, user#,2M>) auf.
-
Der Empfangs-Logger, der auf 2M lauscht, nimmt die Verbindung an.
-
Die Logger aktivieren die passenden Handler.
-
Wenn der Benutzer fertig ist, schließt der Sender beide Verbindungen.
Diese grundlegende Methode zum Aufbau einer Vollduplex-Verbindung sollte im gesamten Netz standard sein. Die Art und Weise, wie jede Installation die Implementierung von Sender, Empfänger und den beiden Loggern handhabt, ist für das Netz ohne Belang und hängt stark von der Maschine ab. (Sogar die Notwendigkeit eines Senders und eines Empfängers hängt von der Maschine ab, da einige Mitglieder des Netzes ihre Funktionen möglicherweise auf andere Weise erfüllen können.) Jedoch müssen gewisse Konventionen für die Kommunikation zwischen Sender und Empfänger oder deren Äquivalenten festgelegt werden.