背景
为了准确无误地将数据送达目标处,TCP协议采用了三次握手(three-way handshaking)策略。用TCP协议把数据包送出去后,TCP不会对传达后的情况置之不理,它一定会向对方确认是否成功送达。
握手过程中使用了TCP的标志(flag)—— SYN(synchronize)和ACK(acknowledgement)。
三次握手与四次挥手涉及到的标志:
- SYN:表示请求建立连接
- FIN:表示断开链接
- ACK:表示信息确认
三次握手
发送端首先发送一个带SYN标志的数据包给对方。接收端收到数据包之后回传一个带有ACK标志的数据包以示确认收到信息,此时可以同时发送一个SYN标志的数据包以示请求建立与发送端的连接。最后发送端收到后再回传一个带ACK标志的数据包,代表“握手”结束,即双方建立通信连接。
Q1:为什么是三次握手,而不是两次/四次握手?
两次握手无法保证消息确认送达,ACK与SYN可以合并以减少一次请求。
Q2:如何避免历史连接?
Q3:四次挥手为何不能合并为三次?
保证服务端对上一次未处理完成的数据响应处理完。
参考文章
《图解HTTP》- 【日】上野宣著