Some time ago, I've come across the Two Generals Problem and that it cannot be resolved. Now, recently, I've had an idea how to approach it. IMHO, it is a very obvious way to handle it but I haven't found this way to handle it anywhere and therefore assume my idea is flawed but I can't find the error.
The approach I've found online (from Wikipedia):
A pragmatic approach to dealing with the Two Generals' Problem is to use schemes that accept the uncertainty of the communications channel and not attempt to eliminate it, but rather mitigate it to an acceptable degree. For example, the first general could send 100 messengers, anticipating that the probability of all being captured is low. With this approach the first general will attack no matter what, and the second general will attack if any message is received.
This seems very crude and the chance of a non-delivery stays at $(1-p)^c$.
My Approach
General A sends a message to General B when to attack. The message contains the following information:
- Attack at time $T$.
- Send confirmation of receival.
- I will not confirm your confirmation.
- I will resend the time of attack after time $t$ if I did not get a confirmation.
That way, General A can be sure General B got the message when he gets the confirmation. General B can be $(1 - p)^{m \cdot c}$ sure that it passed after not getting the time of attack again, where
- $p$ := probability the confirmation passed
- $m$ := multiple of time $t$ that has passed.
- $c$ := count of messages sent per time unit (one of the solutions I've come across is to send a lot of messages at the same time).
It does not solve the problem that General B can't be 100% sure that General A received the confirmation but after some time, he can be very certain.
Special Case
Now, if we were to change the scenario slightly, we can reach a 100% certainty for both:
Assume both Generals do not only communicate in order to synchronize the attack but also for other purposes. In that case, General A can send the message:
- Attack at time $T$.
- Send confirmation of receival.
- I will not confirm your confirmation.
- I will resend the time of attack after time $t$ if I did not get a confirmation.
- I will not send any other communication until I've received your confirmation.
That way, General A can be sure that General B received the plan, when he gets the confirmation and General B can be sure General A received the confirmation when General A sending messages about something else.
So, what is wrong with my approach?