So konfigurieren Sie das Betriebssystem, um TCP-Segmente neu zusammenzustellen

286
sam

Ich habe eine Anwendung, die TCP-Daten von einem Socket einliest. Das sendende Gerät sendet volle 1400 Byte Daten an den Server-Socket am anderen Ende. Irgendwann wird das Paket in ein 1024-Byte-Segment und ein 376-Byte-Segment segmentiert / fragmentiert. Um die Daten auf meiner Anwendungsseite korrekt empfangen zu können, muss ich den Socket zweimal lesen und das Paket auf Anwendungsebene zusammenstellen, was Probleme mit viel Verkehr verursachen kann.

Nach allem, was ich gelesen habe, wird die Neuzusammenstellung von TCP-Segmenten auf der IP-Schicht durchgeführt. Ich verwende Windows Server 2012 und meine Anwendung verwendet Winsock. Gibt es eine Möglichkeit, das Betriebssystem so zu konfigurieren, dass diese Pakete neu zusammengestellt werden, wenn sie auf dem Port dieser Schicht empfangen werden?

1
Ihre Terminologie ist schlampig (z. B. behandelt die IP-Schicht nur IP und nicht * "erneute Zusammenstellung von TCP-Segmenten" *). Geben Sie bessere Beschreibungen oder Beispiele an, was gesendet wird und Sie empfangen. sawdust vor 5 Jahren 0
Transportschicht, Senden von JPEG-Bilddaten und Empfangen der gleichen JPEG-Bilddaten. sam vor 5 Jahren 0

1 Antwort auf die Frage

3
Steffen Ullrich

TCP ist ein Streaming-Protokoll und kein Nachrichtenprotokoll. Der TCP-Stack im Betriebssystem stellt sicher, dass Daten in der richtigen Reihenfolge an die Anwendung weitergeleitet werden und dass kein Datenverlust und keine Duplizierung der Daten erfolgt. Es ist nicht wichtig, Paketgrenzen beizubehalten, da, wie gesagt, TCP ein Stream-Protokoll ist. Dem Sender steht es außerdem frei, einen einzelnen Schreibvorgang in mehrere Pakete aufzuteilen oder mehrere Schreibvorgänge zu einem einzigen Paket zusammenzufassen. Es wird eine Aufteilung vorgenommen, um die Paketgröße an die MTU / PMTU anzupassen, um eine Paketfragmentierung während der Zustellung zu vermeiden, und es wird kombiniert, um den Overhead der Zustellung zu reduzieren.

Die Anwendung sollte sich daher niemals auf implizite Nachrichtengrenzen stützen, da die sendende Anwendung die Daten geschrieben hat. Stattdessen müssen explizite (auf Anwendungsebene) Nachrichtengrenzen verwendet werden.

Gibt es eine Möglichkeit, das Betriebssystem so zu konfigurieren, dass diese Pakete neu zusammengestellt werden, wenn sie auf dem Port dieser Schicht empfangen werden?

Nein, in Ihrer Bewerbung müssen Sie richtig damit umgehen.