因为事不过三,想握第四次,人家跟他挥手了。
开玩笑开玩笑滴。。。。
记住一点 ,TCP全双工,什么意思?既能收也能发
,并且这两个动作要完成,【请求】
--> 【应答】
–>【再次确认】
1、首先三次握手 【 Client 发送给 Server 】
-
第一次,当C发送给S的时候,C并不知道是否成功发送到S了,所以C并不知道自己能发还是能收
-
第二次,S回复给C,此时,C说:“我收到了”,那么此时 C就知道自己能发并且还能收,但是S依旧不知道自己能发或者能收
-
第三次,C再回复S,此时 S也收到消息了,S也知道自己能发还是能收了,这就是整个全双工的过程
三次握手完毕表明已建立好连接,所以理解起来其实并不难,只是网上的好多解释都过于复杂化了,当然,以上描述极其简化,具体的实现是非常值得学习的
2、为什么挥手要多一次呢?
在关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET
所以只能先回复一个ACK应答报文,告诉Client端,“你发的FIN报文我收到了”。
-
C给 S发消息:“我要关闭连接了喔~”
-
S给 C回消息:“你的消息我收到了,但是我活还没干完,得等我一会!”--
多了此步骤
-
S给 C回消息:“我活干完了,我们可以断开连接了”
-
C给 S发消息:“好的,我挂断了!” ------ 同时等待一段时间后关闭
S 收到消息后也就立即关闭了