WikiDer > TCP-Handshake

TCP-handshake

Jetzt sofort TCP-Handshake kann a Netzwerkverbindung zwischen Client und Server erstellt oder gebrochen werden. EIN TCPHandshake ist erforderlich, um stabile und zuverlässige Netzwerkverbindungen im Transport, Session-, Präsentation- und Anwendungsschicht (Schichten 4 bis 7 im OSI-Modell) zu erstellen oder zu unterbrechen. Bei einem TCP-Handshake werden Daten über die Netzwerkschicht (Schicht 3 im OSI-Modell) zwischen Computern mit unterschiedlichen Internet-Steckdosen.[1]

TCP/IP-Pakete und Datenübertragung

Metadaten und Nutzlast

Verwenden von TCP/IP-Pakete Clients und Server können Daten austauschen. Ein TCP/IP-Paket ist a IPv4- oder ein IPv6-Paket mit dem a TCP-Segment über einen IP-Netzwerk gesendet wird. Der Datenblock enthält die Nutzlast und enthalten die IP- und TCP-Header Metadaten. Wenn der Datenblock leer ist, enthält das TCP/IP-Paket nur Metadaten im IP-Header und die TCP-Header übertragen. Die Metadaten in den IP-Headern enthalten fast keine Informationen, die für die Netzwerkverbindung oder den weiteren Sitzungsverlauf wichtig sind. Bei einem TCP-Handshake werden die wichtigsten Informationen zwischen Client und Server über die Metadaten in TCP-Headern ausgetauscht. Beide Parteien benötigen diese Metadaten, um TCP-Sitzung die DatentLösegeld für Cprüfen.

TCP-Header

Eine Reihe von Feldern im TCP-Header spielen während eines TCP-Handshakes eine Schlüsselrolle. Dies sind die ersten beiden 16-Bit-Felder, die die Quell-Port- und Ziel-Port-Nummern enthalten, die nächsten beiden 32-Bit-Felder, die die Sequenz- und Bestätigungsnummer enthalten, und die drei Bits der SYN-, FIN- und ACK-Flags.

TCP-Header
Bit-Offset 0 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031
0Source-GateZielhafen
32Sequenznummer
64Bestätigungsnummer
96Kopflänge000Nein
so
C
W
R
E
C
E
SIE
R
G
ein
C
k
p
so
huh
R
so
t
so
Ja
Nein
f
ich
Nein
Fenstergröße
128PrüfsummeDringende Datenreferenz
160
...
Optionen (wenn Kopfzeilenlänge > 5)
...

Zielport und Quellport

Der Zielport (oder Zielport) ist der Port-Nummer dass der Kunde Muss um eine Netzwerkverbindung zu einem Server aufzubauen. Der Dienst läuft auf einem bestimmten TCP-Systemport oder TCP-Benutzerport, wie z. B. die Portnummern 80, 143, 389 bzw. 3306. HTTP, IMAP, LDAP und MySQLDatenbanken. Der Quellport ist eine (zufällige) dynamische Portnummer, die vom Client aus dem Bereich 49152 bis 65535 gewählt wird. Die Portnummer des Quellports wird während der gesamten Sitzung verwendet. Der Quellport des Clients entspricht dem Zielport in den TCP/IP-Paketen, die der Server an den Client sendet.

Sequenznummer und Bestätigungsnummer

Die erste Sequenznummer (oder Sequenznummer) ist eine zufällige 32-Bit-Zahl, die durch die Zufallsgenerator des Kunden ausgewählt wird. Diese Sequenznummer wird vom Client im ersten TCP/IP-Paket an den Server gesendet. Der Server erhöht die Sequenznummer und sendet das Ergebnis als neue Sequenznummer zusammen mit der ersten Bestätigungsnummer in einem TCP/IP-Paket an den Client. Die erste Bestätigungsnummer ist eine zufällige 32-Bit-Zahl, die vom Zufallsgenerator des Servers ausgewählt wird. Nach dem Empfang des Pakets erhöht der Client die Bestätigungsnummer und sendet sie als neue Bestätigungsnummer im nächsten TCP/IP-Paket an den Server.

Während einer TCP-Sitzung erhöht der Client die Bestätigungsnummer mit jeder Transaktion und der Server erhöht die Sequenznummer mit jeder Transaktion. Auf diese Weise werden die Pakete automatisch nummeriert, sodass die Pakete von beiden Parteien bestellt werden können und beide Parteien die Versandreihenfolge überprüfen können.

