概念
TCP协议是面向连接的传输层协议,基于字节流。它可以保证数据从网络的一端到另一端不丢失、不重复、不乱序。TCP协议是全双工的协议。
三次握手
TCP连接是可靠连接,连接的建立需要进行三次握手。Server被动打开监听端口,Client主动发送请求连接。
- Client端发送SYN,请求与Server端相连;
- Server端回复ACK,同时发送自己的SYN;
- Client端回复ACK,连接建立。
在三次挥手的过程中,有三种TCP状态:
- LISTEN;Server端的状态,表示正在监听连接请求;
- SYN-SENT;Client端的状态,表示已经发送了SYN,等待Server端ACK;
- SYN-RECEIVED;Server端的状态,表示已经发送了ACK和SYN,等待Client端ACK;
四次挥手
TCP连接时可靠连接,连接的断开需要四次挥手。
四次挥手和三次握手不同,不管是Client,还是Server,都能主动提出断开连接请求。以Client主动断开为例,其典型的步骤如下:
- Client端发送FIN,请求与Server端断开连接;
- Server端回复ACK,表明已收到Client端的断开连接请求;
- Serve端发送完剩余的数据流后,发送自身的FIN;
- Client端回复ACK,等待一段时间后,终止连接;
在四次挥手过程中,有七种TCP状态:
- FIN-WAIT-1;主动方发送FIN后,等待被动方回复;
- FIN-WAIT-2;主动方接收到被动方ACK后,等待被动方发送FIN;
- CLOSE-WAIT;被动方接收到FIN,但自己还未发送FIN;
- CLOSING;比较特殊,主动方发送FIN后,在未收到ACK之前,先收到对方发送的FIN,基本上是双方同时发送断开连接请求的状态;
- LAST-ACK;被动方发送FIN,等待主动方的ACK;
- TIME-WAIT;主动方回复ACK后,等待2MSL才可进入CLOSED,MSL为最大分节时间,推荐为2分钟;
- CLOSED;完全关闭状态;