Detaillierte Erläuterung des TCP-Kommunikationsprozesses und der langen und kurzen TCP-Verbindung

1. TCP-Verbindung

Wenn das TCP-Protokoll für die Netzwerkkommunikation verwendet wird, muss vor den eigentlichen Lese- und Schreibvorgängen eine Verbindung zwischen dem Server und dem Client hergestellt werden. Nach Abschluss der Lese- und Schreibvorgänge können die beiden Parteien die Verbindung freigeben, wenn sie nicht mehr benötigt werden Die Verbindung. Ein Drei-Wege-Handshake ist erforderlich, und für die Freigabe sind vier Handshakes erforderlich, sodass der Aufbau jeder Verbindung Ressourcenverbrauch und Zeitverbrauch erfordert

Das klassische Drei-Wege-Handshake-Diagramm:

Bild

Das klassische Vier-Wellen-Handdiagramm:

Bild

Zehn Zustandsdiagramme von TCP:

Bild

Notiz:

Wenn ein Ende eine FIN empfängt, lässt der Kernel den Lesevorgang 0 zurückgeben, um der Anwendungsschicht mitzuteilen, dass das andere Ende die Datenübertragung zum Ende beendet hat; das Senden von FIN ist normalerweise das Ergebnis des Schließens des Sockets durch die Anwendungsschicht.

2MSL-Problem von TCP

Bild

2. TCP-Kurzverbindung

Lassen Sie uns die Situation einer TCP-Kurzverbindung simulieren: Der Client initiiert eine Verbindungsanforderung an den Server, der Server empfängt die Anforderung und dann stellen die beiden Parteien eine Verbindung her. Der Client sendet eine Nachricht an den Server, der Server antwortet dem Client, und dann wird ein Lese- und Schreibvorgang abgeschlossen. Zu diesem Zeitpunkt kann jede der beiden Parteien einen Schließvorgang einleiten, aber im Allgemeinen initiiert der Client den Schließvorgang zuerst. Der allgemeine Server schließt die Verbindung nicht sofort, nachdem er dem Client geantwortet hat. Natürlich gibt es besondere Umstände. Aus der obigen Beschreibung geht hervor, dass eine kurze Verbindung im Allgemeinen nur einen Lese- und Schreibvorgang zwischen Client/Server überträgt

Der Vorteil kurzer Verbindungen besteht darin, dass sie relativ einfach zu verwalten sind und die vorhandenen Verbindungen alle nützliche Verbindungen ohne zusätzliche Steuerungsmittel sind

3. Lange TCP-Verbindung

Als nächstes simulieren wir die Situation einer langen Verbindung: Der Client initiiert eine Verbindung zum Server, der Server akzeptiert die Client-Verbindung und die beiden Parteien stellen eine Verbindung her. Nachdem der Client und der Server einen Lese- und Schreibvorgang abgeschlossen haben, wird die Verbindung zwischen ihnen nicht aktiv geschlossen, und nachfolgende Lese- und Schreibvorgänge verwenden diese Verbindung weiterhin.

Lassen Sie uns zunächst über die TCP/IP-Keep-Alive-Funktion sprechen, die in der ausführlichen Erklärung von TCP/IP erwähnt wird. Die Keep-Alive-Funktion wird hauptsächlich für Serveranwendungen bereitgestellt. Die Serveranwendung möchte wissen, ob der Client-Host abstürzt, damit sie sie verwenden kann Ressourcen im Auftrag des Kunden. Wenn der Client verschwunden ist und eine halboffene Verbindung auf dem Server verbleibt und der Server auf Daten vom Client wartet, wartet der Server auf die Daten vom Client und die Keep-Alive-Funktion versucht, dies zu erkennen halboffene Verbindung auf der Serverseite. verbinden.

Wenn eine bestimmte Verbindung innerhalb von zwei Stunden keine Aktion hat, sendet der Server ein Testsegment an den Client und der Client-Host muss sich in einem der folgenden vier Zustände befinden:

