Métodos para confirmar en ambos lados que se recibió una señal en una dirección

Digamos que hay dos dispositivos (A y B) que hablan entre sí (dúplex completo). Por el bien de este ejemplo, digamos que el medio es RF (inalámbrico).

Si el dispositivo A envía un mensaje al dispositivo B, ¿qué métodos/estrategias existen para que ambos dispositivos confirmen que B recibió el mensaje y para que ambos dispositivos se aseguren de que el otro dispositivo lo sabe?

Esto quizás se explica mejor a través de un ejemplo del mundo real:

Supongamos que tiene un control remoto/llave remoto RF dúplex completo para su automóvil que controla las cerraduras. El control remoto tiene una pantalla LCD.

Si ordena que se cierren las cerraduras, el control remoto enviará una señal al automóvil. Si el automóvil recibe la señal correctamente, puede bloquear las puertas de inmediato y luego enviar un reconocimiento (ACK) al control remoto para decir "las puertas están bloqueadas" y el control remoto puede mostrar esto en su pantalla. Sin embargo, el control remoto puede o no recibir el ACK del automóvil.

Si el control remoto no recibe el ACK del automóvil, el control remoto y el usuario no saben si las puertas están bloqueadas. En este punto, el usuario puede intentar el proceso nuevamente o darse por vencido y caminar hacia el automóvil, cualquiera de los cuales no es deseable porque no fue necesario. También puede causar más problemas, como que el usuario espere que se desbloquee el automóvil y, por lo tanto, no traiga sus llaves para sacar un artículo del maletero. Por lo tanto, existe el deseo de que tanto el control remoto como el automóvil estén "en la misma página".

Ahora consideremos la misma secuencia, excepto que el control remoto recibió el ACK. El control remoto ahora sabe que el automóvil recibió el mensaje. Puede mostrarle al usuario que las puertas están cerradas... Pero el auto no sabe que el control remoto lo sabe. Desde el punto de vista del automóvil, es posible que no se haya recibido el ACK, por lo que las puertas aún no deben estar bloqueadas o, de lo contrario, nos encontraremos con los problemas mencionados en el último párrafo. Por lo tanto, el automóvil puede esperar a que el control remoto envíe un ACK propio al automóvil. Si eso se recibe, el auto sabe que el control remoto sabe que el auto sabe cerrar las puertas... ¿Pero el control remoto sabe eso? ¡No!

¿Ves un patrón aquí? Ambos dispositivos continúan pasando ACK de un lado a otro. Tampoco puede salir y decir "Sé al 100% que el otro dispositivo sabe que voy a realizar mi acción" .

¿Hay alguna manera de que tanto el control remoto como el automóvil se aseguren de que las puertas estén bloqueadas y el control remoto lo muestre?

Si eso no es posible, ¿qué estrategias, además de la simple fuerza bruta (el automóvil envía repetidamente ACK) existen para estar bastante seguros de que las puertas están cerradas y el control remoto lo muestra como tal?

Esta es una variante del problema de los "dos generales": en.wikipedia.org/wiki/Two_Generals%27_Problem En última instancia, es una cuestión de costo del mensaje frente a certeza
Presionas el llavero, las puertas se bloquean, escuchas un clic y te alejas. No oye un clic, por lo que vuelve a pulsar el botón. ¿De qué se trata todo este drama?
@Andyaka: tenga en cuenta que cuando estoy en un edificio, normalmente no puedo escuchar/ver/oler el bloqueo de mi automóvil. Me imagino que va para todos. Mi control remoto en particular tiene un alcance práctico de hasta media milla (línea de visión). Entonces, incluso si estoy afuera, puede haber mucho drama. Si amplía el ejemplo para incluir el arranque remoto a 5 °F y una distancia de más de 1/4 de milla en un vecindario malo, estoy seguro de que puede imaginar el drama de no saber si su automóvil está funcionando o no, y si las puertas están cerradas (la memoria a corto plazo no es mi punto fuerte).

Respuestas (3)

