今天看到计算机导论书上的两军问题: 一支白军被围因在一个山谷中,山谷的两侧是蓝军,若一支蓝军对白军单独发起进攻,则必败无疑;但若两支蓝车同时发起进攻,则可取胜。
两支蓝军希望同时发起进攻,这样他们就要传递信息,以确定发起攻击的具体时间。假设他们只能派遺士兵穿越白军所在的山谷(唯一的通信信道)来传递信息,那么在穿越山谷时,士兵有可能被俘,从而造成消息的丢失。
现在的问题是:如何通信,以便蓝军必胜。
下面我们进行设计:
假设一支蓝军指挥官发出消息:“我建议在明天拂晓发起进攻,请确认。”如果消息到达
了另一支蓝车,其指挥官同意这一建议,并且他的回信也安全送到,那么能否进攻呢?不能。
这是一个两步握手协议,因为该指挥官无法知道他的回信是否安全送到了,所以,他不能发起
进攻。
改进协议:将两步握手协议改为三步握手协议,这样,最初提出建议的指挥官必须确认对
该建议的应答信息。假如信息没有丢失,并收到确认消息,则他领将收到的确认信息告诉对
方,从而完成三步握手协议。但是,这样他就无法知道消息是否被对方收到,因此,他不能发起进攻。
总而言之,蓝军指挥官最后发出一条信息总是无法确定是否安全到达,然后需要一直重复发送以上步骤,到不了尽头(死循环),蓝军永远没法开打(同情蓝军1秒钟)
这让其实和大家在生活发信息给对方是一样的,我们发送一条信息出去,但是无法确定对方是否收到,知道对方回了一条信息过来,我们才确认他接受了并回复了,但对于对方来说,并不知道他的信息是否发送到(传递到),也就是总需要多一次的信息传递才能确定上一次的接受完成✅
哈哈哈哈感觉好像说了什么又好像什么都没说但感觉想出这个问题的人很厉害