TCP建立连接断开连接这都是老生常谈的问题了,这篇博客不打算赘述那些每次连接传输了什么SYN、ACK等信息,只讨论为什么需要特定次数的数据交换才能完成建立连接和断开连接这两个过程
首先是建立连接,这个过程需要三次握手,直接上图
大概流程如图所示,首先客户端需要确认服务端能接受到信息,然后服务端同样返回信息给客户端保证服务端到客户端通讯畅通,最后客户端确认建立连接,这样三次握手就能保证建立连接
乍一看可能觉得第三次握手有点多余,现在如果我们去掉第三次握手并假设这么一个场景,客户端发送第一次握手之后长时间没有收到响应而重发会产生什么影响
如上图所示,如果只有两次握手的话,如果因为各种原因导致重发的话,最终可能会导致服务端建立多个连接给客户端,但是客户端其实只需要一个连接就够了,多余的连接纯粹只是浪费资源而已;回到三次握手的情况,假如已建立连接之后又收到了服务端的可以建立连接请求的话,客户端会告诉服务端,我这已经有了一个连接了,那个连接不需要了,你释放资源吧
综上所述,建立连接的过程需要三次握手,两次握手可能会浪费资源,而更多次的握手也没有必要
讲完了三次握手建立连接,接下来讲讲四次挥手,依旧是画图
四次挥手的过程如上图所示,关键点在于服务端会有一个确认传输完成的挥手过程,只有服务端这边的信息都传输完成了才算真正结束,然后会发起一次挥手告诉客户端可以断开连接,这里面的过程也是缺一不可,既不能让信息还没传输完成就断开连接,也不能让客户端一直等着服务端传输完成,所以这个过程的四次挥手也都是很有必要的