我们知道Tcp建立连接必须要建立三次握手,那么为什么两次握手就不行能呢?为什么又不是四次呢?下面我们就来以易于理解的方式简单分析下
一次连接的建立双方需要确认对方是否处于可连接状态。这里的双方我们用A和B来进行标示:
1.如果A需要确认B是否可连接,A端需要发送请求信息,B收到后然后回复给A。请求,回复按序进行,期间涉及到两次消息的发送,这点我们没有任何疑问。
2.然后B确认A是否可连接,同理也会涉及到两次消息的发送。这样连接才会建立起来。
那么有同学会问TCp建立连接只需要三次握手啊,你这里不是四次吗?为了保证效率,我们要使用尽可能少的发送消息次数建立连接,如何少呢!那当然是复用啦!
我们发现B给A回复确认消息的时候,也可以当作B的请求消息。一次发送,具有两个功能。至此我们就成功减少了一次握手。
成为了我们的三次握手
至于两次为什么不行,这个就不要解释了吧(只能A确认B可连接,B无法知道A是否可连接)
TCP四次挥手
因为当服务端收到客户端的 FIN 数据包后(第一次挥手),服务端不会立即close,为什么不立即close?因为可能还有数据没发完,服务端会先将 ACK 发过去告诉客户端我收到你的断开请求了(第二次挥手),但请再给我一点时间,这段时间用来发送剩下的数据报文,发完之后再将 FIN 包发给客户端表示现在可以断了(第三次挥手)。客户端收到 FIN 包后发送 ACK 确认断开信息给服务端(第四次挥手)。