Linux – Medición de failover con Ping

por | 18 noviembre, 2011

El tiempo de failover es el tiempo que tarda una red en reaccionar ante una caída de comunicaciones, o lo que es lo mismo, el tiempo en levantar y cursar tráfico un camino o enlace alternativo. Para medir este tiempo se puede usar la técnica siguiente: lanzamos paquete cada periodo de tiempo un con una marca de tiempo absoluta. Restando la marca de tiempo de cada paquete con su paquete anterior, obtenemos la diferencia de tiempo entre cada paquete, la cual debe ser aproximada a la frecuencia de envío de paquetes. En el momento de producirse el failover, se parará el envío de paquetes hasta que el enlace de respaldo se active. En ese momento obtendremos dos paquetes con un diferencia de tiempo que corresponde al failover de la red para ese fallo.

El comando ping de Linux ejecutado como root, permite introducir una serie de parámetros avanzados. En el siguiente ejemplo se lanza un ping cada milisegundo usando un timestamp absoluto y se va restando el tiempo de cada paquete con el anterior. Es decir va midiendo cuanto tarda cada paquete con respecto al anterior con una resolución teórica de milisegundos.

 # ping  -i 0.001  -T tsonly 192.168.3.14|awk 'BEGIN{t=0;}/TS/{printf "Inc.T=%s\n",$2-t;t=$2}'

En ocasiones usar una resolución de milisegundos puede dar resultados incoherentes en redes lentas ya que el tiempo normal de transito puede superar el valor del milisegundo.  En esos casos, podemos indicar un intervalo mayor, por ejemplo una décima de segundo. Es ese caso se lanza un paquete cada 100 ms los intervalos de tiempo vendán indicados cada 100 milisegundos:

 # ping  -i 0.1  -T tsonly 192.168.3.50|awk 'BEGIN{t=0;}/TS/{printf "Inc.T=%s\n",$2-t;t=$2}'
 Inc.T=45159963
 Inc.T=102
 Inc.T=100
 Inc.T=100
 Inc.T=101
 Inc.T=100
 Inc.T=101
 Inc.T=100
 Inc.T=100
 Inc.T=100
 Inc.T=102
 Inc.T=100

(nota: el primer valor siempre será erróneo al disponer sólo de un valor en la resta.)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *