Kurze Antwort - Diese Zählung Bytes. Durch das Ausführen von netperf TCP_RR mit verschiedenen Größen können Sie den genauen Wert von 1 zählen (nur 1 Paket in der Luft in einer bestimmten Zeit). Dieser Wert würde immer die Paketgröße anzeigen.
Weitere Informationen:
dieser Laut post:
tx_queue: rx_queue
Die Größe der Sende- und Empfangswarteschlangen.
Dies ist pro Socket. Für TCP werden die Werte in der Funktion get_tcp4_sock() aktualisiert. Es ist etwas anders in 2.6.32 und 4.14, aber die Idee ist die gleiche. Entsprechend dem Socket-Zustand wird der rx_queue-Wert auf entweder sk-> sk_ack_backlog oder tp-> rcv_nxt-tp-> copy_seq aktualisiert. Der zweite Wert könnte negativ sein und wird in späteren Kernen auf 0 gesetzt, wenn dies der Fall ist. sk_ack_backlog zählt die nicht gepackten Segmente, das ist ein bisschen seltsam, da dies nicht in Bytes zu sein scheint. Vermutlich fehlt hier etwas.
Von tcp.h:
struct tcp_sock {
...
u32 rcv_nxt; /* What we want to receive next */
u32 copied_seq; /* Head of yet unread data */
Sowohl in Bytes zählen, so t F> rcv_nxt - t F> copied_seq ist das ausstehende Bytes im Empfangspuffer für eingehende Pakete zu zählen. tx_queue wird auf tp-> write_seq - tp-> snd_una gesetzt. Wieder von tcp.h:
struct tcp_sock {
...
u32 snd_una; /* First byte we want an ack for */
u32 write_seq; /* Tail(+1) of data held in tcp send buffer */
ist hier ein bisschen mehr klar die Zählung in Bytes zu sehen. Für UDP ist es einfacher. Die Werte werden in udp4_format_sock aktualisiert():
static void udp4_format_sock(struct sock *sp, struct seq_file *f,
int bucket)
{
...
seq_printf(f, "%5d: %08X:%04X %08X:%04X"
" %02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %d",
bucket, src, srcp, dest, destp, sp->sk_state,
sk_wmem_alloc_get(sp),
sk_rmem_alloc_get(sp),
sk_wmem_alloca_get und sk_rmem_alloc_get sk_wmem_alloc und sk_rmem_alloc zurückkehren bzw. sind beide in Bytes.
Hoffe, das hilft.