• 两军对垒问题及个人的思考


    在 Andrew S. Tanenbaum著的《计算机网络》中,为了描述计算机通信的不确定性,他曾在上面提出这样一个问题——两军对垒问题

    🍉请先看一下什么是两军对垒问题:

    🌍一支白军被围困在一个山谷中,两旁的山上都是蓝军,白军的实力超过了任何一支蓝军单独的力量,但是两支蓝军合起来的力量却超过了白军。如果任何一支蓝军单独发起进攻,则它将被白军击败,然而,如果两支蓝军同时发动进攻,则它们将会取得胜利。

    ✌两支蓝军希望能够同时发动进攻,然而,它们唯一的通信介质是派士兵穿过山谷传递信息,而在穿越山谷时士兵可能被白军抓住,从而丢失信息(即它们必须使用一条不可靠的通信信道),现在的问题是:是否存在一个让蓝军获胜的协议?

    🌳假如蓝军1号的指挥官发送这样一条消息:" 我建议我们在3月29日的黎明时发起进攻。怎么样?‘’现在假设该消息到达了蓝军2号,2号指挥官同意了这一建议,并且他的回信安全的到了蓝军1号,进攻会如期进行吗?
    在这里插入图片描述

    💜可能不会,因为蓝军2号指挥官并不知道他的回信是否能送到,如果回信没有送过去,蓝军1号将不会发动进攻,所以对他来说,贸然发动进攻将是十分愚蠢的。

    💪假如我们进行改进,建议发起方必须对应答消息进行确认
    在这里插入图片描述

    🍀假设没有消息丢失,蓝军2号将得到确认:但是蓝军1号指挥官现在就会犹豫,因为他不知道他的确认信息是否发送过去了,如果确认信息没有送到蓝军2号,他发动进攻就会全军覆没。

    💪假如我们再进行改进,接受方必须对发送方的应答进行确认
    在这里插入图片描述

    🌵假如没有信息丢失,蓝军1号得到确认:但是蓝军2号指挥官同样会犹豫,因为他不知道他的确认消息是否发送过去了。如果确认消息没有到,那么他发动进行就会全军覆没。

    🏅实际上,可以证明完成这一任务的协议并不存在,我们使用反证法,假如存在一个这个协议,如果我们从协议中去掉所有无关紧要的信息,这样我们得到的协议中每条消息都是至关重要的,如果最后一条消息没被发送过去呐,我们刚才说过,它是至关重要的,如果它丢失了,则进攻就不会如期进行,同时由于最后一条消息的发送者永远不知道他发送的消息是否能正确的到达,所有他也不会贸然发动进攻。同时,另一支蓝军也会对此猜疑,所以他也不会贸然发动进行。

    我们把这个问题与断开连接进行类比,用"断开连接"来替代 “发动进攻”,即可以得出结论,如果任何一方要在确定另一方做好了断开连接的准备之后才断开连接,那么断开连接的操作永远不会发生

    所以在TCP断开连接时,是由某一端独立的决定是否要断开连接。

    📢由这个问题我们可以得到一个结论:通信本身就是具有不确定性的,而对于TCP来说,它也不是一个绝对可靠的协议,它只是通过确认,重传哪些机制,把它的不确定性变到一个可接受的范围。

  • 相关阅读:
    手机进水声音变小怎么办
    天府绿道骑行
    JavaScipt中如何实现函数缓存?函数缓存有哪些场景?
    【PAT甲级】1024 Palindromic Number
    java基础10题
    机器学习---初识贝叶斯分类器
    CISP-PTE实操练习讲解
    Linux三剑客
    基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章
    Vue-dvadmin-d2-crud-plus-自定义后台菜单-添加页面
  • 原文地址:https://blog.csdn.net/aoeaoao/article/details/126796872