知识卡片
网络2将军问题的不可解性
内容
一方发消息后永远无法百分百确认对方是否收到——确认本身也是需要被确认的消息,循环无尽头。这不是工程缺陷,而是网络通信的数学性质:只要信道不可靠,任何有限次握手都无法消除不确定性。这决定了TCP握手止步于三次,也解释了写请求超时后服务器是否写入成功永远未知。发散:这是理解”至少一次/精确一次”投递、幂等设计、分布式事务补偿的起点。
参考来源
- 位置:第5章《网络》5.6.3节「三次握手(网络2将军问题)」(源文件:_epub-src/text/part0021.html)
- 结论依据:原文明确说明无论握手几次都无法知道最后发出的数据包对方是否收到,回复的ACK是否收到也需要再回复ACK,如此循环往复问题无解,这是网络通信中普遍存在的问题,直接支持卡片对通信信道不可靠时任何有限次握手都无法消除不确定性的论述。
- 原始内容:"这就是经典的网络的2将军问题:无论是两次,还是三次,还是四次……永远都不知道最后发出去的那个数据包对方是否收到了。想要知道最后一次是否收到,只有让对方回复一个ACK,但回复的这个ACK是否收到,只能让对方为这个ACK再回复一个ACK,如此循环往复,问题无解。"