TCP 位于传输层,提供可靠的字节流服务。
所谓可靠的传输服务是指,能够把数据准确可靠的传给对方,并且 TCP 协议能够确认数据最终是否达到对方。
为了准确无误的将数据送达目标,TCP 协议采用了三次握手(three-way handshaking)策略。用 TCP 协议把数据包送出去后,TCP 不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。
简而言之:TCP连接的双方都要确保双方发送和接收消息的能力都是OK的。
网图- 第一次握手:客户端发送一个带 SYN 标志的数据包给服务端。服务端收到后,此时客户端不知道自己的接收发送能力是否OK,也不知道服务端的接收发送能力是否OK。服务端只知道客户端的发送能力OK,以及自己的接收能力OK。
- 第二次握手:服务端回传一个带有 SYN/ACK 标志的数据包给客户端。当客户端接收到服务端发送来的消息后,客户端可以确认自己和服务端发送和接收能力都是OK的,但是服务端此时只能确定自己的接收能力OK以及客户端的发送OK。
- 第三次握手:客户端再回传一个带 ACK 标志的数据包。服务端接收到后可以确定客户端接收能力OK,自己的发送能力也OK。
经过这三次握手,客户端确定客户端和服务端的接收发送能力OK,服务端也确定了客户端和服务端的接收发送能力OK,准备工作完成。
回到最初的问题:为什么 TCP 建立会话要三次握手?
因为双方确认彼此都能收发消息至少需要三次,两次不够,四次浪费。
注:这只是目前我个人的理解,实际上问题的答案比这复杂,等以后我了解得更深入了再补充。
网友评论