Der Client-Host ist weiterhin aktiv und vom Server aus erreichbar. Die TCP-Antwort des Clients ist normal, und der Server weiß auch, dass die andere Partei normal ist, und der Server setzt den Keep-Alive-Timer nach zwei Stunden zurück. Der Client-Host ist abgestürzt und wird heruntergefahren oder neu gestartet. In beiden Fällen erfolgt keine Antwort vom TCP des Clients. Der Server erhält keine Antwort auf die Probe und tritt nach 75 Sekunden in eine Zeitüberschreitung ein. Der Server sendet insgesamt 10 solcher Probes im Abstand von jeweils 75 Sekunden. Wenn der Server keine Antwort erhält, geht er davon aus, dass der Client-Host geschlossen ist und beendet die Verbindung. Der Client-Host ist abgestürzt und wurde neu gestartet. Der Server erhält eine Antwort auf seine Keep-Alive-Prüfung, bei der es sich um einen Reset handelt, der dazu führt, dass der Server die Verbindung beendet. Der Client läuft normal, aber der Server ist nicht erreichbar. Diese Situation ähnelt der Situation 2. Was TCP feststellen kann, ist, dass es keine Testantwort erhalten hat. Aus dem Obigen ist ersichtlich, dass die TCP-Keep-Alive-Funktion hauptsächlich dazu dient, den Überlebensstatus einer langen Verbindung zu erkennen. Hier liegt jedoch ein Problem vor: Der Erkennungszeitraum der Überlebensfunktion ist zu lang und dient nur der Erkennung Das Überleben der TCP-Verbindung ist ein relativ sanfter Ansatz. Wenn eine böswillige Verbindung auftritt, reicht die Keep-Alive-Funktion nicht aus.

Im Anwendungsszenario einer langen Verbindung schließt die Clientseite die Verbindung zwischen ihnen im Allgemeinen nicht aktiv. Wenn die Verbindung zwischen Client und Server nicht geschlossen wurde, liegt ein Problem vor. Mit immer mehr Clientverbindungen schließt der Server Früher oder später, wenn Sie damit nicht umgehen können, muss der Server zu diesem Zeitpunkt einige Strategien anwenden, z. B. das Schließen einiger Verbindungen, die seit langem nicht mehr aufgetreten sind, um Ereignisse zu lesen und zu schreiben, um einige böswillige Verbindungen zu vermeiden Schäden am serverseitigen Dienst verursachen; Der Client-Computer ist granular, wodurch die maximale Anzahl langer Verbindungen für jeden Client begrenzt wird, wodurch vollständig verhindert werden kann, dass ein fehlerhafter Client den Backend-Dienst beeinträchtigt.

Die Erzeugung einer langen Verbindung und einer kurzen Verbindung hängt von der Schließstrategie des Clients und Servers ab. Bestimmte Anwendungsszenarien übernehmen bestimmte Strategien. Es gibt keine perfekte Wahl, sondern nur eine geeignete Wahl.

Was sind „lange Verbindungen“ und „kurze Verbindungen“?

Erklärung 1

Die sogenannte lange Verbindung bedeutet, dass die Verbindung nach dem Aufbau der SOCKET-Verbindung unabhängig davon, ob sie verwendet wird oder nicht, aufrechterhalten wird, die Sicherheit jedoch schlecht ist.

Die sogenannte Kurzverbindung bedeutet, dass nach dem Aufbau der SOCKET-Verbindung die Verbindung sofort nach dem Senden und Empfangen der Daten getrennt wird. Im Allgemeinen verwenden Banken kurze Verbindungen.

Erklärung 2

Eine lange Verbindung bedeutet, dass bei einer TCP-basierten Kommunikation die Verbindung immer aufrechterhalten wird, unabhängig davon, ob gerade Daten gesendet oder empfangen werden.

