2009-10-23 3 views
14

Ich habe eine Anwendung, die relativ wenig Datenverkehr über TCP ohne Antworten auf Anwendungsebene empfängt. Ich glaube, der TCP-Stack sendet verzögerte ACKs (basierend auf einem Blick auf eine Netzwerk-Paketerfassung). Was ist die empfohlene Methode, verzögerte ACK im Netzwerkstack für einen einzelnen Socket zu deaktivieren? Ich habe mir TCP_QUICKACK angesehen, aber es scheint, dass der Stapel es unter meinen Füßen sowieso ändern wird.TCP verzögerte ACKs deaktivieren

Dies läuft auf einem Linux 2.6 Kernel, und ich bin nicht besorgt über Portabilität.

Antwort

13

Sie könnten setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int)) nach jeder recv Sie durchführen. Es scheint, dass TCP_QUICKACK nur zurückgesetzt wird, wenn Daten gesendet oder empfangen werden; Wenn Sie keine Daten senden, wird diese nur zurückgesetzt, wenn Sie Daten empfangen. In diesem Fall können Sie sie einfach erneut einstellen.

Sie können dies in der 14 th Feld von /proc/net/tcp überprüfen; Wenn es nicht 1 ist, sollten ACKs sofort gesendet werden ... wenn ich den TCP-Code richtig lese. (Ich bin auch kein Experte.)

+0

Ich glaube, er hat das bereits anhand seiner Frage gemacht und er sagt, dass der Wert zurückgesetzt wird. – Nikolaos

+0

Die Einstellung 'TCP_QUICKACK' sendet sofort ein ACK, wenn irgendetwas ACK's sein muss, also denke ich, dass dies ausreichend ist. – ephemient

+0

Ich bin immer noch 'send()' in diesem Socket. Aber wie gesagt, ich reagiere nicht auf Nachrichten, die ich erhalte. Ich überprüfe '/ proc/net/tcp'. – Tom

0

Ich glaube, mit der setsockopt() Funktion können Sie die TCP_NODELAY verwenden, die den Nagle-Algorithmus deaktivieren wird.

bearbeiten einen Link gefunden: http://www.ibm.com/developerworks/linux/library/l-hisock.html

Edit 2 Tom ist richtig. Nagle hat keine Auswirkungen auf verzögerte ACKs.

+2

Die Deaktivierung des Nagle-Algorithmus wirkt sich nicht auf verzögerte Bestätigungen aus (zumindest nicht auf einer mir bekannten Implementierung). – Tom

+0

der Link ist großartig –

+0

Nein, deaktivieren Nagle Auswirkungen verzögert ack, zumindest kann ich in Linux sehr jüngsten 3,17 Kernel bestätigen. – Timir