01 / Descubrimiento
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.
v=1
name=Mac de oficina
platform=macos
caps=1fbLos 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.
02 / Framing
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.
| Tipo | Nombre | Uso |
|---|---|---|
0x01 | CONTROL_JSON | Negociación y control en JSON UTF-8. |
0x02 | DATA_BINARY | Datos de la prueba de throughput. |
0x03 | HEARTBEAT | Mantener activa la conexión. |
0x04 | DATA_BINARY_ECHO | Eco para medir RTT bajo carga. |
0xFF | ERROR | Código y mensaje de error. |
Un frame admite hasta 16 MiB. Una longitud superior se rechaza con error 1001; una longitud cero, con 1002.
03 / Sesión
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.
Descubrir → Conectar → Negociar capacidades
→ Preparar la prueba → Medir → Compartir resultadosLa 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.
04 / Métricas
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.
05 / Implementación
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.