Cómo saber el tamaño de la caché del socket, si existe un límite superior para esta caché y si se desbordará
1: ¿Cómo saber el tamaño del buffer del socket?
El tamaño del búfer del socket se puede obtener a través de la opción socket. (El siguiente es el código de Python, sock es un objeto de socket)
sock.getsockopt(SOL_SOCKET, SO_RCVBUF): obtiene el tamaño del búfer de recepción
sock.getsockopt(SOL_SOCKET, SO_SNDBUF): obtiene el tamaño del búfer de envío
Nota: el protocolo UDP no tiene un búfer de envío en la implementación del kernel.
2: ¿Existe un límite superior para este búfer?
Hay un límite superior en el búfer. Hay un límite superior en el búfer de cada objeto de socket. También hay un límite superior en el tamaño total de todos los búferes de socket en el sistema.
Tres: ¿Se desbordará?
El protocolo TCP es un protocolo confiable de flujo de bytes ordenados. Su confiabilidad está relacionada con el mecanismo de ventana deslizante del extremo receptor, y la ventana deslizante está relacionada con el búfer de recepción TCP.
El búfer del protocolo TCP no se desbordará. Si el búfer de recepción está lleno, la ventana de notificación es 0 y los datos enviados por el extremo emisor no se pueden recibir. Si el búfer de envío está lleno (significa que el búfer de recepción del par debe estar lleno), la llamada de envío de la capa de aplicación se bloquea (mediante el bloqueo de IO). Por lo tanto, el búfer del protocolo TCP no se desbordará.
El búfer del protocolo UDP se desbordará. No hay búfer de envío en la implementación del protocolo UDP. Hay un límite superior en el búfer de recepción. Cuando el búfer de recepción UDP alcanza el límite superior. Los datagramas recibidos en el futuro se descartarán directamente. Esta es también una de las razones por las que el protocolo UDP no es confiable.
------------------------------------------- -------------------------------------------------- -- -------------
Te recomiendo que eches un vistazo a la serie "Programación de redes de alto rendimiento" de Tao Hui, definitivamente te beneficiarás mucho.