SYN-, FIN- und ACK-Flag

Die Flags SYN und FIN werden nur zu Beginn eines Handshakes verwendet. Der Client sendet ein erstes Paket mit einem SYN-Flag an den Server als Anfrage zum Starten einer TCP-Sitzung. Wenn der Server die Anforderung akzeptiert, sendet er als Antwort an den Client ein Paket mit einem SYN-Flag und einem ACK-Flag zurück. Während einer Sitzung hat das SYN-Flag nur im ersten Paket, das der Client an den Server sendet, und im ersten Paket, das der Server an den Client sendet, den Wert 1.

Eine TCP-Verbindung ist ein asymmetrischer Halbduplex-Kommunikationskanal. Sowohl der Client als auch der Server können das FIN-Flag verwenden, um die Verbindung zu trennen. Das FIN-Flag hat nur den Wert 1 im vorletzten oder letzten Paket, das Client und Server einander senden.

Das ACK-Flag wird für alle Pakete verwendet, bei denen die Sequenznummer oder Bestätigungsnummer inkrementiert wird.[2][3]

Händeschütteln

Netzwerkverbindung

Schematische Darstellung der drei Schritte zum Aufbau einer Netzwerkverbindung.

Der Client ergreift die Initiative, eine Netzwerkverbindung zu einem Server aufzubauen, indem er dem Server a SYN-Paket, ein TCP/IP-Paket mit einem SYN-Flag und einer Sequenznummer. Antwortet der Server mit a SYN-ACK-Paket, ein TCP/IP-Paket mit einem SYN- und einem ACK-Flag, einer Bestätigungsnummer und einer inkrementierten Sequenznummer zurücksenden, dann kann der Austausch von TCP/IP-Paketen für den Datentransport fortgesetzt werden.

Der TCP-Handshake zum Herstellen einer Netzverbindung besteht aus drei Schritten:[4][5]

  1. Der Client sendet einen TCP-Header mit SYN = 1, einer Sequenznummer = x, einem Quellport und einem Zielport an den Server. Der zweite Schritt kann folgen, wenn unter der IP-Adresse ein Server läuft, der auf TCP/IP-Pakete mit der Portnummer des Zielports im TCP-Header antwortet.
  2. Der Server sendet ein TCP/IP-Paket mit SYN = 1, ACK = 1, Sequenznummer = y und Bestätigungsnummer = x 1 an den Client zurück, um den Empfang des ersten TCP/IP-Pakets zu bestätigen. Der dritte Schritt folgt, nachdem die Empfangsdaten durch den Kunden verifiziert wurden.
  3. Der Client sendet ein zweites Paket mit SYN = 0, ACK = 1, Sequenznummer = x 1 und Bestätigungsnummer = y 1 und zusätzliche Daten an den Server zurück. Wenn die Daten im TCP/IP-Paket vom Client überprüft wurden, kann die Sitzung fortgesetzt werden.

Nach dem dritten Schritt ist der Verbindungszustand ESTABLISHED, wonach Prozesse im Anwendungsschicht gestartet werden kann.

Während des TCP-Handshakes können mehrere Probleme auftreten. Der Kunde kann a SYN-Flut ein Absturz eines Servers oder a Denial of Service verursacht durch die Übergabe falscher Quelladressen an SYN-Pakete.

Netzwerk trennen

Schematische Darstellung der vier Schritte, durch die eine Netzwerkverbindung unterbrochen wird.

Da eine TCP-Netzwerkverbindung einer (ziemlich langsamen, asymmetrischen) VollduplexTDMA-Kommunikationskanal erscheint, kann die Verbindung sowohl auf Anfrage des Servers als auch auf Anfrage des Clients jederzeit getrennt werden. Der Teilnehmer, der die Verbindung trennen möchte, wird als Handshake-Initiator bezeichnet, und der andere Teilnehmer wird als Handshake-Empfänger bezeichnet. Eine Aufforderung zum Trennen erfolgt durch den Initiator durch a FIN-Paket, oder ein TCP/IP-Paket mit einem FIN-Flag an den Empfänger.

