1. Die Beziehung zwischen HTTP-Protokoll und TCP/IP-Protokoll
Die langen und kurzen Verbindungen von HTTP sind im Wesentlichen die langen und kurzen Verbindungen von TCP. HTTP ist ein Protokoll der Anwendungsschicht, das das TCP-Protokoll auf der Transportschicht und das IP-Protokoll auf der Netzwerkschicht verwendet. Das IP-Protokoll löst hauptsächlich Netzwerkrouting- und Adressierungsprobleme, und das TCP-Protokoll löst hauptsächlich die zuverlässige Zustellung von Datenpaketen über der IP-Schicht, sodass das andere Ende des Netzwerks alle vom Absender gesendeten Pakete empfängt und die Reihenfolge mit dieser übereinstimmt die Reihenfolge des Versands. TCP verfügt über zuverlässige, verbindungsorientierte Eigenschaften.
2. Wie man versteht, dass das HTTP-Protokoll zustandslos ist
Das HTTP-Protokoll ist zustandslos, was bedeutet, dass das Protokoll keine Speicherkapazität für die Transaktionsverarbeitung hat und der Server den Status nicht kennt des Kunden. Mit anderen Worten: Es besteht kein Zusammenhang zwischen dem Öffnen einer Webseite auf einem Server und der Webseite, die Sie zuvor auf diesem Server geöffnet haben. HTTP ist ein zustandsloses verbindungsorientiertes Protokoll. Zustandslosigkeit bedeutet nicht, dass HTTP keine TCP-Verbindung aufrechterhalten kann, noch bedeutet es, dass HTTP das UDP-Protokoll verwendet (keine Verbindung).
3. Was sind lange Verbindungen und kurze Verbindungen?
In HTTP/1.0 werden standardmäßig kurze Verbindungen verwendet. Mit anderen Worten: Jedes Mal, wenn Browser und Server eine HTTP-Operation ausführen, wird eine Verbindung hergestellt, die Verbindung wird jedoch unterbrochen, wenn die Aufgabe abgeschlossen ist. Wenn eine HTML- oder andere Art von Webseite, auf die der Client-Browser zugreift, andere Webressourcen wie JavaScript-Dateien, Bilddateien, CSS-Dateien usw. enthält, erstellt der Browser jedes Mal eine HTTP-Sitzung.
Ab HTTP/1.1 werden jedoch standardmäßig lange Verbindungen verwendet, um die Verbindungseigenschaften beizubehalten. Bei Verwendung des HTTP-Protokolls mit langen Verbindungen wird diese Codezeile zum Antwortheader hinzugefügt:
Connection:keep-alive
Bei Verwendung langer Verbindungen wird beim Öffnen einer Webseite die Client Die zur Übertragung von HTTP-Daten zwischen Client und Server verwendete TCP-Verbindung wird nicht geschlossen. Wenn der Client erneut auf die Webseite auf diesem Server zugreift, verwendet er weiterhin diese bestehende Verbindung. Keep-Alive hält die Verbindung nicht dauerhaft aufrecht, sondern verfügt über eine Aufbewahrungszeit, die in unterschiedlicher Serversoftware (z. B. Apache) eingestellt werden kann. Um lange Verbindungen zu implementieren, müssen sowohl der Client als auch der Server lange Verbindungen unterstützen.
Die langen Verbindungen und kurzen Verbindungen des HTTP-Protokolls sind im Wesentlichen die langen Verbindungen und kurzen Verbindungen des TCP-Protokolls.
3.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 Wenn sie abgeschlossen sind, können beide Parteien die Verbindung freigeben, wenn sie sie nicht mehr benötigen. Der Verbindungsaufbau erfordert drei Handshakes, und die Freigabe erfordert vier Handshakes, sodass der Aufbau jeder Verbindung Ressourcenverbrauch und Zeitverbrauch erfordert
Klassisches Drei-Wege-Handshake-Diagramm:
Klassisches Vier-Wege-Handshake-Schließdiagramm:
3.2 TCP-Kurzverbindung
Lassen Sie uns die Situation einer TCP-Kurzverbindung simulieren. Der Client initiiert eine Verbindungsanfrage an den Server, der Server empfängt die Anfrage und dann stellen die beiden Parteien eine Verbindung her. Der Client sendet eine Nachricht an den Server, der Server antwortet dem Client und dann ist der Lese- und Schreibvorgang abgeschlossen. Zu diesem Zeitpunkt kann jede Partei einen Schließvorgang einleiten, aber im Allgemeinen initiiert der Client den Schließvorgang zuerst. Warum wird der Server die Verbindung im Allgemeinen nicht sofort schließen, nachdem er dem Client geantwortet hat? Besondere Umstände können natürlich nicht ausgeschlossen werden. Aus der obigen Beschreibung geht hervor, dass kurze Verbindungen im Allgemeinen nur einen Lese- und Schreibvorgang zwischen Client/Server übertragen.
Die Vorteile kurzer Verbindungen sind: Sie sind relativ einfach zu verwalten und alle vorhandenen Verbindungen sind nützliche Verbindungen, also keine zusätzlichen Kontrollmethoden
3.3 TCP-Langverbindung
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 her Verbindung. 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 in der ausführlichen Erläuterung von TCP/IP erwähnte Keep-Alive-Funktion sprechen. Die Keep-Alive-Funktion wird hauptsächlich für Serveranwendungen bereitgestellt. Die Serveranwendung hofft zu erfahren, ob der Client-Host abgestürzt ist , damit es Ressourcen im Namen des Clients nutzen kann. 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 Daten vom Client. Die Keep-Alive-Funktion versucht, diese halboffene Verbindung zu erkennen auf der Serverseite.
Wenn innerhalb von zwei Stunden keine Aktion für eine bestimmte Verbindung erfolgt, sendet der Server ein Testsegment an den Client. Der Client-Host muss sich in einem der folgenden vier Zustände befinden:
Der Der Client-Host läuft weiterhin normal und ist vom Server aus erreichbar. Die TCP-Antwort des Clients ist normal und der Server weiß auch, dass die andere Partei normal ist. 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 Sonden im Abstand von jeweils 75 Sekunden. Wenn der Server keine Antwort erhält, geht er davon aus, dass der Client-Host geschlossen wurde und beendet die Verbindung.
Der Client-Host ist abgestürzt und wurde neu gestartet. Der Server erhält eine Antwort auf seine Keepalive-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 2. Was TCP feststellen kann, ist, dass keine Testantwort empfangen wird.
3.4 Betriebsablauf einer langen Verbindung und einer kurzen Verbindung
Die Betriebsschritte einer kurzen Verbindung sind:
Verbindung herstellen – Datenübertragung – Verbindung schließen … Verbindung herstellen – Daten Übertragung - Verbindung schließen
Die Arbeitsschritte einer langen Verbindung sind:
Verbindung herstellen - Datenübertragung... (Verbindung beibehalten)... Datenübertragung - Verbindung schließen
4. Die Vor- und Nachteile von langen und kurzen Verbindungen
Wie aus dem oben Gesagten hervorgeht, können lange Verbindungen mehr TCP-Einrichtungs- und -Schließvorgänge einsparen, Abfall reduzieren und sparen Zeit. Für Kunden, die häufig Ressourcen anfordern, sind lange Verbindungen besser geeignet. Allerdings gibt es hier ein Problem: Die Erkennungsdauer der Überlebensfunktion ist zu lang und sie erkennt nur das Überleben von TCP-Verbindungen. Bei der Erkennung einer böswilligen Verbindung reicht die Keep-Alive-Funktion nicht aus . Im Anwendungsszenario einer langen Verbindung schließt der Client die Verbindung zwischen ihnen im Allgemeinen nicht aktiv. Wenn die Verbindung zwischen Client und Server nicht geschlossen wird, tritt ein Problem auf oder später wird es eine Zeit geben, in der der Server es nicht mehr ertragen kann. Zu diesem Zeitpunkt muss der Server bestimmte Strategien anwenden, z. B. das Schließen einiger Verbindungen, die seit langem keine Lese- oder Schreibereignisse hatten. Dadurch können einige bösartige Ereignisse vermieden werden Verbindungen, die den serverseitigen Dienst schädigen; wenn die Bedingungen dies zulassen, kann dies der Fall sein.
Kurze Verbindungen sind für Server relativ einfach zu verwalten. Alle vorhandenen Verbindungen sind nützliche Verbindungen und erfordern keine zusätzlichen Steuerungsmethoden. Wenn der Client jedoch häufig Anfragen stellt, werden Zeit und Bandbreite für TCP-Einrichtungs- und -Herunterfahrvorgänge verschwendet.
Die Entstehung langer und kurzer Verbindungen liegt in den Abschlussstrategien des Clients und des Servers. Es gibt keine perfekte Wahl, sondern nur geeignete Entscheidungen.
5. Wann sollte man eine lange Verbindung und eine kurze Verbindung verwenden?
Lange Verbindungen werden hauptsächlich für häufige Vorgänge und Punkt-zu-Punkt-Kommunikation verwendet, und die Anzahl der Verbindungen darf nicht zu groß sein. Jede TCP-Verbindung erfordert einen dreistufigen Handshake, der einige Zeit in Anspruch nimmt. Wenn jeder Vorgang zuerst verbunden und dann ausgeführt wird, wird die Verarbeitungsgeschwindigkeit erheblich verringert. Daher wird die Verbindung nicht nach jedem Vorgang getrennt und das Datenpaket wird direkt gesendet Die erste Verarbeitung ist in Ordnung, es muss keine TCP-Verbindung hergestellt werden. Beispiel: Für Datenbankverbindungen werden häufig lange Verbindungen verwendet, die zu Socket-Fehlern führen, 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 bestimmte Ressourcen für den Server verbrauchen, und wie bei WEB-Websites gibt es so häufig Tausende oder sogar Hunderte Millionen von Client-Verbindungen, die eine kurze Verbindung verwenden spart einige Ressourcen. Wenn Sie eine lange Verbindung verwenden und Tausende von Benutzern gleichzeitig vorhanden sind, ist es denkbar, dass jeder Benutzer eine Verbindung belegt. Daher ist die Parallelität groß, aber jeder Benutzer muss eine kurze Verbindung verwenden, wenn er keine häufigen Vorgänge benötigt.