现在来看看当出现延迟的重复控制TPDU时,次握手方法是如何工作的。在图 6-11(b)中,第一个TPDU是来自于一个已经释放的连接的延迟重复的连接请求,该TPDU 在主机1毫不知晓的情况下到达主机2。主机2通过向主机1发送一个接受连接TPD 来响应该TPDU,而该接受连接TPDU的真正目的是要证实主机1确实试图建立一个新的 连接。当主机1拒绝接受主机2建立连接的意图时,主机2便意识到自已受到了延时的 重复TPDU的欺骗并放弃该连接。这样,延时的重复数据便不会产生不良后果。 Host t Host 2 Host 1 Host 2 CR(seq= x) Old duplicate OA O47 (b
释放连接:改进的三次握手协议 连接的释放要比建立更容易些。尽管如此,仍有很多不引人注意的细节问题。前面 曾提到过,终止连接有两种方式:非对称秤放和对称释放。非对称释放是电话系统动作方 式:当一方挂机后,连接即告中断。对称释放将连接按照两个独立的单向连接来处理,要 求每一方分别释放连接。 非对称释放很突然,因而可能会导致丢失数据。请看图612中所示的秤放连接(DR) 情形。当连接建立后,主机1发送了一个数据TPDU并正确抵达主机2,接着,主机1发送 了另一个数据TPDU,这次很不幸,主机2在收到第二个TDU之前先发出了 DISCONNECT (释放连接请求),结果是连接被释放,数据被丢失 Host 1 lost 2 CR CK ATA DATA No data are delivered after a disconnect request
释放连接:改进的三次握手协议
显然,我们需要采用更为完善的连接释放协议来防止数据丢失。一种方法是采用对 称释放方式,每个方向独立释放本方的连接。这种方式中,即使主机已经发出了释放连接 TPDU,仍然能够继续接收数据。 对称释放方式适用于每个用户进程有固定数量的数据需要发送,而且清楚地知道何 时发送完毕的情况。其他情况下,决定所有工作是否已经完成和连接是否应该释放是没 有把握的。可以预想一种协议,在该协议中,机1说:“我发送完了。你呢?如果主机2 响应:“我也发送完了。再见。”那么,连接便可以被安全释放。 不幸的是,这种协议并非总是有效的。对此有一个著名的问题,称为两军问题(to army problen)。设想一支白军被围困在个山谷中,如图613所示。山谷两侧是蓝军。 白军在人数上比山谷两侧的任何一支蓝军都多,但少于两支蓝军合在一起的人数。如果 单独一支蓝军对白军发动进玫则必败无疑;但如果两支蓝军同时进攻,便可取胜
Blue Blue B army #1 #2 White army 两支蓝军欲同时发动进攻。然而,他们唯的通信方法是派遗信使步行奔过山谷去 传递信息。在山谷中,信使有可能被俘虏而丢失信件(即两支蓝军只能使用一种不可靠的 通信方法)。问题是:存在使蓝军获胜的协议吗?