《网络原理》课程中协议可靠性探讨
2015-11-26崔杰吴优仲红
崔杰++吴优++仲红
摘 要:网络可靠性分析在提高网络可靠性、生存性以及网络的优化设计中具有重要意义。随着各种网络规模的越来越大,网络的可靠性也就显得越来越重要。课堂中出现的蓝、白军进攻问题,涉及到网络的可靠性协议。文章就半双工通信的情况下,探讨设计了一个协议,以便提供可靠的通信。
关键词:可靠性;协议;通讯网络;问题探究
中图分类号:G642.0 文献标识码:A 文章编号:2095-1302(2015)11-0-02
0 引 言
占据东、西两个山顶的蓝军1和蓝军2与驻扎在山地的白军作战。其力量对比是蓝军1或蓝军2单独作战不敌白军,但蓝军1和蓝军2协同作战可以战胜白军。现蓝军1拟于次日正午向白军发起攻击。于是用计算机发送报文给蓝军2,但通信线路很不好,电文出错或丢失的可能性较大(没有电话可用)。因此,要求收到电文的友军必须送回一个确认电文。但此确认电文也容易出错或丢失[1,2]。试问能否设计出一种协议使得蓝军1和蓝军2能够实现协同作战而一定(即100%而不是99.999...%)取得胜利?这个问题的本质就是能否设计出一个绝对可靠的协议[3,4]。
1 书中解答
蓝军1先发送“拟于明日正午发起攻击,请求协同作战和确认。”
假定蓝军2收到了电文并发送确认。
然而现在蓝军1和蓝军2都不敢下定决心进攻。因为蓝军2不知道此确认电文蓝军1是否收到。如未正确收到,则蓝军1不敢贸然进攻。在此情况下,自己单方面发起进攻就肯定要失败。因此,必须要等待蓝军1发送“对确认的确认”。
假定蓝军1接收到电文并发送“确认的确认”。但蓝军1同样关心自己发出的确认对方是否收到,因此还要等待蓝军2的“对确认的确认的确认”。
这样无限循环下去,蓝军1和蓝军2都始终无法确定自己最后发出的电文对方是否收到。因此,在本例题给出的条件下,没有一种协议可以使蓝军1和蓝军2能够100%地确保胜利。
2 协议描述
上述协议的直观描述如图1所示。
这个例子告诉我们,看似简单的协议,设计起来要考虑的问题还是比较多的。
图1 无限循环协议图
3 问题探讨
看完书中的解题方法和思路,我们有一些不同的看法,我们试图设计一个协议,让双方能保障信息的可靠性。
事先约定一个协议:只要有一方(A方)发送一个报文,末尾标记1,记为A1。另一方(B方)收到并发送确认报文,末尾标记2,记为B2。同理,A接收到B2,发送A3。如此往返,直至A方发送A9,B发送B10。如此,双方最多都能发送五次报文,如果双方都能确认另一方能发送至少一次报文,则默认双方都知道报文的信息。
解题思路:假设B方可以发送B10,则可以确认A方已经发送A9,A能判断出B至少发送一次报文,默认双方都知道这个事情。同时A发送A9,能确认B发送B8的报文,则默认双方都知道报文的信息。
假设B方可以发送B 8,则可以确认A方已经发送A7,A能判断出B至少发送一次报文,默认双方都知道这个事情。同时A发送末尾标记为A7,能确认B发送过B6,则默认双方都知道报文的信息。
假设B方可以发送B6,则可以确认A方已经发送A5,A能判断出B至少发送一次报文,默认双方都知道这个事情。同时A发送A5,能确认B发送B4,则默认双方都知道报文的信息。
假设B方可以发送B4,则可以确认A方已经发送A3,A能判断出B至少发送一次报文,默认双方都知道这个事情。同时A发送A3,能确认B发送过B2,则默认双方都知道报文的信息。
综上所述能找到一些情况,使报文可靠传输。如B发送末尾标记为10的报文,则报文的信息A、B都知道对方知晓。
4 问题分析
以上解题过程貌似正确,但在一系列推导之后是不成立的,推导过程如表1所示。
规定B发送B10则默认双方都知道报文的信息,则蓝军1和蓝军2攻打白军。
证明上述论述错误,可使用反证法。
若B发送B10,则A必须发送A9。即规定A发送A9时A必定会攻击白军。
当A发送A9时,还有另外一种情况,即B发送B8,而B没有收到A9。此时B没有发送B10,B不会选择出击,而A选择出击,则战争失败,以上推断不正确。
以B为研究对象:若B最多发送Bi,A最多发送An的可能情况,Bi与An对应关系如表2。
以A为研究对象:若A最多发送An,B最多发Bi的可能情况,如表3所列。
由表2和表3可得:若选定一个An记为A发动攻击的标志,则B无法找到唯一一个确定的标志发动攻击。
若选定一个Bi记为B发动攻击的标志,则A无法找到唯一一个确定的标志发动攻击。
可得出结论,按照以上方法,无法找到一个协议使得双方可靠地传输信息。
5 方法改进与分析
A多次发送报文,则B至少应能收到一次。若B一次都收不到,则无论什么协议都无法奏效。
现假设A发送的报文,B至少能接收到一个报文。A发送的报文如下:
“我会在明日正午发起攻击,无论你有没有收到这个报文我都会发起攻击,这个报文我会发送多次,请协同作战。”
若B接收到A发送的报文。根据A发送的报文可以得出,A一定会在明天正午选择进攻。所以此时B没有其他选择,若A进攻,B也只有进攻。
A已经发送明日正午一定进攻的报文,所以A也没有其他选择,A也会选择进攻。
假设发送一次报文被对方收到的概率为a,则发送n次至少有一次被收到的概率为P=1-(1-a)^n。
我们知道:a的值固定,当逐渐变大时,P逐渐趋向于1。
通过上述分析可以看出,书中方案及我们设计的两种改进方案均无法做到100%可靠。由此可见,在通信信道质量没有保证的情况下,设计出绝对可靠的通信协议是不可能的。但在实际生活中,n的值不可能趋向于无穷,所以无法找到完全可靠的协议。
6 结 语
在《网络原理》课程中,除了上述探讨的蓝、白军进攻问题,TCP连接建立过程中的三次握手协议同样存在可靠性问题。三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕后客户端和服务器进入ESTABLISHED状态,完成三次握手。连接建立后,客户端和服务器就可以开始进行数据传输了。
三次握手协议也存在一定的可靠性缺陷,但在实际应用中,不能只顾可靠性而忽视可行性和工作效率。三次握手中,若其中某次握手失败,也难以保障较好的可靠性。三次握手的设计,就是放弃一定的可靠性,换取较大的通讯效率。
参考文献
[1]谢希仁.计算机网络.(第四版)[M].北京: 电子工业出版社, 2006.
[2]彭澎.计算机网络基本原理[M].武汉: 华中理工大学出版社, 1999.
[3]熊桂喜,王小虎.计算机网络[M].北京:清华大学出版社,1998.
[4]王新伟.提高计算机网络可靠性的方法研究[J].电脑知识与技术,2013,9(21):4818-4820.