欢迎访问文稿网!

在TCP建立过程中,采用三次握手的优缺点分析

范文之家 分享 时间: 加入收藏 我要投稿 点赞

在TCP建立过程中,采用三次握手的优缺点分析

    

    在TCP连接建立过程中,采用三次握手法的优点是:可防止过期的连接再次传到被连接的主机,而若采用二次握手法则无法防止上述情况发生。例如:如图5.12所示,假设采用二次握手法,主机A向B发送连接请求报文SYN,而SYN报文因某种原因没有及时到达B,于是A将因超时而重发该SYN报文,假若B正确收到了该重发的SYN报文,于是将回复ACK报文给A,由此A和B之间建立了一条TCP连接。基于该TCP连接,A和B在完成通信后,将断开该连接,此时,双方均已没有关于该TCP连接的记录了。结果这时候,假若原先那个没有及时到达的SYN报文突然又传到了B,则B将把该过期的SYN当作是一个新的连接请求报文,于是,将回复一个新的ACK报文给A,并按照二次握手的协定,认为和A之间又建立了一条新的TCP连接,从而会等待A基于该新的TCP连接发送报文给自己,而A因对应该ACK报文的连接请求报文SYN已被响应,而且通信已经完成并已断开了与B之间的连接,故而在收到B的新ACK报文之后,将会直接丢弃,因此永远都不会基于这条B认为的新TCP连接发送数据给B,从而使得B陷入空等状态,浪费了B的网络资源。

    

图5.12 过期连接再次到达被连接主机的情形

    此外,采用三次握手法还可防止死锁(Dead Lock)的产生,例如:假设采用二次握手法,主机A向主机B发送连接请求报文SYN,B收到了SYN报文后并发送了确认应答报文ACK,按照二次握手的协定,B认为连接已经成功地建立,可以开始发送报文了;此时,若B的应答报文ACK在传输中丢失,则A将不知道B是否已准备好,同时也不知道B建议什么样的序号,A甚至会怀疑B是否收到自己的连接请求报文SYN。在这种情况下,A会认为连接还未建立成功,将忽略B发来的任何报文,而一直等待连接确认应答报文ACK的到来。而B在发出的报文超时后,将重复发送同样的报文,由此就形成了死锁。

    三次握手法的缺点是:由于采用了三次握手过程,从而增加了报文段在网络传输中遇到不利情况的概率。例如:在第三次握手时,因A在发出第三个ACK报文段时,将会认为自己与B之间已建立了一条TCP连接,并会基于该TCP连接发送数据给B;但假若因出现网络问题导致第三个ACK报文段无法或无法及时到达B,则B在收到该ACK报文之前,不会认为自己与A之间建立了一条TCP连接,因此,会直接丢弃A基于该TCP连接发送过来的任何报文,从而浪费了A的网络资源。

    三次握手的过程并非TCP协议所必需的,随着网络可靠性的不断提高,为了减少TCP连接建立的时延,采用二次握手法也将成为一种可能的选择。

    在TCP连接释放过程中采用的是四次挥手法,而不是如TCP连接建立一样采用三次握手法,这是因为在建立TCP连接的过程之中,远端在收到发送方的连接建立请求报文SYN后,可以把ACK和SYN(ACK起应答作用,SYN起同步作用)放在同一个应答报文SYNACK中一并发送。但在释放连接时,当远端收到连接释放请求报文FIN时,仅仅表示对方没有数据要发送了,但是远端可能还有数据要发送给对方,因此远端显然不能马上关闭连接,只有等到把剩余的所有数据都发送完毕之后,远端才能发送FIN报文给对方,表示从现在开始可以释放该连接了,因此,远端在大多数情况下需要将ACK和FIN放在两个不同的报文(ACK报文和FIN报文)中分开发送给对方,而不能像建立连接时一样将ACK和SYN放在同一个应答报文中发送给对方,其中,远端发送的ACK报文仅表示同意对方释放从对方到自己的单向连接,而FIN报文则表示远端希望释放从自己到对方的另一条单向连接。

    无论是三次握手法还是四次挥手法,均不能完全保障TCP连接建立与释放的正确性。而实际上也不存在一个完全正确的TCP连接建立与释放协议,所有的TCP连接释放协议均存在以下“两军问题”:

    (1)如图5.13所示,白军被两支蓝军围困山谷,白军实力超过任何一支蓝军但不及两支蓝军的合力。

    (2)两支蓝军希望能够同时发动攻击,但唯一办法是派卫兵穿过山谷来传递“进攻消息”。而卫兵穿过山谷的时候可能被俘虏。

    (3)由于最后一个回信的蓝军将领总是无法确信其决定是否被正确送达友军,因此,不存在一个协议能使得两支蓝军将领可以安全发动攻击。

    (4)连接释放协议原理和上述“两军问题”原理相同,只需要将上述“两军问题”中的“进攻消息”替换为“连接释放请求”或“连接建立请求”即可。因此,不存在一个完全正确的TCP连接建立与释放协议。

    

图5.13 两军问题

221381
领取福利

微信扫码领取福利

微信扫码分享