Die kurze Verbindung besteht darin, nur dann eine Verbindung herzustellen, wenn eine Datenübertragung stattfindet, die Client-Server-Kommunikation/Datenübertragung abgeschlossen ist und die Verbindung geschlossen wird.

Erklärung 3

Das Konzept der langen Verbindung und der kurzen Verbindung scheint nur im mobilen CMPP-Protokoll erwähnt zu werden und wurde anderswo nicht gesehen. Kommunikationsmodus Es gibt zwei Verbindungsmodi zwischen Netzwerkelementen: lange Verbindung und kurze Verbindung. Die sogenannte lange Verbindung bedeutet, dass mehrere Datenpakete kontinuierlich über eine TCP-Verbindung gesendet werden können. Wenn während des Wartungszeitraums der TCP-Verbindung keine Datenpakete gesendet werden, müssen beide Parteien Erkennungspakete senden, um die Verbindung aufrechtzuerhalten. Eine kurze Verbindung bedeutet, dass bei einer Dateninteraktion zwischen den Kommunikationsparteien eine TCP-Verbindung hergestellt wird und nach Abschluss der Datenübertragung die TCP-Verbindung getrennt wird, d. h. jede TCP-Verbindung schließt nur das Senden eines CMPP-Nachrichtenpaars ab. Zu diesem Zeitpunkt ist es erforderlich, den Kommunikationsmodus einer langen Verbindung zwischen ISMGs zu übernehmen, und es wird empfohlen, den Kommunikationsmodus einer langen Verbindung zwischen SP und ISMG zu übernehmen.

Erklärung 4

Kurze Verbindung: wie http, einfach verbinden, anfordern, schließen, die Prozesszeit ist kurz, wenn der Server eine Zeit lang keine Anfrage erhält, kann er die Verbindung schließen. Lange Verbindung: Einige Dienste müssen über einen langen Zeitraum eine Verbindung zum Server herstellen, z. B. CMPP, und müssen im Allgemeinen selbst online bleiben.

Lange und kurze Verbindungen des HTTP-Protokolls

1. Lange Verbindung und kurze Verbindung:

Lange Verbindung: Die Clientseite und die Serverseite stellen zuerst eine Verbindung her, und die Verbindung wird nach dem Verbindungsaufbau nicht getrennt, und dann wird die Nachricht gesendet und empfangen. Auf diese Weise besteht die Kommunikationsverbindung immer. Diese Methode wird häufig in der P2P-Kommunikation verwendet. Kurze Verbindung: Der Client und der Server kommunizieren jedes Mal miteinander, wenn sie eine Nachricht senden und empfangen, und trennen die Verbindung sofort, nachdem die Transaktion abgeschlossen ist. Diese Methode wird häufig in der Punkt-zu-Mehrpunkt-Kommunikation verwendet. C/S-Kommunikation. 2. Der Betriebsprozess einer langen Verbindung und einer kurzen Verbindung:

Die Arbeitsschritte einer kurzen Verbindung sind: Verbindung aufbauen - Datenübertragung - Verbindung schließen ... Verbindung herstellen - Datenübertragung - Verbindung schließen. Die Arbeitsschritte einer langen Verbindung sind: Verbindung aufbauen - Datenübertragung ... (Verbindung aufrechterhalten) ... Datenübertragung - — Verbindung schließen 

3. Wann sollten lange und kurze Verbindungen verwendet werden:

