GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo encontrar el tamaño del búfer de socket de Linux

Si desea ver el tamaño de su búfer en la terminal, puede consultar:

  • /proc/sys/net/ipv4/tcp_rmem (para leer)
  • /proc/sys/net/ipv4/tcp_wmem (para escribir)

Contienen tres números, que son valores de tamaño de memoria mínimo, predeterminado y máximo (en bytes), respectivamente.


Si bien, como se ha señalado, es posible ver el predeterminado actual tamaños de búfer de socket en /proc , también es posible verificarlos usando sysctl (Nota:si bien el nombre incluye ipv4, estos tamaños también se aplican a los sockets ipv6; el código ipv6 tcp_v6_init_sock() solo llama a la función ipv4 tcp_init_sock()):

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

Sin embargo, los búferes de socket predeterminados solo se establecen cuando se inicializa el sock, pero luego el núcleo los dimensiona dinámicamente (a menos que se establezca mediante setsockopt() con SO_SNDBUF). El tamaño real de los búferes para los sockets actualmente abiertos se puede inspeccionar usando el ss comando (parte del iproute /iproute2 paquete), que también puede proporcionar mucha más información sobre sockets como el parámetro de control de congestión, etc. Para enumerar el TCP actualmente abierto (t opción) sockets y memoria asociada (m ) información:

ss -tm

Aquí hay algunos resultados de ejemplo:

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)

Aquí hay una breve explicación de skmem (memoria de socket):para obtener más información, deberá consultar las fuentes del kernel (es decir, 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

Para obtener el tamaño del búfer en el programa c/c++, el siguiente es el flujo

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. Cómo usar el comando find de Linux para buscar archivos

  2. Cómo encontrar todos los archivos dispersos en Linux

  3. Cómo cambiar el tamaño de MTU en Linux

  4. ¿Cómo encuentro el tamaño máximo de pila?

  5. Cómo canalizar los resultados de 'buscar' a mv en Linux

Cómo encontrar el número de puerto de un servicio en Linux

Cómo encontrar el tamaño de un directorio en Linux

Cómo encontrar la dirección IP en Linux

Cómo encontrar el tamaño total de un directorio en Linux

Cómo encontrar archivos con el comando fd en Linux

Cómo encontrar la lista de repositorios instalados en Linux