Saltar al contenido

UDP y TCP ​

UDP y TCP sin formato no tienen una pantalla propia. Son lo que usas para un dispositivo con su propio protocolo de texto o binario — un proyector, un servidor de medios, un sensor — y aparecen en varios sitios:

Para…Usa
enviar un datagrama o un mensaje TCP como paso, y esperar la respuestalos pasos de experimento
guardar un datagrama para enviarlo otra vez, o reproducir uno que capturasteuna señal UDP
enviar un datagrama desde un scriptsignallab send udp
enviar a muchos hosts a la vez, a una dirección de difusión o a un grupo de multidifusiónla pantalla Difusión
cargar un servidor o un enlace con tráficoTormenta
averiguar qué puertos TCP tiene abiertos un hostEscáner
hacer el papel del dispositivoun emulador de dispositivo UDP o TCP
empeorar la red entre dos extremosun relé de degradación

OSC es un formato transportado en datagramas UDP; tiene su propia página: OSC.

Cargas útiles ​

Allí donde escribas una carga útil sin formato, es de uno de dos tipos:

TipoQué se envíaEjemplo
TextoLos caracteres como UTF-8, exactamente como se escriben: sin terminador, sin añadir fin de línea. Un protocolo de líneas necesita su fin de línea en el texto.PING
Bytes en hexByte a byte, escritos como pares de dígitos hex. Se permiten espacios, :, - y , entre pares y un 0x delante de ellos.de ad be ef, DEADBEEF, 0xde,0xad

Un datagrama lleva como máximo 65 507 bytes. Un número impar de dígitos hex, o ninguno, es un error antes de enviar nada.

INFO

UDP no tiene acuse de recibo. "Enviado" significa que el datagrama salió de este equipo, no que algo lo recibiera. Para saber que un dispositivo te oyó, espera su respuesta.

Adónde va ​

Un destino es una dirección IP y un puerto, o un nombre de host y un puerto: 192.0.2.20:9000, [2001:db8::20]:9000 (una dirección IPv6 va entre corchetes), projector.local:9000. Esto vale para el destino de un paso UDP, un destino OSC, una señal UDP, signallab send udp y signallab send osc, la lista de Difusión, el destino de Tormenta y el host del paso TCP.

Un nombre de host se resuelve cada vez que se usa. Cuando tiene una dirección IPv4, se usa esa — así localhost llega a un servicio que escucha en 127.0.0.1, donde la primera dirección que un sistema lista para él puede ser ::1 — y un nombre que solo tiene direcciones IPv6 se alcanza desde un socket IPv6. Un nombre que no resuelve falla con Cannot resolve …; un destino sin puerto, o que no tiene ninguna de las dos formas, con … is not a valid address. Las direcciones en las que un servicio escucha (las de un monitor, una espera, un emulador) son siempre IP:port.

En experimentos ​

PasoQué hace
Datagrama UDPEnvía su Carga útil como texto a Host:puerto de destino. El destino es IP:port o host:port (arriba), y varios destinos separados por comas reciben cada uno el datagrama. Con esperar una respuesta envía desde Respuesta en (IP:puerto) y espera ahí una respuesta en el mismo paso. Detalles
Esperar UDPEscucha en Escuchar en (IP:puerto) (IP:port) y espera un datagrama cuya carga útil coincida. Detalles
Mensaje TCPSe conecta a Host y Puerto, escribe su Carga útil como texto, escucha 250 ms por si hay respuesta y cierra. El paso dice cuántos bytes volvieron, no qué eran. Detalles

La carga útil y el destino de UDP, el host y la carga útil de TCP, y el patrón de una espera aceptan {{templates}}, así que un datagrama puede llevar el id de la ejecución o un valor que extrajo un paso anterior. Consulta Datos y plantillas.

Hacer coincidir un datagrama ​

Esperar UDP y la respuesta de Datagrama UDP eligen un datagrama por su carga útil:

Carga útilAcepta un datagrama cuando
Cualquier datagramasiempre: el primero que llegue
Contiene el textosu carga útil, leída como texto, contiene el patrón
Coincide con la regexsu carga útil, leída como texto, coincide con la expresión regular
Contiene los bytes (hex)sus bytes contienen los bytes del patrón, escritos en hex

Lo que coincidió se guarda en la variable del paso (Variable de respuesta, reply salvo que la renombres): text, hex (los primeros 1024 bytes), bytes (el tamaño), from (el IP:port del emisor), ms (cuánto tardó) y match (el texto o los bytes encontrados, o el primer grupo de una expresión regular).

Una espera empieza a escuchar cuando empieza la ejecución, no cuando se llega al paso, así que una respuesta que llega muy rápido no se pierde. Solo toma lo que llegó después del último envío en su camino.

Límites y valores predeterminados ​

AjustePredeterminadoRango
Paso TCP: Tiempo de espera (ms) (conectar, escribir y la respuesta juntos)4000 ms1–120 000 ms
Tiempo de espera, ms de una espera o una respuesta2000 ms1–120 000 ms
Carga útil UDP—como máximo 65 507 bytes
Dirección de escucha—IP:port con un puerto; el Respuesta en (IP:puerto) de una respuesta puede usar el puerto 0 (cualquier puerto libre)

