TCP:Transmission Controll Protocol:传输控制协议;面向连接、可靠的、基于字节流的传输层协议
面向连接:客户端和服务端进行连接的协议
可靠性:保证信息能够从发送端到达接收端;这是由TCP每次都记录消息发送状态、主动控制发送失败的消息重新发送来完成的
TCP的三次握手:
最开始时客户端和服务端都处于 CLOSED 状态,然后服务端先主动监听某个端口,此时服务器端就变成了 LISTEN(监听)状态;
然后客户端主动发起连接,发送 SYN(同步序列编号),此时客户端就变成了 SYN-SENT 状态;
服务端接收到信息之后返回 SYN 和 ACK 至客户端,此时服务器端就变成了 SYN-REVD 状态;
客户端接收到消息之后,再发送 ACK 至服务器端,此时客户端就变成了 ESTABLISHED(已确认)状态,服务端收到 ACK 之后,也变成了 ESTABLISHED 状态,此时连接工作就执行完了
为什么要三次握手:
防止重复连接:出现网络问题时,client发送了SYN(seq=90),但是网络拥堵下被阻塞了,然后client又发了一个SYN(seq=100),server首先会接收到旧的SYN,并返回ack = seq + 1 = 90 + 1 ,客户端就会终止这次连接;直到server返回SYN = 100 + 1才返回ack
若是两次握手,则无法阻止历史连接
同步双方的初始序列号:client发送一个序列号,server会返回一个ack和一个序列化,client在返回一个ack,保证初始序列号的同步;序列号能够判断哪些数据已经接收