Lange Verbindung: Lange Verbindungen werden hauptsächlich für häufige Vorgänge und Punkt-zu-Punkt-Kommunikation verwendet, und die Anzahl der Verbindungen sollte nicht zu groß sein. Der Aufbau jeder TCP-Verbindung erfordert einen Drei-Wege-Handshake, und das Trennen jeder TCP-Verbindung erfordert einen Vier-Wege-Handshake. Wenn Sie für jeden Vorgang eine Verbindung herstellen und dann erneut ausführen müssen, verringert sich die Verarbeitungsgeschwindigkeit, sodass Sie nach jedem Vorgang direkt Daten im nächsten Vorgang senden können und keine TCP-Verbindung herstellen müssen. Beispiel: Die Verbindung der Datenbank verwendet eine lange Verbindung. Wenn eine kurze Verbindung für häufige Kommunikation verwendet wird, führt dies zu Socket-Fehlern, und die häufige Erstellung von Sockets ist ebenfalls eine Verschwendung von Ressourcen.

Kurze Verbindung: HTTP-Dienste von Websites verwenden im Allgemeinen kurze Verbindungen. Denn die lange Verbindung verbraucht eine gewisse Menge an Ressourcen für den Server. Tausende oder sogar Hunderte Millionen Clientverbindungen wie Websites nutzen kurze Verbindungen, um Ressourcen zu sparen. Stellen Sie sich vor, Sie verwenden lange Verbindungen und Tausende von Benutzern gleichzeitig und jeder Benutzer belegt eine Verbindung. Sie können sich vorstellen, wie viel Druck auf den Server ausgeübt wird. Daher ist die Parallelität groß, aber jeder Benutzer benötigt eine kurze Verbindung, wenn er keine häufigen Vorgänge benötigt. Kurz gesagt: Die Wahl zwischen Langverbindung und Kurzverbindung hängt von der Nachfrage ab.

4. Sende- und Empfangsmethode:

1. Asynchron: Das Senden und Empfangen von Nachrichten ist getrennt, unabhängig voneinander und beeinflusst sich nicht gegenseitig. Diese Methode ist in zwei Situationen unterteilt: asynchrones Duplex: Empfangen und Senden erfolgen im selben Programm, und zwei verschiedene Unterprozesse sind für das Senden bzw. Empfangen verantwortlich. Asynchroner Simplex: Abholung und Versand erfolgen über zwei unterschiedliche Programme. 2. Synchronisation: Das Senden und Empfangen von Nachrichten erfolgt synchron, dh nach dem Senden von Nachrichten wird auf den Empfang und die Rückgabe von Nachrichten gewartet. Bei der Synchronisationsmethode muss im Allgemeinen das Timeout-Problem berücksichtigt werden. Stellen Sie sich vor, wir können nach dem Senden einer Nachricht nicht unbegrenzt warten, daher müssen wir eine Wartezeit festlegen. Bei Überschreitung der Wartezeit wartet der Absender nicht mehr auf die gelesene Rückmeldung. Das Zeitlimit für die direkte Benachrichtigung wird zurückgegeben.

5. Nachrichtenformat:

Kommunikationsnachrichtenformate sind vielfältiger und es müssen entsprechende Funktionen zum Empfangen und Senden von Nachrichten sowie zum Lesen und Schreiben von Nachrichten entworfen werden. blockierend und nicht blockierend

1. Nicht blockierender Modus: Die Lesefunktion liest weiter. Wenn keine Nachricht empfangen wird, wartet sie eine Zeit lang und kehrt nach einem Timeout zurück. In diesem Fall muss ein Timeout-Zeitraum angegeben werden.

2. Blockierungsmodus: Wenn keine Nachricht empfangen wird, befindet sich die Lesefunktion im Wartezustand, bis die Nachricht eintrifft.

Zyklisches Lesen und Schreiben

1. Einmaliges direktes Lesen und Schreiben von Nachrichten: Lesen oder senden Sie alle Nachrichtenbytes gleichzeitig ohne Unterschied in einer Aktion zum Empfangen oder Senden von Nachrichten.

2. Zirkuläres Lesen und Schreiben ohne angegebene Länge: Diese Version tritt während des kurzen Verbindungsprozesses auf und ist durch Netzwerkrouting usw. begrenzt. Eine lange Nachricht kann während der Netzwerkübertragung in viele Pakete zerlegt werden und es ist möglicherweise nicht möglich, alle zu lesen von ihnen auf einmal. Nach dem einmaligen Lesen der Nachricht ist es notwendig, die Nachricht in einer Schleife zu lesen, bis sie fertig ist.

