TCP的三次握手和四次挥手
1. TCP概述
1.1 TCP简介
1.1.1 TCP的概念
- TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
- TCP是互联网中应用最广泛的协议之一,主要用于在网络中的两台计算机之间建立可靠的连接。
1.1.2 TCP的特点
- 面向连接:在数据传输前,需要先建立连接。
- 可靠传输:通过序列号、确认应答、重传机制等确保数据的可靠传输。
- 基于字节流:数据传输以字节为单位,可以传输任意大小的数据。
- 提供全双工通信:允许同时发送和接收数据。
1.2 TCP与UDP的区别
1.2.1 可靠性
- TCP提供可靠传输,通过序列号、确认应答、重传机制等确保数据的正确性和完整性。
- UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层协议,不保证数据的正确性和完整性。
1.2.2 连接
- TCP需要建立连接,数据传输前需要进行三次握手。
- UDP是无连接的,数据可以直接发送。
1.2.3 传输效率
- TCP传输效率较低,需要进行握手、应答等操作。
- UDP传输效率较高,不需要建立连接和应答。
2. TCP的三次握手
2.1 第一次握手
2.1.1 客户端发送SYN请求
- 客户端发送一个SYN(同步序列编号)报文到服务器,并进入SYN_SEND状态。
- SYN报文中包含客户端的初始序列号,用于建立连接的同步。
2.1.2 服务器接收SYN请求
- 服务器接收到客户端的SYN请求后,进入SYN_RCVD状态。
- 服务器会为该连接分配一个序列号,并发送一个SYN+ACK(同步确认应答)报文。
2.2 第二次握手
2.2.1 客户端接收SYN+ACK报文
- 客户端接收到服务器的SYN+ACK报文后,进入ESTABLISHED状态。
- 客户端发送一个ACK(确认应答)报文作为响应,并包含自己的初始序列号。
2.2.2 服务器接收ACK报文
- 服务器接收到客户端的ACK报文后,也进入ESTABLISHED状态。
- 此时,客户端和服务器之间的连接正式建立,可以开始数据传输。
3. TCP的四次挥手
3.1 第一次挥手
3.1.1 客户端发送FIN请求
- 当客户端完成数据发送后,会发送一个FIN(结束)报文到服务器,并进入FIN_WAIT1状态。
- FIN报文中包含客户端的序列号,用于关闭连接。
3.1.2 服务器接收FIN请求
- 服务器接收到客户端的FIN请求后,进入CLOSE_WAIT状态。
- 服务器会发送一个ACK报文作为响应,并包含自己的序列号。
3.2 第二次挥手
3.2.1 服务器发送FIN请求
- 当服务器完成数据发送后,会发送一个FIN报文到客户端,并进入LAST_ACK状态。
- FIN报文中包含服务器的序列号,用于关闭连接。
3.2.2 客户端接收FIN请求
- 客户端接收到服务器的FIN请求后,进入FIN_WAIT2状态。
- 客户端发送一个ACK报文作为响应,并包含自己的序列号。
3.3 第三次挥手
3.3.1 服务器接收ACK报文
- 服务器接收到客户端的ACK报文后,进入TIME_WAIT状态。
- 服务器等待一段时间,以确保客户端收到了最后一个ACK报文。
3.3.2 客户端发送FIN请求
- 客户端接收到服务器的FIN请求后,进入TIME_WAIT状态。
- 客户端发送一个FIN报文到服务器,并等待服务器确认。
3.4 第四次挥手
3.4.1 服务器接收FIN请求
- 服务器接收到客户端的FIN请求后,进入CLOSED状态。
- 服务器发送一个ACK报文作为响应,并包含自己的序列号。
3.4.2 客户端接收到ACK报文
- 客户端接收到服务器的ACK报文后,也进入CLOSED状态。
- 至此,客户端和服务器之间的连接正式关闭。




