两军对垒问题及个人的思考
在 Andrew S. Tanenbaum著的《計算機網絡》中,為了描述計算機通信的不確定性,他曾在上面提出這樣一個問題——兩軍對壘問題。
🍉請先看一下什么是兩軍對壘問題:
🌍一支白軍被圍困在一個山谷中,兩旁的山上都是藍軍,白軍的實力超過了任何一支藍軍單獨的力量,但是兩支藍軍合起來的力量卻超過了白軍。如果任何一支藍軍單獨發起進攻,則它將被白軍擊敗,然而,如果兩支藍軍同時發動進攻,則它們將會取得勝利。
?兩支藍軍希望能夠同時發動進攻,然而,它們唯一的通信介質是派士兵穿過山谷傳遞信息,而在穿越山谷時士兵可能被白軍抓住,從而丟失信息(即它們必須使用一條不可靠的通信信道),現在的問題是:是否存在一個讓藍軍獲勝的協議?
🌳假如藍軍1號的指揮官發送這樣一條消息:" 我建議我們在3月29日的黎明時發起進攻。怎么樣?‘’現在假設該消息到達了藍軍2號,2號指揮官同意了這一建議,并且他的回信安全的到了藍軍1號,進攻會如期進行嗎?
💜可能不會,因為藍軍2號指揮官并不知道他的回信是否能送到,如果回信沒有送過去,藍軍1號將不會發動進攻,所以對他來說,貿然發動進攻將是十分愚蠢的。
💪假如我們進行改進,建議發起方必須對應答消息進行確認。
🍀假設沒有消息丟失,藍軍2號將得到確認:但是藍軍1號指揮官現在就會猶豫,因為他不知道他的確認信息是否發送過去了,如果確認信息沒有送到藍軍2號,他發動進攻就會全軍覆沒。
💪假如我們再進行改進,接受方必須對發送方的應答進行確認。
🌵假如沒有信息丟失,藍軍1號得到確認:但是藍軍2號指揮官同樣會猶豫,因為他不知道他的確認消息是否發送過去了。如果確認消息沒有到,那么他發動進行就會全軍覆沒。
🏅實際上,可以證明完成這一任務的協議并不存在,我們使用反證法,假如存在一個這個協議,如果我們從協議中去掉所有無關緊要的信息,這樣我們得到的協議中每條消息都是至關重要的,如果最后一條消息沒被發送過去吶,我們剛才說過,它是至關重要的,如果它丟失了,則進攻就不會如期進行,同時由于最后一條消息的發送者永遠不知道他發送的消息是否能正確的到達,所有他也不會貿然發動進攻。同時,另一支藍軍也會對此猜疑,所以他也不會貿然發動進行。
我們把這個問題與斷開連接進行類比,用"斷開連接"來替代 “發動進攻”,即可以得出結論,如果任何一方要在確定另一方做好了斷開連接的準備之后才斷開連接,那么斷開連接的操作永遠不會發生。
所以在TCP斷開連接時,是由某一端獨立的決定是否要斷開連接。
📢由這個問題我們可以得到一個結論:通信本身就是具有不確定性的,而對于TCP來說,它也不是一個絕對可靠的協議,它只是通過確認,重傳哪些機制,把它的不確定性變到一個可接受的范圍。
總結
以上是生活随笔為你收集整理的两军对垒问题及个人的思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hadoop2.x学习01
- 下一篇: 【单片机】msp430几种不同开发平台的