Me gustaría simular el retraso y la pérdida de paquetes para UDP
y TCP
en Linux para medir el rendimiento de una aplicación. ¿Hay una manera simple de hacer esto?
linux
tcp
throttling
George Stocker
fuente
fuente
Respuestas:
Netem aprovecha la funcionalidad ya integrada en Linux y las utilidades de espacio de usuario para simular redes. Esto es en realidad a lo que se refiere la respuesta de Mark, con un nombre diferente.
Los ejemplos en su página de inicio ya muestran cómo puede lograr lo que ha pedido:
Tenga en cuenta que debe usarlo
tc qdisc add
si no tiene reglas para esa interfaz otc qdisc change
si ya tiene reglas para esa interfaz. Intentar usartc qdisc change
en una interfaz sin reglas dará el errorRTNETLINK answers: No such file or directory
.fuente
tc -p qdisc ls dev eth0
habrá una lista de reglas definidas actuales, ytc qdisc del dev eth0 root
los eliminaráPara los paquetes descartados, simplemente usaría iptables y el módulo estadístico .
Arriba caerá un paquete entrante con una probabilidad del 1%. Tenga cuidado, cualquier cosa por encima de 0.14 y la mayoría de sus conexiones tcp probablemente se bloqueará por completo.
Eche un vistazo a man iptables y busque "estadística" para obtener más información.
fuente
DROP
en cuenta que en las conexiones de salida hace que lassend()
operaciones regresen de forma bastante ridículaEPERM
, en lugar de simplemente descartar paquetes (como debería).iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP
Uno de mis colegas usa tc para hacer esto. Consulte la página del manual para obtener más información. Puede ver un ejemplo de su uso aquí .
fuente
iptables (8) tiene un módulo de coincidencia estadística que se puede usar para hacer coincidir cada enésimo paquete. Para descartar este paquete, simplemente agregue -j DROP .
fuente
Este tutorial sobre simulaciones físicas de redes contiene una clase de C ++ en el código de muestra para simular la latencia y la pérdida de paquetes en una conexión UDP y puede ser una guía. Vea la latencia pública y las variables packetLoss de la clase Connection que se encuentran en el archivo Connection.h del código fuente descargable .
fuente
No lo he intentado yo mismo, pero esta página tiene una lista de módulos de complemento que se ejecutan en el sistema de filtrado IP integrado de Linux 'iptables'. Uno de los módulos se llama "enésimo" y le permite configurar una regla que eliminará una velocidad configurable de los paquetes. Podría ser un buen lugar para comenzar, al menos.
fuente
Puede probar http://snad.ncsl.nist.gov/nistnet/ Es un proyecto NIST bastante antiguo (última versión 2005), pero funciona para mí.
fuente
Una herramienta de inyección de fallas de red fácil de usar es Saboteur . Puede simular:
fuente
Una de las herramientas más utilizadas en la comunidad científica para ese fin es DummyNet . Una vez que haya instalado el
ipfw
módulo del núcleo, para introducir un retraso de propagación de 50 ms entre 2 máquinas, simplemente ejecute estos comandos:Para introducir también el 50% de las pérdidas de paquetes, debe ejecutar:
Aquí más detalles.
fuente