Andrew S.Tanenbaum 在《计算机网络》一书中介绍了一个与网络协议有关的著名问题--两军问题,可以用来说明协议设计的微妙性和复杂性。

两军问题可以这样描述:一支白军被围困在一个山谷中,山谷的两侧是蓝军。困在山谷中的白军人数多余山谷两侧的任意一支蓝军,而少于两支蓝军的中和。若一支蓝军对白军单独发起进攻,则必败无疑;但若两支蓝军同时发起进攻,则可取胜。两只蓝军希望同时发起进攻,这样他们就要传递消息,以便确定发起进攻的具体时间。假设他们只能派遣士兵穿越白军所在的山谷(唯一的通信信道)来传递消息,那么在穿越山谷是,士兵有可能被俘虏,从而造成消息的丢失。现在的问题是:如何通信,以便蓝军必胜。下面我们进行设计。

假设一支蓝军指挥官发出消息:“我建议在明天佛晓发起进攻,请确认。”如果消息到达了另一支蓝军,其指挥官同意这一建议,并且他的回信也安全的送到,那么能否进攻呢?不能。这是一个两步握手协议,因为该指挥官无法知道他的回信是否安全送到了,所以,他不能发起进攻,改进协议,将两步握手协议改为三步握手协议,这样,最初提出建议的指挥官必须确认对该建议的应答信息。假如信息没有丢失,并收到确认消息,则他必须将收到的确认信息告诉对方,从而完成三步握手协议。然而,这样他就无法知道消息是否被对方收到,因此,他不能发起进攻。那么现在采用四步握手协议会如何呢?结果仍是于事无补。
结论是:不存在使蓝军必胜的通信约定(协议)。

该结论可以用反证法证明,证明如下:假如存在某种协议,那么协议中最后一条信息要么是必要的,要么不是。如果不是,可以删除它,知道剩下的每条信息都是至关重要的。若最后一条消息没有安全到达目的地,则会怎样呢?刚才说过每条信息都是必要的,因此,若它丢了,则进攻不会如期进行。由于最后发出信息的指挥官永远无法确定该信息是否安全到达,所以他不会冒险发动攻击。同样,另一只蓝军也明白这个道理,所以也不会发动进攻。

Andrew使用上述问题来阐述网络传输成中“释放连接”问题的要点。而在实际中,当两台通过网络互联的计算机释放连接(对应两军问题的发起进攻),通常乙方收到对方确认的应答消息后不在回复就连接释放(用的是一个三步握手协议)。这样处理,协议并非完全没有错,但通常情况下以及足够了。)

就像andrew给出的结论那样,现在你应该很清楚,释放一个可能有数据丢失的网络连接并不像人们看起来那样简单。

原文地址:http://blog.tianya.cn/post-6391272-95389043-1.shtml

转载于:https://www.cnblogs.com/zhangyin6985/p/5539866.html

(转载)计算机网络中的两军问题相关推荐

  1. 闲话计算机网络中的两军问题

    转载:http://blog.tianya.cn/post-6391272-95389043-1.shtml --<计算机科学导论-思想与方法第二版> Andrew S.Tanenbaum ...

  2. 计算机网络中路由器,浅析计算机网络中的路由器

    浅析计算机网络中的路由器 通过路由器的结构 ,分析了路由器的基本原理及功能 ,进而 (本文共2页) 阅读全文>> 由于路由器的应用越来越广泛,所以对网络路由器在使用过程中发生的故障,我们也 ...

  3. 浅谈两军问题拜占庭将军问题

    自己在网上查阅资料后的理解,深入了解可移步:https://www.8btc.com/article/70370 目录 一.解决什么样的问题--问题模型的应用场景 二.信道受干扰下的传输问题--两军问 ...

  4. 什么叫计算机网络阻塞,计算机网络中的“线端阻塞”释义

    李勇军 张胜兵 刘潮东 张隽 秦涛 摘要:在与计算机网络相关课程的教学或实践过程中经常提及"线端阻塞"这个概念,其与拥塞控制.网络性能和网络应用紧密联系.了解该概念的本义与延伸,可 ...

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

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

  6. Java中的两个关键字——super、this

    Java中的两个关键字--super.this 神话丿小王子的博客主页 一.super super 是java中方的一个关键字,用它可以引用父类中的成员: super可用于访问父类中定义的属性 sup ...

  7. 计算机网络的运用在什么时候,离散时间排队系统及其在计算机网络中的应用

    摘要: 该文共分四章讨论了三个模型,着重于有相关到达的离散时间排队系统.第一章为引言,回顾了排队论的历史,阐述了计算机网路的一些基本技术及术语,分析了离散时间排队系统的特殊性.在第二章中.我们考虑一个 ...

  8. 求数组最大数,该数为数组中某两个数相加

    题目: 百度笔试:在一个正整数集合S中,找出一个最大数C,使得C=A+B,其中A和B也是S种的元素. 思想: 首先,我们将数组从小到大进行快速排序.其次: 1.将最后一个数设为最大数设定为S: 2.用 ...

  9. excel中对比两个sheet,找出匹配不上的

    问题描述:数据的特点是,在同一个excel文件中存在两个sheet,他们的数据结构是一样的,其中一个中的数据是另一个的子集,目的是要找出他们的不同,即找出在那张大些的sheet中存在,但在那张小些的s ...

最新文章

  1. 机器人技术推动工业领域的数字革命
  2. mysql 系统参数优化方法_Mysql 性能优化2 系统参数配置方法 和 文件系统
  3. python下载opencv库_Window系统下Python如何安装OpenCV库
  4. 你说我做丨为你定制「大局观版」职场设计课
  5. 隔壁大爷都会网络布线啦、搞起来搞起来
  6. zookeeper简介以及C客户端用法
  7. Swift中文教程(八) 枚举类型
  8. Visio—如何导出文件为图片?
  9. android的JNI标准 android的NDK
  10. 常见字符的ASCII码值
  11. Python3: chardet 检测 bytes 的原字符串编码格式
  12. 求两个数的最大公因数与最小公倍数
  13. 网络编程——CS模型(总结)
  14. 高防服务器有哪些优势
  15. Redis学习笔记·
  16. win10如何显示html文件夹,Win10显示隐藏文件夹图标_Win10查看隐藏文件夹方法-192路由网...
  17. 使用Java做ORC图片识别
  18. 小程序-仿朋友圈开发问题
  19. 巴黎圣母院重建设计竞赛辟谣!“巴黎心跳”夺冠,仅仅只是自嗨?
  20. 申请Github学生包(用学生证就行,免教育邮箱)

热门文章

  1. 855 AIMA学习笔记(by菜菜子)
  2. 南京师范大学计算机控制系统,基于计算机软件控制系统的静电放电研究-南京师范大学学报.PDF...
  3. linux 用户加入次要群组,linux学习笔记之 帐号和群组管理
  4. 云原生社区 meetup 第四期广州站报名中
  5. 计算机网络测试仪,网络测试仪如何使用
  6. 生成图-深度优先搜索/宽度优先搜索
  7. 步步为营 .NET 代码重构学习笔记 二、提炼方法(Extract Method)
  8. MySQL 中你应该使用什么数据类型表示时间?
  9. C++深度模型部署bili视频的tensorrt onnx和知乎的libtorch
  10. 电桥 应变片 误差来源及改进 思考题