# Two generals problem X and Y are two generals. They want to agree on a time to attack the enemy together. They will only attack if they know for sure the other knows they have reached an agreement. The channel is unreliable since their messenger can be captured and thus messaged undelivered. X → Y: attack at 10 pm. Y → X: ACK1. > Y doesn’t know if X has received ACK yet. So Y is pending. X → Y: ACK2. > X knows Y is pending, and is not sure if ACK2 has been received. > In real life, these three messages typically are already sufficient to reach an agreement. In an email-like setting, we can assume ACK2 is received and read by Y, since email guarantees delivery and we know that Y will probably check his email for this message. Even if Y doesn’t check immediately, he will check sometime later if he has received ACK2 or not. Y → X: ACK3. > Y knows that X is pending until it knows Y is no longer pending, so he sends ACK3, but again, he cannot make sure this message will arrive. So Y is still pending. X → Y: ACK4. > ACK4 could be lost too, so X can't know if Y is still pending. This goes on and on. The essential problem is that X relies on Y to be no longer pending in order to be pending. And Y relies on X to be no longer pending in order to be pending. So there’s no solution to that. At some point one of them needs to be sure that the other one is no longer pending in order to reach a consensus. https://cs.stackexchange.com/questions/43368/if-the-two-generals-problem-is-unsolvable-how-can-we-human-beings-agree-on-thing