# Drei-Wege-Handschlag

Der Drei-Wege-Handschlag (wörtlich aus englisch Three-Way-Handshake) ist ein Verfahren zum Aufbau verlustfreier Datenübertragungen zwischen zwei Instanzen. Obwohl überwiegend in Computernetzen verwendet, ist der Drei-Wege-Handschlag nicht darauf beschränkt.

## 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 Antwort zur Bestätigung, dass 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-Handschlag

In der Nachrichtentechnik tritt dieses Problem immer dann auf, wenn zwischen den Kommunikationspartnern ein unzuverlässiger Übertragungskanal vorliegt.
Das Zwei-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 und auch zu keinem Ende führen würde, 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-Handschlag. Diesen kann man sich wie eine Terminvereinbarung per E-Mail vorstellen. Möchte Alice sich mit Bob verabreden, werden folgende Nachrichten ausgetauscht:
* Alice schickt Bob einen Terminvorschlag;
* Bob schickt Alice eine Bestätigung des Terminvorschlags inkl. seines Terminvorschlags;
* Alice schickt Bob eine Bestätigung, dass sie Bobs Bestätigung und Terminvorschlag erhalten hat.
Die Bestätigungen sind notwendig, damit die Parteien von dem Erhalt der Nachricht der entsprechenden Gegenparteien erfahren. Es besteht immer die Gefahr, dass die letzte Nachricht nicht empfangen wird und somit nur eine Partei zum Treffen erscheint. Jedoch besteht nach der zweiten Nachricht ein annehmbar geringes Risiko, dass die dritte Nachricht nicht ankommt (schließlich sind auch die ersten beiden Nachrichten angekommen), sodass der Handschlag nach der dritten Nachricht beendet wird.

## Anwendungsbereiche
### TCP

Der wohl bekannteste Anwendungsbereich des Drei-Wege-Handschlags ist in Computernetzen und hier wiederum beim Protokoll TCP, das dort für verbindungsorientierte Kommunikation genutzt wird. Eine ausführliche Beschreibung dieser Form des Drei-Wege-Handschlags, der hier zum Aufbau einer Verbindung verwendet wird, 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 Handschlag-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 Handschlag-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-Handschlag ist dennoch auch hier erkennbar.