客户端收到服务器的 SYN 报文后,再回应一个 ACK(ack=y+1),如此就成功建立连接,并开始传输数据;
「四次挥手:」
四次挥手示意图(来源网络)TCP 连接的断开需要发送4个包,可以由连接的任意一方先发起,以下假设客户端先发起断开。
客户端发送一个 FIN 包给到服务器,表明自己的数据已经发送完毕,想要断开连接了,客户端进入 FIN_WAIT_1 状态;
服务器收到客户端的 FIN 包后,发送一个确认包给客户端,表明自己接受了关闭连接的请求,但是有可能还有些数据没有全部发送完,服务器进入 CLOSE_WAIT 状态,客户端收到回复后进入 FIN_WAIT_2 状态;
服务器准备好了关闭连接,想客户端发送结束连接请求,服务器进入 LAST_ACK 状态;
客户端收到服务器的关闭请求,发送一个确认包给服务器并进入 TIME_WAIT 状态,服务器收到这个确认包后,关闭连接并进入 CLOSE 状态。
「TCP 的连接为什么是3次握手,为什么不是更多或更少?」
因为最少要经过3次连接才能确认双方都可正常接收和发送数据,多于3次则无必要。