Acuerdo de dos generales

6

Estoy tratando de encontrar un protocolo de acuerdo en un canal no confiable. Básicamente, dos partes (A y B) tienen que aceptar hacer algo, por lo que es el problema de los dos generales .

Como no hay una solución a prueba de balas, estoy tratando de hacer esto.

  • A continuamente envía un mensaje con la secuencia 1
  • Cuando B recibe la secuencia 1, responde continuamente con la secuencia 2
  • En este punto, A recibe la secuencia 2 y comienza a enviar la secuencia 3
  • ...

Mi pregunta. ¿Cuándo pueden las dos partes concluir que pueden tomar la acción? Obviamente no puedo establecer una condición: " hazlo después de recibir 10 mensajes ", ya que el último remitente no tendrá ninguna certeza de que el mensaje 10 llegó, de vuelta al punto uno.

¿Qué tal otra idea?

  • Sigue comunicándote así por un período de tiempo predefinido. Al final de ese período, ambas partes tienen una idea acerca de la confiabilidad del canal. ¿Sería eso aceptable?

Inicialmente publiqué esto en StackOverflow pero alguien sugirió que la seguridad podría ser un lugar mejor.

    
pregunta user1079062 03.12.2011 - 17:26
fuente

2 respuestas

6

Las partes nunca pueden estar completamente de acuerdo en una situación en la que un mensaje puede o no ser recibido por cualquiera de las partes porque siempre habrá una diferencia de estado entre las dos partes.

Este es también el enigma "el teléfono celular de la novia dejó de funcionar". La mejor solución es tener un protocolo acordado que se siga para que sepa que la otra parte probablemente esté realizando una serie de tareas razonables que terminan en un protocolo a prueba de fallos. Como un seguro a prueba de fallos, uno debe asegurarse de que los fallos actualizados no creen condiciones en las que el anterior seguro a prueba de fallos no resulte en una solución.

Además, no puede encontrar una solución ideal porque existe una prueba de imposibilidad que dice que no existe una solución ideal. Consulte la parte inferior de la Entrada de Wikipedia sobre el problema de los dos generales que ha citado y sus referencias. El agujero del conejo incluye Tolerancia a fallas bizantina y sus artículos relacionados.

    
respondido por el Jeff Ferland 03.12.2011 - 20:13
fuente
0
  

Mi pregunta. ¿Cuándo pueden las dos partes concluir que pueden tomar la acción? Obviamente no puedo establecer una condición: "hágalo después de recibir 10 mensajes", ya que el último remitente no tendrá ninguna certeza de que el mensaje 10 llegó - de vuelta al punto uno.

En realidad, pueden tener la certeza de que el mensaje 10 llegó asumiendo que los mensajes están ordenados. Usted ve, cuando llega el mensaje 11, entonces sabemos que llegó el mensaje 10 (por lo que fueron capaces de redactar el mensaje 11).

Si los dos generales reciben X mensajes en la parte posterior, entonces pueden estar seguros de que ambos vieron los mensajes anteriores menos uno (¿o dos?) rondas de ida y vuelta.

Si se produce un error en la llegada de uno de los mensajes (tiempo de espera o llegada de mensaje fuera de secuencia), el proceso puede reiniciarse con un primer mensaje nuevo.

    
respondido por el Xeoncross 21.11.2018 - 19:51
fuente

Lea otras preguntas en las etiquetas