nagle karn control congestion algoritmo tcp network-programming network-protocols congestion-control

karn - ¿Hay un algoritmo para tomar las huellas dactilares del algoritmo de control de congestión TCP utilizado en una sesión capturada?



algoritmo de nagle (1)

Me gustaría un programa para determinar el algoritmo de control de congestión TCP utilizado en una sesión TCP capturada.

El artículo de Wikipedia mencionado hace referencia a:

TCP Nuevo Reno es el algoritmo más comúnmente implementado, el soporte de SACK es muy común y es una extensión de Reno / New Reno. La mayoría de los otros son propuestas competitivas que aún necesitan evaluación. Comenzando con 2.6.8, el kernel de Linux cambió la implementación predeterminada de reno a BIC. La implementación predeterminada se cambió nuevamente a CUBIC en la versión 2.6.19.

También:

El Compuesto TCP es una implementación de Microsoft de TCP que mantiene dos ventanas de congestión diferentes simultáneamente, con el objetivo de lograr un buen rendimiento en LFN sin perjudicar la equidad. Se ha implementado ampliamente con Microsoft Windows Vista y Windows Server 2008 y se ha migrado a versiones anteriores de Microsoft Windows, así como a Linux.

¿Cuáles serían algunas estrategias para determinar qué algoritmo de CC está en uso (de un tercero que captura la sesión)?

Actualizar

Este proyecto ha desarrollado una herramienta para hacer esto:

Internet recientemente ha evolucionado desde el control homogéneo de la congestión hasta el control heterogéneo de la congestión. Hace varios años, el tráfico de Internet estaba controlado principalmente por el algoritmo TCP AIMD estándar, mientras que el tráfico de Internet ahora está controlado por muchos algoritmos de control de congestión TCP diferentes, como AIMD, BIC, CUBIC, CTCP, HSTCP, HTCP, HYBLA, ILLINOIS, LP, STCP, VEGAS, VENO, WESTWOOD + y YEAH. Sin embargo, hay muy poco trabajo en el estudio de rendimiento y estabilidad de Internet con control de congestión heterogéneo. Una razón fundamental es la falta de información de despliegue de diferentes algoritmos TCP. Los objetivos de este proyecto son:

1) develop tools for identifying the TCP algorithms in the Internet, 2) conduct large-scale TCP-algorithm measurements in the Internet.


Hay muchos más algoritmos de control de la congestión de los que mencionas aquí, la lista incluye: RÁPIDO, escalable, HSTCP, HTCP, Bic, Cubic, Veno, Vegas.

También hay pequeñas variaciones de ellos debido a correcciones de errores en implementaciones reales y supongo que las implementaciones en diferentes sistemas operativos también se comportan ligeramente diferentes entre sí.

Pero si tengo que intentar una idea sería estimar el RTT de la conexión, puede intentar ver el tiempo que tomó entre el tercer y el cuarto paquete, ya que el primer y el segundo paquete pueden estar contaminados. por ARP y otros algoritmos de descubrimiento a lo largo de la ruta.

Después de que tengas un estimado para RTT podrías intentar refinarlo en el camino, aunque no estoy muy seguro de cómo podrías hacerlo. Pero no necesita una especificación completa para el programa, solo ideas :-)

Con el RTT resuelto puede intentar colocar los paquetes en contenedores RTT y contar la cantidad de paquetes de datos en vuelo en cada contenedor. De esta forma, podrá "trazar" el tiempo estimado de cwnd estimado (número de paquetes en el contenedor) y probar algún patrón que coincida.

Una alternativa sería ir a lo largo del seguimiento y tratar de "ejecutar" en su cabeza los diferentes algoritmos de control de congestión y ver si la decisión en algún momento coincide con la decisión que habría tomado. Se requerirán algunos intervalos de indulgencia y precisión.

¡Definitivamente esto parece una tarea interesante y desafiante!