三次握手
由客户端率先向服务端发送请求,第一次发出的请求内容是向服务端申请连接,第二次是服务端向客户端发送,发送内容是服务端收到请求后的回应和服务端向客户端申请连接的请求,第三次是客户端向服务端发送请求,请求内容是回应服务端的申请。
第二次握手确保了服务端会处理与客户端的连接,第三次握手确保了客户端会处理与服务端的连接。
四次挥手
断开连接可由客户端和服务端任意一方发起。假设A主动与B断开连接,第一次内容是A告诉B,A要断开了,第二次内容是B回应A的断开请求,第三次内容是B告诉A,B要断开了,第四次内容是A回应B的断开请求。
TCP连接是全双工的,可以简单理解为两跟单向的管道。A主动与B断开连接说明A的业务已处理完,向B断开,然后B回应A的断开请求,但是此时只是关闭了A端到B的通道,A不能再向B发送数据,B端到A的通道仍然存在,B仍然可以向A发送数据,当B处理完业务后,向A发送断开请求,然后A回应B。
这就是为什么连接是三次,而断开是四次,因为连接时回应第一次的请求和发起请求都被整合在第二次握手中,而断开时回应请求和发起请求为确保数据完整分成了两次。