Tengo una aplicación de transmisión de video que funciona bien en mi oficina pero falla miserablemente en la ubicación del cliente. El síntoma es que cada dos segundos, dejo de recibir paquetes UDP durante 2 segundos, luego la secuencia se reanuda como si nada estuviera mal.
Ejecuté http://www.pingtest.net/ en la ubicación del cliente y resultó excelente. Sin paquetes descartados y baja latencia. La única diferencia que noté entre nuestras dos ubicaciones es que se ping google.ca
agota el tiempo en su ubicación pero funciona en la mía.
¿Cómo pruebo si la red en la que estoy bloquea los paquetes UDP entrantes? ¿Hay alguna forma de aislar quién deja caer los paquetes?
networking
udp
Gili
fuente
fuente
Respuestas:
Puede intentar establecer una conexión UDP con
netcat
.En una máquina A fuera de la red del consumidor, ejecute:
Tenga en cuenta lo
-u
que indica a netcat que use UDP. (Y también tenga en cuenta que hay diferentes versiones denetcat
, que necesitarán el-p
parámetro o no; las variantes de las dos más comunes (?), Incluidas ambas en Debian).En el lugar del consumidor:
nc -u [addr of machine A] 1234
.Intente enviar enviar algún texto, o incluso mejor usar tuberías para enviar un archivo entre ambas ubicaciones y hacer una diferencia después.
fuente
-l
“It is an error to use this option in conjunction with the -p, -s, or -z options.
”, por lo que he corregido el comando a uno que he probado para trabajar. Además, he cambiado 'ip' a 'addr' porque los nombres de host también se pueden usar, y en cierto sentido son una 'dirección'.addr
vs.ip
Pero ahora con su comando, recibo un error:listen needs -p arg
(también probé mis comandos dados en la respuesta;)
). Hay varios nc por ahí, si da más detalles como la versión de nc y / o su distribución, agregaré una nota a mi respuesta.nc
comando predeterminado es enlace simbólico/bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsd
proporcionado por el paquete Debiannetcat-openbsd
. Mi máquina Ubuntu local también tienenc.openbsd
por defecto. Ninguno aceptará-l -p
. También he instaladoncat
en ambas máquinas desde elnmap
paquete Ubuntu / Debian. la máquina Debian más antigua, sencat
niega-l -p
, peroncat
en Ubuntu acepta en ambos sentidos. Aunque la versión Debian debe ser antigua ya que molestamente no tiene la--sctp
opción.: - /nc
variante? Noto que también hay unnetcat-traditional
paquete ' ', pero no lo he probado.netcat-traditional
(v 1.10-38) ya que se envía con Debian. Gracias por su sugerencia, incluí ahora ambas variantes en la respuesta.en el lado del servidor, establezca un servidor UPD con
en el lado del cliente, verifique la conexión UDP con
fuente
Los
netcat
comandos en la respuesta de mpy son útiles para fines de diagnóstico, pero estoy complementando esa respuesta con otro enfoque para su problema subyacente.Puede valer la pena hacer que su aplicación recurra a SCTP , o incluso a TCP. En realidad, encontré esta pregunta porque estaba buscando cómo rechazar los paquetes UDP entrantes de los usuarios que usan más de su parte del enlace descendente cuando está congestionado, porque a diferencia de SCTP y TCP, UDP no tiene control de congestión, lo que hace que sea muy difícil priorizar el enlace descendente tráfico.
Tanto SCTP como TCP tienen control de congestión y funcionan muy bien con QoS, pero SCTP tiene el beneficio adicional sobre TCP que fue diseñado para aplicaciones de transmisión en tiempo real, lo que lo convierte en un buen reemplazo tanto para TCP como para UDP. En efecto, SCTP es el mejor de los dos protocolos de transporte más comunes.
No puede ser una mala idea tener un respaldo, en lugar de confiar solo en UDP. Incluso si solo recurre a TCP, al menos puede decir que está funcionando, tal vez no de manera óptima.
fuente