TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP/IP协议族中,TCP协议负责在两个网络节点之间建立可靠的连接,并保证数据包的顺序传输和数据的完整性。为了实现这一目标,TCP协议使用了“三次握手”和“四次挥手”机制。
### 三次握手(建立连接)
三次握手是TCP协议中用于建立连接的过程。这个过程确保了两端设备都准备好进行数据传输,并且同步了双方的序列号,为数据传输的安全性打下基础。
1. **第一次握手(SYN)**:
- 客户端发送一个SYN(同步序列编号)标志的TCP段到服务器,以便开始一个新的连接。这个段中包含客户端的初始序列号(ISN),这是随机生成的,用于后续的数据传输。
2. **第二次握手(SYN-ACK)**:
- 服务器接收到客户端的SYN请求后,需要确认客户端的SYN,同时自己也发送一个SYN请 求。服务器在应答中包含它自己的初始序列号,并将确认序号设置为客户端的初始序列号加1。
3. **第三次握手(ACK)**:
- 客户端收到服务器的SYN-ACK应答后,发送一个确认包(ACK),这个包的序列号是服务器的初始序列号加1。这样,双方都确认了对方的SYN,连接建立成功。
### 四次断开(终止连接)
四次挥手是TCP协议中用于终止一个连接的过程。这个过程比较复杂,因为TCP连接是全双工的,必须单独关闭每个方向的连接。
1. **第一次挥手(FIN)**:
- 当客户端完成数据传输后,它需要发送一个FIN(结束)标志的TCP段到服务器,表示客户端没有数据再发送了。
2. **第二次挥手(ACK)**:
- 服务器收到这个FIN请求后,发送一个ACK包作为应答,确认序号为收到序号加1。此时,客户端到服务器方向的连接被关闭,但服务器到客户端方向的连接仍然开放,以便服务器发送剩余的数据。
3. **第三次挥手(FIN)**:
- 当服务器也完成数据传输后,它也发送一个FIN包到客户端,请求关闭到客户端方向的连接。
4. **第四次挥手(ACK)**:
- 客户端收到服务器的FIN请求后,发送一个ACK包作为应答,确认序号为收到序号加1。在发送完这个ACK包后,客户端会等待足够长的时间(2倍的最大段生命周期MSL),以确保服务器收到确认包。
经过这四次挥手,TCP连接被完全关闭。在这个过程中,每个方向的连接都需要单独进行关闭,这是由于TCP连接的对称性和全双工性质所决定的。通过这样的机制,TCP协议保证了数据传输的可靠性