为什么要3次握手和4次挥手

TCP的3次握手和4次挥手很好理解,但如果问一句,你思考过为什么需要这么复杂的步骤吗?

 

还是来回顾下这两个操作,首先明确下TCP是全双工通信(2个方向能同时通讯)

(1)3次握手

这里我用男生和女生聊天的例子来解释

男生:在干嘛(第1次握手)  
                                                刷微博 :女生(第2次握手)
男生:哦(第3次握手)  
男生:xxxxx(开始传输局)  
                                            xxxxxxxx :女生

客户端发送连接请求(第1次握手),服务端返回收到了该请求的确认(第2次握手)

客户端发送收到了服务端确认的确认(第3次握手),3次握手之后连接建立完成

问题来了,为什么要3次?2次握手为什么不行?

其实2次握手可以完成连接的建立,但会带来资源浪费的问题


 客户端              (第2次发送请求)------------>(第1次发送请求)-------------->          服务端


假设通信道路堵塞,第1次的请求未能在限定时间内收到服务端的请求,可能堵塞也可能丢失,于是发送第2次请求

堵塞结束后,2次的请求自然建立了2个TCP连接,但问题是,第1个连接已经被客户端放弃了(因为之前的超时客户端不会在

这个连接上传输数据),而服务端开启了2个连接。此时只有第2个连接是有用的,第1个连接自然就造成了资源的浪费。

 

 

(2)4次挥手

男生:拜拜(第1次挥手)  
                                                    哦 :女生(第2次挥手)
                                              xxxxxx :女生(第3次挥手)
男生:哦(第4次挥手)  

这里第3次挥手是因为服务端可能存在为传输完的数据

这里服务端在第3次挥手完之后关闭服务端向客户端的连接,第4次挥手后客户端向服务端的连接关闭

所以,为什么要4次挥手?

因为TCP的连接只能由客户端开始放弃,服务端只能被动接受,客户端放弃连接后

服务端的数据可能没传输完,所以需要4次挥手才能确保全双工通信的关闭。

 

 

 

你可能感兴趣的:(网络)