两军问题(英语:Two Generals’ Problem)是计算机领域中的一个思想实验。两军问题显示,通过不可靠的通信通道交换信息并达成共识是难以实现的。在该问题中,两支军队的将军只能通过派遣信使穿越敌方领土来互相通信,以此约定在同一时间点共同进攻。该问题希望求解如何在两位将军派出的任何信使都可能被俘虏的情况下,就发动攻击的时间点达成一致。

两军问题是拜占庭将军问题的一个特例,常被编入与计算机网络相关的入门课程中。在传输控制协议(TCP)相关的课程中,该问题可用作解释 TCP 协议无法保证通信双方之间的状态一致性的原因。该问题也适用于其他存在信息丢失的双方通信的情况。作为认识逻辑的一个重要概念,该问题突出了共识(英语:Common_knowledge_(logic))的重要性。一些学者也将此问题称作两军悖论(英语:Two Generals Paradox)或协同进攻问题(英语:Coordinated Attack Problem)。两军问题是第一个被证明无解的计算机通信问题。该证明的重要意义在于,其显示了对于存在通信错误的更广泛的问题(如拜占庭将军问题),同样是无解的。这也为所有分布式一致性协议的实现提供了一个符合现实的预期。


Links to this note