2016-08-02 6 views
2

Wir alle wissen, dass TCP ein Streaming-Protokoll ist.Wie TCP-Fragment seine Daten

Im Gegensatz zu UDP, das garantiert, dass die gesamte Clientnachricht als ein einzelnes Datagramm an den Server geliefert wird (wir sprechen über Transportschicht, vermeiden Sie MTU im Moment), kann TCP eine "Nachricht" (Daten, die wurde an die send Funktion übergeben) in mehrere kleinere Pakete, so müssen wir unsere eigenen Trennzeichen als Nachrichten Grenzen verwenden.

Die Frage ist - wie TCP wählt, welche Daten fragmentiert werden sollen und nach welcher Größe? Gibt es irgendwelche gängigen/Standard-Methoden, die es verwendet?

+0

@ Robᵩ Es gibt also keine gemeinsamen Regeln oder Standardmethoden der Fragmentierung? – FrozenHeart

+0

Keine, die aus einem Anwendungsprogramm ersichtlich sind. Welches Problem versuchen Sie zu lösen? –

+0

@ Robᵩ Das ist eher theoretische Frage als die praktische Frage. Es ist interessant, über solche Dinge zu wissen – FrozenHeart

Antwort

2

TCP verwendet einen Parameter Maximum Segment Size genannt:

die maximale Segmentgröße (MSS) ein Parameter des Optionsfelds des TCP-Headers, die in Bytes, die die größte Menge von Daten, spezifiziert angibt, dass ein Computer oder Kommunikationsgerät kann in einem einzelnen TCP-Segment empfangen. Es zählt nicht den TCP-Header oder den IP-Header. Das IP-Datagramm, das ein TCP-Segment enthält, kann in einem einzelnen Paket enthalten sein oder es kann aus mehreren fragmentierten Teilen rekonstruiert sein; In beiden Fällen gilt das MSS-Limit für die gesamte Datenmenge, die im endgültigen rekonstruierten TCP-Segment enthalten ist.

Die standardmäßige maximale TCP-Segmentgröße ist 536. Wenn ein Host die maximale Segmentgröße auf einen anderen Wert als festlegen möchte, wird die maximale Segmentgröße als TCP-Option zunächst im TCP-SYN-Paket angegeben der TCP-Handshake. Der Wert kann nicht geändert werden, nachdem die Verbindung hergestellt wurde.

Wenn path MTU discovery aktiviert ist, wird MSS auf die minus TCP-Headergröße gesetzt.

Unter Linux TCP_MAXSEG Socket-Option steuert die Parameter:

wenn diese Option vor dem Verbindungsaufbau festgelegt ist, es ändert sich auch die an das andere Ende angekündigt MSS-Wert in der Anfangspaket. Werte größer als die (eventuelle) MTU-Schnittstelle haben keine Wirkung. TCP wird auch seine minimalen und maximalen Grenzen über den bereitgestellten Wert festlegen.

+0

Ich finde die Erklärungen von Netzwerkprotokollen wie TCP extrem interessant :) – pjcognetta

+0

Ok, so kann es sowohl auf der TCP-Ebene (jedes Paket max. Zu MSS) als auch auf IP-Ebene (jedes Paket max. Zu MTU), oder? – FrozenHeart

+2

@FrozenHeart Ja, TCP bricht Daten in Segmente, IP-Layer in Fragmente. –

Verwandte Themen