TCP建立连接的过程为什么不是两次握手

来源:互联网 发布:淘宝网亨吉利可信吗 编辑:程序博客网 时间:2024/05/22 10:17


A发起请求,B回复已经收到,A回复收到B的回复


为什么A还要发送一次确认呢?这主要是为了防止已经失效的连接请求报文段突然又传送到了B,因而产生了错误。

所谓”已经失效的报文段” 是这样产生的。考虑一种正常的情况。A发出连接请求,但是因为连接请求报文丢失而未能收到B的回复。于是A再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。A共发送了两个连接请求报文段,其中第一个丢失,第二个到达了B。没有“已失效的连接请求报文段”。

现在假定出现了一种异常情况,以致延误到连接释放的某个时间才到达B。本来这是一个已经失效的报文段。但B收到此失效的连接请求报文段之后,就误认为是A又发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。

由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会想B发送数据。但是B却认为新的运输连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了。

采用三次握手的办法可以防止上述现象的发生。例如在刚才的情况下,A不会向B发出确认。B由于收不到确认,就知道A并没有要求建立连接。

阅读全文
1 0