Introducción
ssmping es una pequeña utilidad para probar la conectividad de tráfico multicast entre hosts. asmping es una simple variación de ssmping en la que le podemos indicar por línea de comandos el grupo (IP multicast) multicast en el que generar tráfico.
Funcionamiento
Ssmping es una utilidad que funciona en modo cliente-servidor. En un host debemos ejecutar ssmpingd, el cual permanecerá ejecutándose a la espera de conexiones. Ssmpingd no tiene opciones en línea de comandos.
Desde otra máquina actuando como cliente ssmping envía al servidor (identificado por su IP unicast) una petición ssmping (ssmping request). El servidor atiende a la petición y responde un paquete ssmping de repuesta (ssmping reply) unicast y otro multicast SSM (Source Specific Multicast). Las respuesta obtenidas en el cliente permiten obtener datos de retardo, paquetes perdidios, etc.
ssmping utiliza el grupo multicast identificado por la IP 232.43.211.234 y no permite cambiarlo.
assmping funciona exáctamente igual pero permite al cliente especificar el grupo multicast mediante ASM (Any Source Multicast) en el que enviará el servidor.
ssmping utiliza un intervalo de un segundo entre cada paquete no siendo una opción contemplada el poder cambiar ducho intervalo.
Opciones de ssmping:
ssmping [ -46v ] [ -I interface ] [ -c count ] [ -s size ] host
-4 Uso de IPv4 (por defecto)
-6 Uso de IPv6
-v Visuliza la versión del cliente y el servidor
-I interface
Interface a usar (eth0, eth1, etc.)
-c n
Detención después de n peticiones enviadas y recibidas
-s size
Petición de respuestas que tienen un tamaño en bytes determinado
host Dirección IP (unicast) del servidor ssmpingd
Opciones de asmping:
asmping [ -46v ] [ -I interface ] [ -c count ] [ -s size ] group host
group Identifica el grupo multicast que usará el servidor para emitir tráfico multicast
Todas las demás opciones de asmping son idénticas a ssmping exepto en que asmping dispone de la opción group.
Instalación
1. Descarga de ssmping/asmping:
http://www.venaas.no/multicast/ssmping/ssmping-0.9.1.tar.gz
2. Descomprimimos el archivo gz en un directorio de trabajo.
3. Instalamos. Para ello ejecutamos make install y el Makefile proporcionado se encargará
de compilar y copiar el sistema los archivos necesarios:
[root@localhost ssmping-0.9.1]# make install cc -c -o ssmpngcl.o ssmpngcl.c cc -c -o ssmpingc.o ssmpingc.c cc -c -o joinch.o joinch.c cc ssmping.c ssmpngcl.o ssmpingc.o joinch.o -o ssmping cc -c -o joingrp.o joingrp.c cc asmping.c ssmpngcl.o ssmpingc.o joingrp.o -o asmping cc ssmpingd.c ssmpngcl.o ssmpingc.o -o ssmpingd cc mcfirst.c ssmpngcl.o ssmpingc.o joinch.o joingrp.o -o mcfirst install -D ssmping /usr/local/bin/ssmping install -D asmping /usr/local/bin/asmping install -D ssmpingd /usr/local/bin/ssmpingd install -D mcfirst /usr/local/bin/mcfirst install -D ssmping.1 /usr/local/man/man1/ssmping.1 install -D asmping.1 /usr/local/man/man1/asmping.1 install -D mcfirst.1 /usr/local/man/man1/mcfirst.1 [root@localhost ssmping-0.9.1]#
Esta instalación incluye los ejecutables ssmpingd, ssmping y asmpong. El servidor ssmpingd es el mismo para ambos clientes ssmping y asmping.
Esta instalación ha de hacerse en los dos host, cliente y servidor.
(El paquete contiene otra utilidad llamada mcfisrt la cual soporta IPv4 e IV4, paquetes SSM y ASM. La utilidad mcfirst se usa para verificar si puede recibir cualquier sesion multicast ASM/SSM.)
Ejemlos
1. Ejecutamos ssmpingd en el servidor:
[s80usr@s80sb ssmping-0.9.1]$ ssmpingd
Este servidor tiene en nuestro caso como direción IP unicast la 192.168.0.111.
Ahora ejecutamos el comando ssmping en el cliente indicandiole la IP del servidor:
[s80usr@localhost ~]$ ssmping 192.168.0.111 ssmping joined (S,G) = (192.168.0.111,232.43.211.234) pinging S from 192.168.0.222 unicast from 192.168.0.111, seq=1 dist=0 time=0.193 ms multicast from 192.168.0.111, seq=1 dist=0 time=0.204 ms unicast from 192.168.0.111, seq=2 dist=0 time=0.160 ms multicast from 192.168.0.111, seq=2 dist=0 time=0.165 ms unicast from 192.168.0.111, seq=3 dist=0 time=0.128 ms multicast from 192.168.0.111, seq=3 dist=0 time=0.133 ms unicast from 192.168.0.111, seq=4 dist=0 time=0.215 ms multicast from 192.168.0.111, seq=4 dist=0 time=0.220 ms unicast from 192.168.0.111, seq=5 dist=0 time=0.183 ms multicast from 192.168.0.111, seq=5 dist=0 time=0.188 ms unicast from 192.168.0.111, seq=6 dist=0 time=0.148 ms multicast from 192.168.0.111, seq=6 dist=0 time=0.153 ms --- 192.168.0.111 statistics --- 6 packets transmitted, time 5459 ms unicast: 6 packets received, 0% packet loss rtt min/avg/max/std-dev = 0.128/0.171/0.215/0.030 ms multicast: 6 packets received, 0% packet loss since first mc packet (seq 1) recvd rtt min/avg/max/std-dev = 0.133/0.177/0.220/0.030 ms [s80usr@localhost ~]$
Cortamos con ctrl+c el cliente.
El servidor registra las peticiones:
[s80usr@s80sb ssmping-0.9.1]$ ssmpingd received request from 192.168.0.222 received request from 192.168.0.222 received request from 192.168.0.222 received request from 192.168.0.222 received request from 192.168.0.222 received request from 192.168.0.222
2. Sobre el mismo servidor efectuamos ssmping de cinco paquete con tamaño de 128 bytes y las respuestas multicas has de recibirse por el interfaz eth 0.
[s80usr@localhost ~]$ ssmping -c 5 -s 128 -I eth0 192.168.0.111 ssmping joined (S,G) = (192.168.0.111,232.43.211.234) pinging S from 192.168.0.222 unicast from 192.168.0.111, seq=1 dist=0 time=0.147 ms multicast from 192.168.0.111, seq=1 dist=0 time=0.155 ms unicast from 192.168.0.111, seq=2 dist=0 time=0.173 ms multicast from 192.168.0.111, seq=2 dist=0 time=0.177 ms unicast from 192.168.0.111, seq=3 dist=0 time=0.120 ms multicast from 192.168.0.111, seq=3 dist=0 time=0.243 ms unicast from 192.168.0.111, seq=4 dist=0 time=0.191 ms multicast from 192.168.0.111, seq=4 dist=0 time=0.196 ms unicast from 192.168.0.111, seq=5 dist=0 time=0.137 ms multicast from 192.168.0.111, seq=5 dist=0 time=0.142 ms --- 192.168.0.111 statistics --- 5 packets transmitted, time 5000 ms unicast: 5 packets received, 0% packet loss rtt min/avg/max/std-dev = 0.120/0.153/0.191/0.028 ms multicast: 5 packets received, 0% packet loss since first mc packet (seq 1) recvd rtt min/avg/max/std-dev = 0.142/0.182/0.243/0.038 ms [s80usr@localhost ~]$
3. Efectuamos ssmping indicando grupo multicast 224.1.2.3:
[s80usr@localhost ~]$ asmping 224.1.2.3 192.168.0.111 asmping joined (S,G) = (*,224.1.2.234) pinging 192.168.0.111 from 192.168.0.222 unicast from 192.168.0.111, seq=1 dist=0 time=0.103 ms multicast from 192.168.0.111, seq=1 dist=0 time=0.112 ms unicast from 192.168.0.111, seq=2 dist=0 time=0.114 ms multicast from 192.168.0.111, seq=2 dist=0 time=0.121 ms unicast from 192.168.0.111, seq=3 dist=0 time=0.205 ms multicast from 192.168.0.111, seq=3 dist=0 time=0.209 ms unicast from 192.168.0.111, seq=4 dist=0 time=0.172 ms multicast from 192.168.0.111, seq=4 dist=0 time=0.177 ms unicast from 192.168.0.111, seq=5 dist=0 time=0.138 ms multicast from 192.168.0.111, seq=5 dist=0 time=0.144 ms --- 192.168.0.111 statistics --- 5 packets transmitted, time 4498 ms unicast: 5 packets received, 0% packet loss rtt min/avg/max/std-dev = 0.103/0.146/0.205/0.039 ms multicast: 5 packets received, 0% packet loss since first mc packet (seq 1) recvd rtt min/avg/max/std-dev = 0.112/0.152/0.209/0.038 ms [s80usr@localhost ~]$
4. Efectuamos asmping sobre el mismo servidor indicando grupo multicast identificado por la IP 239.192.101.1 de siete paquete con tamaño de 64 bytes utilizando para multicast el interfaz eth 0.
[s80usr@localhost ~]$ asmping -c 7 -s 64 -I eth0 239.192.100.1 192.168.0.111 asmping joined (S,G) = (*,239.192.100.234) pinging 192.168.0.111 from 192.168.0.222 unicast from 192.168.0.111, seq=1 dist=0 time=0.136 ms multicast from 192.168.0.111, seq=1 dist=0 time=0.143 ms unicast from 192.168.0.111, seq=2 dist=0 time=0.190 ms multicast from 192.168.0.111, seq=2 dist=0 time=0.194 ms unicast from 192.168.0.111, seq=3 dist=0 time=0.139 ms multicast from 192.168.0.111, seq=3 dist=0 time=0.145 ms unicast from 192.168.0.111, seq=4 dist=0 time=0.212 ms multicast from 192.168.0.111, seq=4 dist=0 time=0.217 ms unicast from 192.168.0.111, seq=5 dist=0 time=0.153 ms multicast from 192.168.0.111, seq=5 dist=0 time=0.157 ms unicast from 192.168.0.111, seq=6 dist=0 time=0.223 ms multicast from 192.168.0.111, seq=6 dist=0 time=0.227 ms unicast from 192.168.0.111, seq=7 dist=0 time=0.171 ms multicast from 192.168.0.111, seq=7 dist=0 time=0.175 ms --- 192.168.0.111 statistics --- 7 packets transmitted, time 7000 ms unicast: 7 packets received, 0% packet loss rtt min/avg/max/std-dev = 0.136/0.174/0.223/0.036 ms multicast: 7 packets received, 0% packet loss since first mc packet (seq 1) recvd rtt min/avg/max/std-dev = 0.143/0.179/0.227/0.035 ms [s80usr@localhost ~]$
5. Un ejemplo de mcfirst:
$ mcfirst -c 4 224.2.127.254 9875 mcfirst joined (*,G) = (*,224.2.127.254) Received 255 bytes from 163.117.180.90 after 12.948 ms (ttl/hops 237) Received 471 bytes from 130.104.10.139 after 52.974 ms (ttl/hops 240) Received 294 bytes from 141.225.215.20 after 139.631 ms (ttl/hops 236) Received 641 bytes from 193.190.113.20 after 243.353 ms (ttl/hops 242) 1661 bytes (payload) and 4 packets received in 0 seconds Average rate: 48.818 kbits of payload per second Estimated average rate including all headers: 51.735 kbits per second
mcfisrt hace que el equipo se suscriba a un grupo multicast determinado y se quede esperando respuestas. Al primer paquete recibido se detiene, a menos que se le indique un número de respuestas determinado (como en este caso 4).
Carencias encontradas
Como deficiencias detectadas existen tres principalmente:
1. No existe opción para permitir indicar el intervalo entre peticiones y éste debería de poder hacerse al menos en el rango de milisegundos.
2. No hay opción para mostrar los timestamp obsolutos entre cada paquete.
3. No hay opción para especificar el puerto UDP usado para multicast.
Referencias
[1] http://www.venaas.no/multicast/ssmping/
[2] http://tools.ietf.org/html/draft-ietf-mboned-ssmping-02