在初始连接建立的过程中,也须注意不可靠的网络服务和迟到分组的影响。一般情况下,双方通过两次交换有关连接的请求和应答的控制报文来建立连接,例如,利用CallRequest和Call Accepted报文的交换过程。
现在把这类请求和应答都记为RFC(Request For Connection),RFC1表示请求,RFC2表示对请求的肯定应答,REJECT表示拒绝。用这种表示方法,上述连接过程如图6.3.2所示。
图6.3.2 两次握手
在此过程中,只要两步就可以确定连接是否可以建立,故这种方法称为“两次握手”法。当然,此例中是默认双方的初始顺序号都有一个固定的值(例如0),但即使采用Tomlinson法中的不定初始顺序号,“两次握手”法也可以将双方的初始顺序号同时进行交换,其过程如图6.3.3所示。
图6.3.3 两次握手交换初始顺序号
在十分可靠的网络中,例如A1型,这种两次握手方法可以工作得很好。但在不那么可靠的网络中,发出的RFC可能丢失或迟到,从而就可能对初始连接过程产生干扰。如果RFC1和RFC2在传送时都可能丢失,则可以用定时器计时并在一定时间后重发来防止这种干扰。重发的结果可能使子网中有两个同样目的地同样内容的报文,所以一旦连接建立,就应该忽略掉这些报文副本,因为如某些副本保留到了下次连接建立时以迟到分组的形式出现,就可能造成影响,如图6.3.4所示。
图6.3.4 两次握手对付不了迟到分组
解决这个问题的方法是双方都明确地回复对方的RFC和序号。这个过程被称为“三次握手法”,这也是由Tomlinson提出的。在正常情况下,经过三次交换就可以确定本次连接是否正确。三次握手法的工作过程如图6.3.5所示。(www.xing528.com)
图6.3.5 三次握手法
现来分析一下存在迟到的连接请求控制分组时,三次握手法的工作过程。假设第一个报文是来自一个关闭了连接的迟到分组,因其没有准确的发出时间,故用“…”表示;B对它的反应是发出一个应答报文RFC2,以核实A是否确已发出了请求;当A发出REJECT拒绝时,B才发现被迟到的RFC1所欺骗,于是放弃这次连接。其工作过程如图6.3.6所示。
图6.3.6 三次握手处理迟到RFC1
最坏的情况是一个迟到的RFC1和它的应答RFC2在子网内到处游动。若此时B得到了一个迟到RFC1并且应答了它,而另一个迟到的Data又应答了B,但由于所用的顺序号不统一,于是只得放弃连接,其过程如图6.3.7所示。
所以,三次握手法可以应付迟到报文分组的种种干扰。
妥善地终止一个连接虽比建立一个新的连接容易,但也须处理丢失关闭请求或应答的情况,以及迟到的此类报文分组,都要明确地回答对方的关闭请求。为此,可在请求及应答中加有序号,即在关闭请求中有最后一个数据单位的序号加1的序号,而在应答中有关闭请求中的序号。即使如此,仍有可能因丢失应答而造成一方永不关闭,为此还要采取其它的手段,如多次重发关闭请求等。
图6.3.7 三次握手法处理迟到RFC1和RFC2的应答
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。