En el Inspector, el datagrama de un paso UDP aparece con el origen broadcast (o experiment cuando el paso espera una respuesta), y cada datagrama que llega al puerto de una espera con el origen experiment-wait. Un paso TCP aparece como dos tramas tcp con el origen experiment: la carga útil que escribió y, cuando llegó una, la respuesta que leyó. Su entrada en la línea de tiempo dice qué envió y cuán grande fue la respuesta.

Señales ​

Una señal UDP (sin formato) de la biblioteca es un destino y una carga útil, como texto o bytes en hex. Envíala desde Señales, o con Ctrl+K desde cualquier pantalla. Su destino puede ser un nombre de host.

Cualquier datagrama que el Inspector conservara entero puede convertirse en una: Guardar como señal crea una señal UDP hex, en la carpeta Capturadas, que reproduce esos bytes exactos — al destino de la trama si la trama se envió, a la dirección que la recibió si llegó (en este equipo, cuando esa era todas las direcciones). Una porción TCP no puede: es un trozo de un flujo. Consulta Señales y Inspector.

Una señal UDP de texto se puede añadir a un experimento como paso Datagrama UDP; una hex no, porque el paso envía texto.

Desde la línea de comandos ​

signallab send udp envía un datagrama:

bash
signallab send udp 127.0.0.1:9000 --text "PING"
signallab send udp 127.0.0.1:9000 --hex "de ad be ef"
text
✔ sent 4 bytes → 127.0.0.1:9000

Indica exactamente uno de --text y --hex. El destino es IP:port o host:port (arriba). Sale con 0 cuando el datagrama salió, 1 cuando el envío falló, y 2 cuando el destino o el hex no son válidos. No hay send tcp. Consulta Línea de comandos.

Tormenta ​

Tormenta es una fuente de carga para tus propios servidores y enlaces: un Inundación UDP envía datagramas de un tamaño fijo a una tasa fija, un Inundación de conexiones TCP abre una conexión, escribe la carga útil y cierra, una y otra vez. El caudal se mide en vivo. Consulta Tormenta.

Escáner ​

Escáner prueba una conexión TCP a cada puerto de un rango y lista los que aceptan, con lo que dice primero el servicio si pides banners. Consulta Escáner.

DANGER

Tormenta y Escáner envían tráfico real a hosts reales. Apúntalos solo a sistemas que sean tuyos o que puedas probar: una tormenta puede saturar un enlace, y ambos pueden activar la detección de intrusiones.

Dispositivos emulados ​

En la pantalla Emuladores, Signal Lab puede ser el dispositivo:

  • un Dispositivo UDP responde a los datagramas según reglas sobre su carga útil — cualquiera, que contenga un texto, que coincida con una expresión regular, que contenga bytes — con una respuesta de texto o hex construida a partir de lo que llegó, al emisor o a otro IP:port, tras un retardo si lo defines;
  • un Dispositivo TCP acepta conexiones, parte lo que llega en mensajes con un fin de línea que elijas (LF, CR LF, CR, o cada fragmento según llega), responde a cada uno con el mismo tipo de reglas, puede enviar un saludo cuando un cliente se conecta, y puede cerrar la conexión tras una respuesta.

Ambos pueden funcionar también como paso Emulador durante una ejecución. Consulta Emuladores.

Degradación ​

El relé de Degradación se sitúa entre un cliente y su destino y degrada lo que pasa: por datagrama sobre UDP (retardo, pérdida, duplicados, reordenación, un límite de ancho de banda) o por flujo sobre TCP (retardo, un límite de ancho de banda, conexiones restablecidas o dejadas semiabiertas). Consulta Degradación y, dentro de un experimento, Fallos.

"Puerto inalcanzable" en Windows ​

Cuando un datagrama llega a un puerto donde nada escucha, el equipo receptor suele responder con un mensaje ICMP "puerto inalcanzable". Windows informa de esa respuesta en la siguiente recepción del socket emisor, como si la conexión se hubiera restablecido — aunque UDP no tiene conexión.

Signal Lab cuenta con ello. Sus escuchas — el monitor OSC, la escucha de descubrimiento, las esperas y respuestas de los experimentos, los emuladores UDP y OSC, el relé de degradación — lo detectan y siguen escuchando. Un dispositivo que se ha ido no las detiene. Una escucha que de verdad no puede recibir más termina su tarea, y la consola dice por qué.

Problemas ​

Lo que vesCausa habitual
… is not a valid addressEl destino no tiene puerto, o no es ni IP:port ni host:port.
Cannot resolve …El nombre de host no resuelve en este equipo.
… refused the connection — nothing is listening on that port (TCP)Nada escucha en ese puerto, o un firewall lo rechaza.
No answer from … in time (TCP)El host no responde en absoluto — dirección equivocada, o un firewall que descarta en lugar de rechazar.
Una espera agota el tiempo aunque el dispositivo respondaEl dispositivo responde al puerto desde el que vino el datagrama, no al puerto de la espera. Deja que el envío espere él mismo la respuesta con esperar una respuesta: entonces sale desde el puerto al que vuelve la respuesta.
Los datagramas de otros equipos nunca lleganEn Windows, el firewall puede impedirlo: permite Signal Lab cuando la aplicación lo ofrezca. Consulta Solución de problemas.

Cada mensaje de error está en Mensajes de error.