3. Zirkuläres Lesen und Schreiben von Nachrichtenköpfen mit Länge: Diese Situation liegt im Allgemeinen bei einer langen Verbindung vor, da es in einer langen Verbindung keine Bedingung gibt, um zu beurteilen, wann das zyklische Lesen und Schreiben endet. Der Längenheader muss hinzugefügt werden. Die Lesefunktion liest zuerst die Länge des Nachrichtenkopfes und liest dann die Nachricht entsprechend dieser Länge. In tatsächlichen Situationen unterscheidet sich das Format des Kopfcodesystems häufig. Wenn es sich um einen Nicht-ASCII-Nachrichtenkopf handelt, muss dies der Fall sein in ASCII umgewandelt

Gängige Nachrichtenheader werden wie folgt zusammengestellt: 1. ASCII-Code mit n Bytes. 2. BCD-Code von n Bytes. 3. Ein Netzwerk-Ganzzahlcode von n Bytes. Im Folgenden sind einige typische Methoden zum Lesen und Schreiben von Nachrichten aufgeführt. Einige typische API-Lese- und Schreibfunktionen können im Voraus zusammen mit der Kommunikationsmodusvorlage bereitgestellt werden. Bei praktischen Problemen kann es natürlich erforderlich sein, eine Lese- und Schreib-API zu schreiben, die dem Nachrichtenformat der anderen Partei entspricht. In tatsächlichen Situationen ist es häufig erforderlich, unser eigenes System mit den Systemen anderer Personen zu verbinden. Verwenden Sie die oben genannten Vorlagen und APIs kann man sagen, dass die Verbindung kein Problem mit dem Kommunikationsverfahren darstellt.

Wann sollte eine lange Verbindung und wann eine kurze Verbindung verwendet werden?

Lange Verbindungen werden hauptsächlich für häufige Vorgänge und Punkt-zu-Punkt-Kommunikationen verwendet, und die Anzahl der Verbindungen sollte nicht zu groß sein. Jede TCP-Verbindung erfordert einen dreistufigen Handshake, der Zeit braucht. Wenn jeder Vorgang zuerst verbunden wird, wird die Verarbeitungsgeschwindigkeit stark reduziert, sodass nicht jeder Vorgang getrennt wird und das Datenpaket direkt beim ersten gesendet wird Verarbeitung. Es ist in Ordnung, es muss keine TCP-Verbindung hergestellt werden. Beispiel: Die Datenbankverbindung verwendet eine lange Verbindung. Wenn eine kurze Verbindung für häufige Kommunikation verwendet wird, führt dies zu Socket-Fehlern, und die häufige Erstellung von Sockets ist ebenfalls eine Verschwendung von Ressourcen.

HTTP-Dienste wie WEB-Websites verwenden im Allgemeinen kurze Links, da lange Verbindungen eine bestimmte Menge an Ressourcen für den Server verbrauchen und es wirtschaftlicher ist, kurze Verbindungen für Zehntausende oder sogar Hunderte Millionen Client-Verbindungen wie WEB-Websites zu verwenden. Wenn Sie bei einigen Ressourcen lange Verbindungen verwenden und Tausende von Benutzern gleichzeitig vorhanden sind und jeder Benutzer eine Verbindung belegt, können Sie sich das vorstellen. Daher ist die Parallelität groß, es ist jedoch besser, kurze Verbindungen zu verwenden, wenn nicht jeder Benutzer häufig arbeiten muss. Kurz gesagt, die Wahl zwischen langer und kurzer Verbindung hängt von der Situation ab.

Supongo que te gusta

Origin blog.csdn.net/LinkSLA/article/details/131846500
Recomendado
Clasificación