Red de conocimiento informático - Conocimiento informático - Cómo evitar el TIEMPO TCP

Cómo evitar el TIEMPO TCP

Cómo reducir el estado tcptime_wait

Método 1: grupo de subprocesos Función del grupo de subprocesos La conexión del socket no está cerrada y, naturalmente, reduce el estado time_wait

Método 2: establezca la opción de socket SO_LINGER socket a través setsockoptAPI La terminación anormal de la conexión envía RST no Ingrese cuatro ondas

La explicación más clara se encuentra en Programación de redes Unix Volumen 1 (Capítulo 7.5).

El valor de SO_LINGER está representado por la siguiente estructura de datos: structlinger{intl_onoff;/*0=off,nozero=on*/intl_ l_linger;/*lingertime*/};

Su valor Y el procesamiento es el siguiente:

1. Establecer l_onoff en 0 desactivará la opción, el valor de l_linger será ignorado y será igual al valor predeterminado del kernel si existe alguna posibilidad de. al transmitir cualquier dato no enviado, la llamada de apagado se realizará inmediatamente a la persona que llama;

2. Establecer l_onoff en un valor distinto de cero y l_linger en cero hará que TCP cancele la conexión al cerrar el socket, y TCP descartará el búfer de envío del socket. Cualquier dato retenido y enviará RST a la otra parte en lugar de la secuencia habitual de terminación de cuatro paquetes, evitando así el estado TIME_WAIT

3. El kernel cerrará el socket cuando se retrase durante un período de tiempo (determinado por l_linger).

Si quedan datos en el búfer del socket, el proceso se suspenderá hasta que (a) la otra parte envíe y reconozca todos los datos, y luego se realice la secuencia de terminación normal (el recuento de acceso al descriptor es 0 )

Método 3: Modificar la configuración del sistema (no recomendado)

Cambie los dos parámetros del kernel en la línea Sysctl de la siguiente manera: net.ipv4 .tcp_tw_reuse=1net.ipv4.tcp_tw_recycle= 1

En pocas palabras, active la reutilización TIMEWAIT y el bucle rápido del sistema

.