LandSpeed Protocolo

Un mismo idioma.
LSP 1.2.

LandSpeed Protocol conecta la app y Gard. Define cómo se descubren dos equipos, negocian una prueba y comparten sus resultados en la red local.

Encontrar el otro extremo.

El host anuncia un servicio Bonjour/mDNS _landspeed._tcp. El puerto predeterminado es 7737, pero el cliente debe usar el puerto real anunciado.

Ejemplo de registro TXT · capacidades ilustrativas
v=1
name=Mac de oficina
platform=macos
caps=1fb

Los campos obligatorios son v, name, platform y caps. El nombre usa UTF-8 y admite hasta 63 bytes. Las capacidades se anuncian como hexadecimal sin prefijo. Las claves desconocidas se ignoran.

Un frame pequeño y explícito.

El framing TCP usa una longitud de 4 bytes big-endian, seguida por un tipo de 1 byte y su payload. La longitud incluye el byte de tipo.

4 bytesLongitud · uint32 BE
1 byteTipo · uint8
PayloadLongitud − 1
TipoNombreUso
0x01CONTROL_JSONNegociación y control en JSON UTF-8.
0x02DATA_BINARYDatos de la prueba de throughput.
0x03HEARTBEATMantener activa la conexión.
0x04DATA_BINARY_ECHOEco para medir RTT bajo carga.
0xFFERRORCódigo y mensaje de error.

Un frame admite hasta 16 MiB. Una longitud superior se rechaza con error 1001; una longitud cero, con 1002.

Negociar antes de medir.

El canal de control intercambia mensajes JSON con discriminador t e identificador id. Los campos del protocolo usan snake_case. Los equipos acuerdan transporte, dirección, duración y streams antes de iniciar la carga.

Secuencia conceptual · consulta el contrato para los mensajes exactos
Descubrir → Conectar → Negociar capacidades
→ Preparar la prueba → Medir → Compartir resultados

La versión completa y las capacidades permiten negociar funciones entre implementaciones 1.0, 1.1 y 1.2. Cada cliente debe respetar lo que anuncia el otro extremo.

TLS, pairing, eco, intervalos y UDP se negocian por capacidades. El pairing es una función opcional del protocolo; no es un requisito del flujo habitual de la app.

Medidas con contexto.

El throughput expresa la cantidad de datos transferidos por unidad de tiempo. La latencia corresponde al tiempo de ida y vuelta, y el jitter describe su variación.

En TCP, la pérdida de sondas de latencia no representa pérdida de datos de la aplicación. En UDP se puede medir la pérdida de datagramas a partir de su secuencia. Interpreta cada resultado según su transporte y las capacidades negociadas.

La tasa objetivo de UDP y el tamaño del payload forman parte de la configuración. La referencia usa un payload de 1200 bytes; aumentar la carga no garantiza mayor rendimiento útil.

Construye sobre el contrato.

Esta página es una guía. La especificación completa define campos, errores, bits de capacidades, temporización y requisitos de interoperabilidad.

Leer la especificación LSP 1.2 en GitHub

Gard es una implementación CLI con licencia Apache-2.0. Para probar contra la app, consulta las plataformas y su disponibilidad.