Como se menciona en los comentarios, esto se conoce como el problema de los dos generales y ha sido bien estudiado. Se ha demostrado que no existe un algoritmo perfecto que siempre lleve a que ambas partes estén de acuerdo y sabiendo que la otra también lo está. Pero si está dispuesto a enviar muchos mensajes, puede acercarse arbitrariamente.

La "mejor" estrategia estará determinada por las características específicas del problema. Dependerá del costo de enviar los mensajes (que puede ser diferente en ambas direcciones), el costo de la falla, la probabilidad de que los mensajes se pierdan y si los mensajes perdidos están o no correlacionados.

¡Mmm! La forma habitual imita la forma en que intercambiamos información nosotros mismos. "Aquí hay un mensaje para el que necesitaré una respuesta. El mensaje es "cierra las puertas cuando recibas mi autorización". Una buena forma de que el automóvil responda sería enviar el mismo mensaje pero con un código ACK1 adjunto. Ahora está esperando que el control remoto repita el comando, quizás con un código ack2 ligeramente diferente.Para algo como el cierre remoto de la puerta, hacer parpadear las luces del automóvil es una buena manera en la práctica de indicar que el mensaje ha sido activado.

Sin embargo, creo que tiene en mente algo mucho más crítico que el bloqueo y desbloqueo de las puertas del automóvil. ¿Qué tal "tren de aterrizaje bloqueado" en un avión?

Estos sistemas se denominan bucle abierto y cerrado. Un lazo abierto simplemente lleva a cabo la acción. Hay muchas maneras en las que se puede comprobar la autenticidad de un mensaje. La adición de caracteres de verificación al final es uno de esos métodos. El carácter de verificación cíclica (CCC) o el carácter de verificación de bloque (BCC) son formas de contar, por ejemplo, el número de "unos" en un mensaje digital. Un poco como contar los números de "A" en un texto le daría una mejor verificación de la integridad.

Al final del día, si es de vital importancia, el mensaje puede enviarse dos o más veces y compararse para asegurarse de que se recibe fielmente. {fielmente recibido - fielmente recibido}! No se procederá hasta que se intercambie un número previamente acordado de mensajes similares.

Espero que esto abra las posibilidades de cómo es posible proceder con una seguridad y autenticidad casi a prueba de bombas y responda a su consulta de manera suficiente.

Esto de ninguna manera considera la cuestión de la intercepción o la generación deshonesta de comandos. Eso está más dentro de la esfera de los cifrados y códigos: un juego de pelota bastante diferente.

En las redes informáticas, el lado solicitante generalmente vuelve a enviar la solicitud hasta que recibe un ACK. Si se pierde el ACK, se recibirá una solicitud duplicada.

Ejemplo de intercambio:

Control remoto: "Cerrar la puerta".
Coche: (bloquea la puerta)
Coche: "ACK" (mensaje perdido en la transmisión)
Control remoto: "Bloquea la puerta".
Coche: (nota que la puerta ya está bloqueada y no hace nada)
Coche: "ACK" (mensaje perdido en la transmisión)
Control remoto: "Bloquear la puerta".
Coche: (nota que la puerta ya está bloqueada y no hace nada)
Coche: "ACK" (mensaje recibido con éxito)

Tenga en cuenta que para usar este método, el protocolo debe diseñarse de modo que no importen las solicitudes duplicadas. Entonces, el control remoto no puede decirle al automóvil "cambiar el estado de la puerta". En su lugar, el control remoto primero debe preguntar si la puerta está bloqueada actualmente (con reintentos) y luego configurarla en el estado opuesto (con reintentos).

Después de una cierta cantidad de reintentos fallidos, el control remoto debe abandonar (tal vez el automóvil no esté dentro del alcance). En ese caso, no sabe si el automóvil está fuera de alcance o si el automóvil no pudo transmitir la respuesta. Esto se puede evitar enviando primero un mensaje de no operación (lo que hace que el automóvil envíe un ACK, pero no haga nada) para ver si el automóvil está dentro del alcance.

Como señalaron otros respondedores, siempre existe una posibilidad distinta de cero de que el control remoto no reciba los ACK del automóvil cuando la operación fue exitosa. Esto es inevitable. En el mejor de los casos, la probabilidad se puede reducir para que sea poco probable que ocurra en escenarios normales.