Protección contra repeticiones de LocalMessageSubmission
Descripción general
Sección titulada «Descripción general»gOuroboros v0.213.7 incorpora protección contra repeticiones para los mensajes autenticados de LocalMessageSubmission. El servidor reserva el ID de cada mensaje autenticado y vigente antes de ejecutar SubmitMessageFunc. Solo la primera entrega que logra reservar el ID llega a SubmitMessageFunc; las entregas posteriores con el mismo ID activo reciben pcommon.AlreadyReceivedReason.
La reserva también coordina las entregas simultáneas cuando varias conexiones intentan enviar el mismo ID.
Configuración
Sección titulada «Configuración»NewConfig establece MaxReplayEntries en 10,000 de forma predeterminada. Un valor de cero también selecciona este valor predeterminado. El límite controla la cantidad de IDs autenticados que el servidor conserva hasta su vencimiento. La configuración explícita usa localmessagesubmission.WithMaxReplayEntries(10000):
config := localmessagesubmission.NewConfig( localmessagesubmission.WithSubmitMessageFunc(submitMessage), localmessagesubmission.WithMaxReplayEntries(10000),)El proceso debe crear Config fuera del bucle que acepta conexiones y reutilizar la misma instancia para cada conexión. Esta configuración mantiene el registro de protección contra repeticiones; las llamadas independientes a NewConfig crean registros separados y no impiden que las conexiones reutilicen un mismo ID.
Uso entre conexiones
Sección titulada «Uso entre conexiones»El proceso que atiende varias conexiones debe compartir una sola instancia de Config con cada servidor LocalMessageSubmission. Las copias de esa instancia comparten el estado de reservas, por lo que una entrega aceptada en una conexión impide que otra conexión ejecute SubmitMessageFunc con el mismo ID antes de ExpiresAt.
El servidor elimina las reservas expiradas antes de comprobar la capacidad. Cuando una reserva alcanza MaxReplayEntries, el servidor rechaza los nuevos IDs autenticados hasta que las reservas anteriores expiren y el servidor las elimine. Una entrega cuyo ID ya está reservado continúa recibiendo pcommon.AlreadyReceivedReason.
Rechazos
Sección titulada «Rechazos»La protección contra repeticiones aplica los siguientes resultados:
- Una entrega duplicada secuencial recibe
pcommon.AlreadyReceivedReasony no ejecutaSubmitMessageFunc. - Las entregas duplicadas simultáneas reciben
pcommon.AlreadyReceivedReasondespués de que una sola entrega reserve el ID. - Un nuevo ID recibe un rechazo cuando el registro alcanza
MaxReplayEntries. - Un valor negativo de
MaxReplayEntriesprovoca un rechazo antes de ejecutarSubmitMessageFunc. - Si
SubmitMessageFuncrechaza la entrega, el servidor mantiene activa la reserva y protege el ID hastaExpiresAt. - Cuando
ExpiresAtya pasó, el servidor elimina la reserva y permite una nueva entrega que supere la validación de autenticación y vigencia.
Referencias
Sección titulada «Referencias»- Documentación de la API de
LocalMessageSubmission - gOuroboros v0.213.7
- Implementación de la protección contra repeticiones
- Requisito de protección contra repeticiones
Docs authored by Doc Holiday