Das Beenden einer TCP-Netzwerkverbindung umfasst vier Schritte:

  1. Der Initiator sendet einen TCP-Header mit einem FIN-Flag an den Empfänger.
  2. Nachdem der Empfänger das FIN-Flag empfangen hat, sendet der Empfänger sein letztes TCP/IP-Paket mit einem ACK-Flag an den Initiator.
  3. Der Empfänger sendet dann ein FIN-Flag an den Initiator, um den Initiator zu benachrichtigen, dass die Verbindung unterbrochen werden kann.
  4. Dann sendet der Initiator einen TCP-Header mit einem ACK-Flag an den Empfänger, um die Verbindung dauerhaft zu trennen.

Nachdem der Empfänger das ACK-Flag erhalten hat, wird die Netzwerkverbindung dauerhaft unterbrochen.

Verbindungszustände

Netzwerkverbindung, Server und Client befinden sich bei Handshakes in unterschiedlichen Verbindungszuständen oder Verbindungszustände.

Eine Verbindung herstellen

HÖREN (Server)
Server wartet auf eine Verbindungsanfrage von einem Client.
SYN. GESENDET (Client)
Nach dem Senden von a SYN-Paket der Client wartet auf eine entsprechende Antwort vom Server.
SYN-EMPFANGEN (Server)
Nach dem Senden von a SYN-ACK-Paket an den Client, wartet der Server auf eine Empfangsbestätigung des Clients.
HERGESTELLT (Verbindung)
Nachdem der Server a . sendet ACK-Paket vom Client empfangen wird, ist die TCP/IP-Verbindung geöffnet und die Datenkommunikation zwischen Client und Server ist geöffnet.

Stabile Verbindung hergestellt

Nachdem die Netzwerkverbindung nun aufgebaut wurde und sich im Verbindungszustand ESTABLISHED befindet, können Client und Server ACK-Pakete miteinander austauschen. Außerdem sorgen die Sequenz- und Quittungsnummern dafür, dass die Datenkommunikation auf beiden Seiten der Verbindung synchronisiert ist. Das TCP-Sitzung kann jetzt in der Anwendungsschicht gebootet, bis der Client oder Server die Verbindung trennt.

Trennen

FIN-WAIT-1 (Initiator)
Der Initiator wartet auf ein ACK-Paket vom Empfänger, um zu bestätigen, dass das gesendete FIN-Paket Ist angekommen.
FIN-WAIT-2 (Initiator)
Der Initiator wartet auf ein FIN-Paket vom Empfänger, nachdem er das ACK-Paket vom Empfänger empfangen hat, um zu bestätigen, dass die Verbindung geschlossen wurde.
CLOSE-WAIT (Empfänger)
Nach dem Empfang des FIN-Pakets wartet der Empfänger darauf, dass ein letztes ACK-Paket die Verbindung trennt.
SCHLIESSEN (Verbindung)
Der Initiator sendet ein letztes ACK-Paket an den Empfänger.
LAST-ACK (Empfänger)
Der Empfänger sendet ein letztes FIN-Paket und wartet dann auf das letzte ACK-Paket, um zu bestätigen, dass das zuvor gesendete FIN-Paket empfangen wurde.
ZEIT WARTEN (Initiator)
Der Initiator wartet darauf, dass der Empfänger das letzte ACK-Paket empfängt. gemäß RFC 793 eine Verbindung kann bis zu vier Minuten in TIME-WAIT verbleiben, bekannt als zwei MSL, die maximale Lebensdauer von a TCP-Segment.
GESCHLOSSEN
Die Verbindung ist unterbrochen.

Nachdem der Empfänger das letzte ACK-Paket empfangen hat, wird die Netzwerkverbindung endgültig abgebrochen.

netstat

Der Zustand aller aktiven Sockets mit TCP/IPv4- und TCP/IPv6-Verbindungen kann mit a visible sichtbar gemacht werden netstat-Auftrag.[6][7][8]

Das Linux netstat Befehl mit dem -tOption gibt zum Beispiel:

$ netstat -tAktive Internetverbindungen (ohne Server)Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 asrock:51293 ams15s22-in-f162.:https ESTABLISHEDtcp 0 0 asrock:52616 93.184.220.20:http TIME_WAIT tcp 0 0 asrock:49599 ec2-54-228-225-18:https ESTABLISHEDtcp6 0 0 asrock:54155 ea-in-x63.1e100.ne:http TIME_WAIT tcp6 0 0 asrock:55346 ams16s21-in-x02.1e:http ESTABLISHEDtcp6 0 0 asrock:40245 ams16s21-in-x01.1e:http ESTABLISHED...