Ticketing
Documentación

Conexión y autenticación

Una conexión de igual a igual (puerto Raft = puerto de cliente + 1000) se establece en exactamente el mismo orden que el puerto de cliente. No hay ningún paso en el protocolo para distinguir cliente de par — los roles se diferencian únicamente por el puerto.

  1. Conexión TCP — el lado que llama (dial) es siempre el solicitante
  2. Handshake TLS, si el servidor tiene TLS activado
  3. Un protocolo de autenticación — la especificación (challenge, digest, respuesta) es idéntica byte a byte a la del puerto de cliente
  4. Intercambio de RPC con prefijo de longitud a partir de entonces

Flujo

Nodo que llama (dial)
Nodo receptor
conexión TCP (puerto Raft = puerto de cliente + 1000)
handshake TLS, si el servidor tiene TLS activado
challenge (SHA-256 ␣ nonce)
digest — calculado con el primer token de cluster_tokens
se verifica contra toda la lista de cluster_tokens
a partir de aquí, RPC Raft con prefijo de longitud
solicitudrespuestaRPC de consenso (Raft)

En qué se diferencia del puerto de cliente

ElementoPuerto de clientePuerto Raft
Conjunto de tokens usado para verificarclient_tokenscluster_tokens
Token enviadoel token que configuró el clienteel primer token de cluster_tokens
Tras la autenticacióntramas terminadas en \nRPC con prefijo de longitud
  • En el lado receptor, la verificación comprueba contra toda la lista de cluster_tokens, así que puedes listar tokens antiguos y nuevos juntos y reiniciar los nodos uno a uno para rotar tokens sin tiempo de inactividad (Configuración (variables de entorno)).
  • Con TLS activado, el puerto Raft usa el mismo certificado. El lado que llama verifica el certificado del par contra tls_ca (o el almacén de confianza del sistema si no está definido); tls_skip_verify es solo para pruebas.
  • Si falla la autenticación, la conexión se cierra tras E auth_failed — igual que en el puerto de cliente.