4.7 Warum ist die Initialisierungssequenznummer jedes Mal unterschiedlich, wenn TCP eine Verbindung aufbaut?

Der Hauptgrund besteht darin, zu verhindern, dass historische Pakete bei der nächsten Verbindung mit demselben Vierfach empfangen werden.

Wenn der Vorgang durch viermaliges normales Winken abgeschlossen wird, bleibt der TIME_WAIT-Status 2MSL bestehen, und die historischen Nachrichten verschwinden natürlich vor der nächsten Verbindung. Es gibt jedoch keine Garantie dafür, dass jede Verbindung durch viermaliges Winken normal geschlossen werden kann.

  • Angenommen, nachdem der Client eine Verbindung mit dem Server hergestellt hat, sendet der Client ein Paket, das vom Netzwerk blockiert wird, und überträgt das Datenpaket dann nach einer Zeitüberschreitung erneut. Zu diesem Zeitpunkt wird das Servergerät ausgeschaltet und neu gestartet und die Verbindung hergestellt Die mit dem Client hergestellte Nachricht verschwindet. Daher wird die RST-Nachricht gesendet, wenn das Datenpaket vom Client empfangen wird.
  • Zu diesem Zeitpunkt stellen der Client und der Server erneut dieselbe Vierfachverbindung her.
  • Nachdem die neue Verbindung hergestellt wurde, ist das vom Netzwerk in der vorherigen Verbindung blockierte Datenpaket gerade beim Server angekommen und die Seriennummer der historischen Datennachricht liegt im Bereich des Empfangsfensters des Servers, sodass das Datenpaket dies tut Werden die Daten normalerweise vom Server empfangen, sind sie fehlerhaft.

Wenn die Initialisierungsseriennummern des Clients und des Servers bei jedem Verbindungsaufbau „verschieden“ sind, besteht eine hohe Wahrscheinlichkeit, dass sich die Seriennummern der historischen Nachrichten „nicht im“ Empfangsfenster der anderen Partei befinden, wodurch vermieden wird Den historischen Botschaften kann man sich weitgehend nicht ganz entziehen

Die Initialisierungsseriennummern des Clients und des Servers werden entsprechend der vom Zähler inkrementierten Zufallszahl generiert, und grundsätzlich werden nicht dieselben Initialisierungsseriennummern generiert.

  • Seriennummer: Die Seriennummer ist eine 32-Bit-Nummer ohne Vorzeichen, sodass sie nach Erreichen von 4G auf 0 zurückspringt .
  • Anfängliche Seriennummer: Sowohl der Client als auch der Server generieren jeweils eine anfängliche Seriennummer. Dabei handelt es sich um eine Zufallszahl, die basierend auf der Uhr generiert wird, um sicherzustellen, dass jede Verbindung eine andere anfängliche Seriennummer hat. Die Initialisierungssequenznummer kann als 32-Bit-Zähler betrachtet werden, der Wert des Zählers erhöht sich alle 4 Mikrosekunden um 1 und es dauert 4,55 Stunden, um einmal zu durchlaufen .

Die Seriennummer und die anfängliche Seriennummer werden nicht drahtlos inkrementiert und wechseln zum Anfangswert, was bedeutet, dass die neuen und alten Daten nicht anhand der Seriennummer beurteilt werden können. Zur Lösung von tcp_timestamps sind Ereignisstempel erforderlich, um eine genaue Berechnung zu ermöglichen RTT. Die andere besteht darin, das  Umwickeln der Seriennummer (PAWS) zu verhindern .

Der Anti-Wrap-Sequenznummernalgorithmus erfordert, dass beide Parteien den Ereignisstempel des zuletzt empfangenen Datenpakets beibehalten. Jedes Mal, wenn ein neues Datenpaket empfangen wird, wird der Zeitstempelwert im Datenpaket gelesen und mit dem aktuellen TSval-Wert verglichen. Wenn das empfangene Datenpaket gefunden wird und der Zeitstempel nicht zunimmt, bedeutet dies, dass das Datenpaket abgelaufen ist und das Datenpaket direkt verworfen wird .

Zusammenfassen:

Die Initialisierungssequenznummern des Clients und des Servers werden zufällig basierend auf der Zufallszahl am unteren Rand des Zählers generiert, wodurch weitgehend verhindert werden kann, dass historische Nachrichten bei der nächsten Verbindung mit demselben Vierfach empfangen werden, und dann ein Zeitstempelmechanismus eingeführt wird. Damit vermeiden Sie vollständig das Problem, dass historische Nachrichten von der Verbindung empfangen werden.

Zeitstempelumbruch:

Erhöhen Sie die Größe des Zeitstempels von 32 Bit auf 64 Bit

Verwenden Sie als Zeitstempel einen Wert, der nichts mit der Taktfrequenz zu tun hat. Die Taktfrequenz kann steigen, die Geschwindigkeit des Zeitstempels bleibt jedoch gleich

Acho que você gosta

Origin blog.csdn.net/super8ayan/article/details/132494390
Recomendado
Clasificación