Búsqueda de cuándo se transmite realmente un paquete UDP en el enrutador OpenWrt

0

Estoy usando un enrutador Linksys WRT 1900 ACS con OpenWrt 15.05.1. Estoy ejecutando un programa en C que envía ciertos paquetes de WiFi UDP Multicast a intervalos regulares (de 16 ms) y luego imprime la hora del sistema en la salida estándar. Puedo ver claramente las irregularidades en el extremo receptor, pero no aparecen en los valores de tiempo impresos.

Esto me lleva a creer que se está produciendo cierto nivel de búfer / espera incluso después de que se devuelve la llamada al sistema sendto () ¿Cómo puedo obtener la hora a la que se emite realmente el paquete?

Nota: Las irregularidades son las mismas en todos los receptores en esa red de multidifusión, por lo que el problema no está en el extremo del receptor.

Nisheeth Lahoti
fuente
La transmisión / multidifusión en WiFi es especial en lo que respecta al cifrado y la prioridad. Lo que sea que estés haciendo probablemente no sea óptimo considerando WiFi.
Daniel B
Creo que UDP está diseñado como un protocolo donde esto no sería posible.
Ramhound

Respuestas:

0

Desafortunadamente, no puedes.

TL; DR

los sendto La función regresa tan pronto como el paquete se haya enviado a la pila de IP. La pila de IP del núcleo lo procesará e intentará enviar el paquete a través de su interfaz WiFi.

Aquí radica el problema, el retraso en la transmisión de WiFi es largo (en comparación con Ethernet por cable) e irregular. Aquí hay un ejemplo de la latencia que debe esperar:

Wifi VS Wired ping time log

Este gráfico logarítmico muestra el tiempo de espera de ping entre mi servidor y mi enrutador y entre mi servidor y un cliente inalámbrico. Ya que ping es bidireccional, la latencia unidireccional es probablemente alrededor de la mitad de eso.

La comunicación por cable muestra un tiempo de ping alrededor de 300us, mientras que los enlaces inalámbricos muestran un promedio de 7 ms (23 veces más de retraso).

Ahora casi el mismo gráfico, esta vez lineal para resaltar la irregularidad:

Wifi VS Wired ping time linear

El tiempo de ping wifi varía entre 6 y 45 ms.

Soluciones?

Desde el sendto La función regresa antes de lo que esperaba, realmente no puede medir en qué momento se envían los paquetes. Si está realmente interesado en el momento en que se envía el paquete, probablemente pueda estimarlo esperando una respuesta del cliente y reduciendo el tiempo de ida y vuelta.

Pero, como ya te diste cuenta , todos los clientes WiFi reciben el paquete al mismo tiempo, ya que es un multicast.

Así que la verdadera pregunta aquí es: ¿Qué estás intentando lograr?

Por ejemplo, si desea que todos sus clientes reproduzcan la misma transmisión de audio al mismo tiempo, algún tipo de software PLL debe hacer el truco

Si desea minimizar la demora, WiFi, aún puede intentar ajustar su configuración de WiFi, en particular las relacionadas con ahorro de energía, en el enrutador y en los clientes.

Y si quieres lograr algo duro en tiempo real Rendimiento, probablemente deberías olvidarte de WiFi.

pim
fuente