GNU/Linux >> Belajar Linux >  >> Linux

Cara menemukan ukuran buffer soket linux

Jika Anda ingin melihat ukuran buffer Anda di terminal, Anda dapat melihat:

  • /proc/sys/net/ipv4/tcp_rmem (untuk dibaca)
  • /proc/sys/net/ipv4/tcp_wmem (untuk menulis)

Mereka berisi tiga angka, yaitu nilai ukuran memori minimum, default, dan maksimum (dalam byte).


Sementara, seperti yang telah ditunjukkan, adalah mungkin untuk melihat default saat ini ukuran buffer soket di /proc , Anda juga dapat memeriksanya menggunakan sysctl (Catatan:Meskipun namanya menyertakan ipv4, ukuran ini juga berlaku untuk soket ipv6 - kode ipv6 tcp_v6_init_sock() hanya memanggil fungsi ipv4 tcp_init_sock()):

 sysctl net.ipv4.tcp_rmem
 sysctl net.ipv4.tcp_wmem

Namun, buffer soket default hanya disetel saat kaus kaki diinisialisasi tetapi kernel kemudian secara dinamis mengukurnya (kecuali disetel menggunakan setockopt() dengan SO_SNDBUF). Ukuran sebenarnya dari buffer untuk soket yang sedang terbuka dapat diperiksa menggunakan ss perintah (bagian dari iproute /iproute2 paket), yang juga dapat memberikan lebih banyak info tentang soket seperti parameter kontrol kemacetan dll. E.g. Untuk mendaftar TCP yang sedang terbuka (t opsi) soket dan memori terkait (m ) informasi:

ss -tm

Berikut ini beberapa contoh keluaran:

State       Recv-Q Send-Q        Local Address:Port        Peer Address:Port
ESTAB       0      0             192.168.56.102:ssh        192.168.56.1:56328
skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)

Berikut penjelasan singkat tentang skmem (memori soket) - untuk info selengkapnya, Anda perlu melihat sumber kernel (mis. sock.h):

r:sk_rmem_alloc
rb:sk_rcvbuf          # current receive buffer size
t:sk_wmem_alloc
tb:sk_sndbuf          # current transmit buffer size
f:sk_forward_alloc
w:sk_wmem_queued      # persistent transmit queue size
o:sk_omem_alloc
bl:sk_backlog
d:sk_drops

Untuk mendapatkan ukuran buffer pada program c/c++ berikut adalah alurnya

int n;
unsigned int m = sizeof(n);
int fdsocket;
fdsocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // example
getsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);
// now the variable n will have the socket size

Linux
  1. Cara Menggunakan Perintah find Linux untuk Menemukan File

  2. Bagaimana menemukan semua file yang jarang di Linux

  3. Bagaimana menemukan ukuran partisi yang tidak di-mount di Linux?

  1. Cara mengubah ukuran MTU di Linux

  2. Bagaimana cara menemukan ukuran tumpukan maksimum?

  3. Cara mem-pipe hasil 'find' ke mv di Linux

  1. Cara Mengetahui Apakah Disk Adalah SSD Atau HDD Di Linux

  2. Bagaimana cara mendapatkan ukuran fisik file di Linux?

  3. Cara menemukan alamat IP gateway di Linux