Bei einem Server->Client-TCP-Stream ist bei allen Paketen vom Server das PSH-Flag gesetzt. Ist der gute alte Nagle dafür verantwortlich, dass dieses Flag gesetzt wird?
Antwort1
Das Push-Flag ( PSH
oder P
) wird vom sendenden Host gesetzt. Wenn die sendende Anwendung 100 Bytes schreibt oder sendet, ist jedes Paket PSH
gesetzt. Wenn der Sender 2000 Bytes sendet, werden diese in zwei Paketen gesendet und das zweite hat das PSH
Flag, wobei von einer Standard-Framegröße von 1500 ausgegangen wird.
Das Push-Flag zeigt dem empfangenden Host an, dass die empfangenen Daten sofort an die empfangende Anwendung weitergegeben werden sollen.
Antwort2
Das Setzen des Push-Flags wird normalerweise nicht von der sendenden Anwendung gesteuert, sondern von der sendenden TCP-Schicht. Die meisten modernen TCP/IP-Stacks setzen das PSH-Bit am Ende des an send() übergebenen Puffers.
Quelle: Verbessern Sie die Latenz für TCP, indem Sie nicht auf das Push-Flag warten
Antwort3
Das ständige Setzen des P-Bits ist ein standardmäßig korrektes, aber ineffizientes Verhalten, das Sie möglicherweise bei alten TCP-Stacks feststellen.