您的位置:首页 > 理论基础 > 计算机网络

TCP为什么要进行三次握手四次挥手

2017-07-25 19:01 489 查看
先看一下三次握手的过程:



为什么要进行三次握手而不是两次握手呢?

假设是两次握手的情况下:A向B发了一个第一个请求连接报文,此时又于选择了一条较长的路径导致这个请求,传输的时间较长,以致延误到连接释放以后的某个时间才到达server,但是此时A认为发了一个请求连接的报文B没有收到,因此A进行重传,此时这个新的请求连接报文B很快就收到了,于是B向A发送确认报文段,同意连接,于是A和B开始互发数据。但过了一段时间之后B收到了这个延迟的请求连接的报文,此时B立刻发给了A一个确认报文段,同意连接,并且此时B开始等待A给B发数据。但是A认为他刚才并没有发送新的请求连接报文,此时A不会给B发任何数据,那么此时B一直处于等待状态就造成了资源的浪费。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。此时就不会再造成服务器资源的浪费了。

或许有人认为为什么不四次握手或者五次握手呢,但是四次握手和五次握手效果和三次握手是一样的,并且三次握手保证了可靠的同时效率也高啊。



为什么TCP要进行四次挥手呢?

因为是双方彼此都建立了连接,因此双方都要释放自己的连接,A向B发出一个释放连接请求,他要释放链接表明不再向B发送数据了,此时B收到了A发送的释放链接请求之后,给A发送一个确认,A不能再向B发送数据了,它处于FIN-WAIT-2的状态,但是此时B还可以向A进行数据的传送。此时B向A 发送一个断开连接的请求,A收到之后给B发送一个确认。此时B关闭连接。A也关闭连接。

为什么要有TIME-WAIT这个状态呢,这是因为有可能最后一次确认丢失,如果B此时继续向A发送一个我要断开连接的请求等待A发送确认,但此时A已经关闭连接了,那么B永远也关不掉了,所以我们要有TIME-WAIT这个状态。

当然TCP也并不是100%可靠的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: