Gibt es eine Möglichkeit, die Sende- / Empfangspuffergrößen für TCP-Sockets zu ermitteln?
Ich habe sowohl mit netstat und ss als auch mit raw / proc / net / tcp herumgestöbert. Dort gibt es viele Extras, einschließlich der Anzahl der Bytes im Flug, der Timer, des Prozessnamens usw.
Aber ich möchte in der Lage sein zu diagnostizieren, ob einige Prozesse SO_ {SND, RCV} BUF setzen ... und interessanter, welche Werte der Kernel tatsächlich für jede SKB verwendet.
tcp
linux-networking
Curtis Doty
quelle
quelle
Antworten:
In den lsof-FAQ (Suche nach "Warum meldet lsof keine Socket-Optionen") glaube ich, dass Linux die gewünschten Informationen nicht verfügbar macht. (zumindest nicht über / proc)
Wenn ja, könnten Sie verwenden
lsof -i <pid> -a -i tcp -T f
, aber -T nimmt nur "qs", nicht f unter Linux. Sie können einige andere Informationen von netstat (netstat --tcp -p -o -e -e -v | grep <pid>
) erhalten, einschließlich der Sendewarteschlange und der Empfangswarteschlange sowie einiger Timer-Informationen.Was Sie tun könnten, ist Strace verwenden. Sie müssten das Programm entweder über strace (
strace -ff -e network,ioctl PROGRAM
) oder vor dem Einrichten des TCP- Sockets ( ) ausführenstrace -fff -e network,ioctl -p PID
.ioctl
Auf diese Weise würden diese Optionen festgelegt undnetwork
sollten genug erfassen, um festzustellen, um welche Verbindungen es sich handelt. (aber nur ioctl und dann lsof, um herauszufinden, wo die Verbindungen auch funktionieren sollen)quelle
Sie können das tatsächlich mit tun
https://github.com/veithen/knetstat
.ZB
nc -I 8192 -O 8192 www.google.com 80
dafür würde man geben (sieheSO_RCVBUF
undSO_SNDBUF
in der dritten Reihe):quelle
Sie können die Größe des Empfangs- und des Sendepuffers wie folgt ändern (Sendepuffer wird angezeigt):
und um die aktuelle Größe zu erhalten, verwenden Sie:
Unter Linux ist ein Fehler bekannt, der die aktuelle Puffergröße als 1/2 des eingestellten Werts angibt. Ich kann mich nicht erinnern, ob der interne Wert die Hälfte dessen ist, was angefordert wurde, oder ob der Bericht die Hälfte dessen ist, was er wirklich ist.
quelle