Protocolo
LSP/1.2
Landspeed Protocol
Especificación abierta del protocolo que mueve a Landspeed: cómo se descubren los pares en la LAN, cómo negocian un test y cómo reportan los resultados. Pensado para ser implementado por cualquier cliente: la app, Gard, o el tuyo.
Bonjour / mDNS
Servicio _landspeed._tcp.local. con TXT records que anuncian versión, vendor y capacidades.
TCP · texto · una sola conexión
Negociación humana-legible inspirada en HTTP/1: HELLO, RUN, STATS, BYE.
TCP o UDP · N streams
El test corre en conexiones independientes de la conexión de control. Se mide cada stream y se agrega.
Punto a punto en LAN
No hay servidores Landspeed en Internet. No hay tokens, no hay cuentas, no hay relays.
1. Descubrimiento
Un peer LSP/1.2 publica un servicio Bonjour del tipo _landspeed._tcp.local. en el puerto de control (por defecto 5208). El TXT record incluye:
txtvers=1
ver=1.2
vendor=landspeed-macos/2.0.1 # o gard/1.2.0
caps=tcp,udp,bidir,multistream
maxstreams=32
host=macbook-de-marcoCualquier cliente conforme debe ignorar TXT keys que no entienda. El descubrimiento puede complementarse con resolución por IP+puerto cuando mDNS no está disponible (entornos enterprise estrictos).
2. Conexión de control
La conexión de control es TCP, formato texto UTF-8 con líneas terminadas en \r\n, similar a HTTP. La primera línea del cliente es siempre el saludo:
C: HELLO LSP/1.2 vendor=gard/1.2.0
S: 200 OK ver=1.2 host=macbook-de-marco caps=tcp,udp,bidir,multistream
C: RUN dir=bi proto=tcp streams=4 duration=10s
S: 200 RUNNING port=5209 token=Z9k...
<— a partir de aquí los streams se abren al puerto indicado —>
S: STATS t=1.0 up=512.3 down=302.1 rttp50=6.9 rttp95=12.0 loss=0.00
S: STATS t=2.0 up=559.8 down=331.2 rttp50=7.1 rttp95=12.4 loss=0.00
...
S: 200 DONE up=574.2 down=349.2 maxup=877.9 maxdown=407.2 lat=7.3 jitter=1.1 loss=0.00
C: BYE
S: 200 BYEToda respuesta del servidor empieza por un código de estado de tres dígitos. 2xx éxito, 4xx error del cliente, 5xx error del servidor o de la red. Los STATS intermedios son opcionales pero recomendados — habilitan la gráfica progresiva en tiempo real.
3. Direcciones y modos
dir=up— el cliente envía datos al servidor.dir=down— el servidor envía datos al cliente.dir=bi— ambas direcciones simultáneas. La firma de Landspeed.
4. Streams
Los streams se abren contra el port que devuelve el servidor en la respuesta a RUN. Cada stream se autentica con el token efímero (válido sólo durante el test) en sus primeros 32 bytes. Después, el stream transporta datos pseudoaleatorios incompresibles, por defecto desde/dev/urandom-equivalente del SO.
5. UDP
En modo proto=udp, el servidor responde con el puerto UDP dedicado y un burst objetivo en pps. El cliente envía paquetes con un seq de 8 bytes y un timestamp de 8 bytes, y el servidor reporta pérdida y jitter por intervalo.
6. Errores comunes
400— saludo inválido o versión no soportada.403— cliente no autorizado en este peer.409— ya hay un test en curso.503— servidor saturado o sin recursos.504— handshake de stream no completado.
7. Compatibilidad
LSP/1.2 mantiene compatibilidad con clientes 1.1 con caps reducidas (sin bidireccional, sin multistream). Las capacidades efectivas son la intersección entre las del cliente y las del servidor.
8. Implementaciones de referencia
- Landspeed — apps nativas en iOS, macOS, Android y Windows.
- Gard — cliente CLI para macOS, Linux y Windows.
¿Vas a implementar un cliente LSP? Avisanos a landspeed@patagua.dev y lo listamos como implementación conforme.