- Three way handshake
-
Der Drei-Wege-Handshake ist ein Verfahren zum Aufbau verlustfreier Datenübertragungen zwischen zwei Instanzen. Obwohl überwiegend in der Netzwerktechnik verwendet, ist der Drei-Wege-Handshake nicht darauf beschränkt.
Inhaltsverzeichnis
Das Zwei-Armeen-Problem
Beim Transport von Nachrichten benötigen die teilnehmenden Instanzen eine Möglichkeit sicherzustellen, dass die von ihnen kontaktierte Instanz die Nachricht erhalten hat. Die sendende Instanz möchte also eine Bestätigungsantwort, wenn die Nachricht angekommen ist. Die Probleme, die hier auftreten können, wenn das Kommunikationsmedium nicht zuverlässig ist, werden anhand des Zwei-Armeen-Problems näher erläutert:
Man denke sich zwei Armeen A und B, wobei Armee A stärker ist als Armee B. Armee A ist aber auf zwei Teile A1 und A2 aufgespalten, jeder dieser Teile kann Armee B alleine nicht schlagen. A1 und A2 müssen also gleichzeitig angreifen, um zu gewinnen. Es ist daher notwendig, den genauen Angriffszeitpunkt vor dem Angriff per Boten festzulegen. A1 schickt also eine Nachricht mit dem Angriffszeitpunkt an A2. Der einzige Weg von A1 zu A2 führt jedoch durch das Gebiet von B. A1 benötigt eine Bestätigung, dass die Nachricht bei A2 angekommen ist, da A1 sich sicher sein muss, dass A2 auch über den Angriffszeitpunkt in Kenntnis gesetzt wurde. Dabei ergeben sich folgende zwei Problemstellungen:
- A1 sendet Nachricht an A2, der Bote wird jedoch schon im Lager von B abgefangen. A1 weiß also nicht, ob die ursprüngliche Nachricht abgefangen wurde, oder nur die Bestätigungsantwort von A2.
- A1 sendet Nachricht an A2, der Bote wird aber bei der Bestätigungsantwort von A2 im Lager von B abgefangen. A2 kann also auch nicht sicher sein, dass die Bestätigungsantwort bei A1 eingetroffen ist.
Beide Teilarmeen können also nie sicher sein, dass ihre Nachricht bei der jeweils anderen Armee eingetroffen ist, da auch die Bestätigungsantworten nicht zuverlässig transportiert werden können und A1 und A2 sich auch die Bestätigungsantworten bestätigen lassen müssten.
Der Drei-Wege-Handshake
In der Nachrichtentechnik tritt dieses Problem immer dann auf, wenn zwischen den Kommunikationspartnern ein unsicherer Übertragungskanal vorliegt.
Das 2-Armeen-Problem ist unlösbar. Man müsste unendlich oft die „Bestätigung bestätigen“, um sicher sein zu können, dass der Empfänger die Nachricht auch erhalten hat. Da das unrealistisch ist, muss man beim Betrieb eines Kommunikationssystems durch geeignete Maßnahmen mit dem möglichen Paketverlust umgehen.
Besonders kritisch ist das Problem beim Verbindungsaufbau, da die Kommunikationspartner anfangs noch nicht voneinander wissen, sie also insbesondere noch keine Vorkehrungen zur Übertragungswiederholung (Timeouts usw.) getroffen haben.
Man wählt daher oft ein dreistufiges Verfahren zum Verbindungsaufbau, den so genannten Drei-Wege-Handshake. Diesen kann man sich wie eine Terminvereinbarung per E-Mail vorstellen. Möchte Anton sich mit Berta verabreden, werden folgende Nachrichten ausgetauscht:
- Anton schickt Berta einen Terminvorschlag
- Berta schickt Anton eine Bestätigung des Termins
- Anton schickt Berta eine Bestätigung, dass er Bertas Bestätigung erhalten hat
Schritt 3 ist dabei notwendig, damit Berta weiß, ob Anton die Bestätigung erhalten hat. Nachricht Nummer 2 könnte ja verloren gegangen sein und Berta würde alleine zu dem Treffen erscheinen, da Anton keine Bestätigung erhalten hat.
Anwendungsbereiche
TCP
Der wohl bekannteste Anwendungsbereich des Drei-Wege-Handshake ist die Netzwerktechnik. Ein prominentes Beispiel ist das Protokoll TCP. Es dient dort dem Aufbau und Abbau einer stehenden Verbindung. Eine ausführliche Beschreibung dieses Drei-Wege-Handshakes findet sich im Artikel Transmission Control Protocol.
Asynchrone Busse
Die Signale auf asynchronen Rechnerbussen sind ungetaktet, so dass ein Takt nicht zur Steuerung der Kommunikation zwischen dem Mikroprozessor und unterschiedlichen angeschlossenen Komponenten verwendet werden kann. Daher kommen auch in diesem Bereich einige Varianten des Handshake-Verfahrens zum Einsatz. Das Grundprinzip bleibt dabei weitgehend unverändert.
Ein Beispiel für diese Buskommunikation bietet eine einfache Steuerung des Buszugriffes auf den Systembus. Möchte eine Komponente lesend oder schreibend auf den Systembus zugreifen, so sendet sie ein spezielles Signal (Bus Request) an den Mikroprozessor. Sobald der Prozessor den Bus nicht benötigt, gewährt er der Komponente den Zugriff mittels eines speziellen Antwortsignals (Bus Grant). Die Komponente antwortet auf diese Erlaubnis ihrerseits mit einer Bestätigung (Bus Grant Acknowledge), um dem Prozessor und allen anderen Komponenten anzuzeigen, dass sie die Kontrolle über den Bus übernommen hat. Wie man erkennt, können die Bezeichnungen der einzelnen Nachrichten bei unterschiedlichen Handshake-Verfahren voneinander abweichen.
Ähnliche Verfahren können auch zur Steuerung der Kommunikation auf unterschiedlichen Bussen verwendet werden. Dabei kann das Verfahren teilweise auch mit einer Taktung kombiniert werden. Ein häufiger Fall ist die Koordination von Adress- und Datenbus. Der Prozessor legt hier ein spezielles Signal (Adress Strobe) auf dem Steuerbus an, um zu signalisieren, dass er eine gültige Adresse auf dem Adressbus angelegt hat. Diese Adresse gehört einer Komponente an (es kann sich etwa um Speicher oder um ein Ein-/Ausgabegerät handeln). Mittels einer positiven ACK-Flanke kann diese Komponente den Prozessor darüber informieren, dass sie sich als Adressat erkannt hat. Der Prozessor zieht daraufhin sein Adress Strobe-Signal zurück. Die Komponente kann nun beispielsweise die angeforderten Daten auf den Datenbus schreiben oder auch von dort einlesen. Mittels einer negativen ACK-Flanke kann die Komponente den Abschluss dieses Vorganges mitteilen. Die Art der Kommunikation ist hier aufgrund der drei beteiligten Busse (Steuerbus, Adressbus und Datenbus) etwas komplexer, aber das Grundprinzip des Drei-Wege-Handshake ist dennoch auch hier erkennbar.
Wikimedia Foundation.