TCP三次握手和四次挥手是建立和关闭TCP连接的核心机制,其过程通过严格的报文交互确保通信的可靠性和资源的高效利用。以下是具体解释:
TCP三次握手三次握手的核心目的是同步双方初始序列号,并确认通信双方收发能力正常,建立可靠的双向连接。
- 初始状态:客户端(A)和服务端(B)均处于CLOSED状态。B启动后创建传输控制块(TCB),进入LISTEN状态等待连接请求。
- 第一次握手:A创建TCB,发送SYN=1、seq=x的报文(不携带数据但消耗序号),进入SYN-SENT状态。此步骤验证A的发送能力和B的接收能力。
- 第二次握手:B收到SYN后,回复SYN=1、ACK=1、ack=x+1、seq=y的报文,进入SYN-RCVD状态。此步骤验证B的发送能力和A的接收能力,同时为连接分配资源。
- 第三次握手:A验证ack=x+1和ACK=1后,回复ACK=1、ack=y+1、seq=x+1的报文,进入ESTABLISHED状态。B收到确认后也进入ESTABLISHED状态。此步骤确保双方资源分配完成,连接正式建立。
关键点:
- 三次握手必要性:若仅两次握手,B可能因网络延迟收到失效的SYN报文而建立无效连接,导致资源浪费。三次握手通过第三次确认消除此类风险。
- TCB的作用:存储连接信息(如序列号、缓存指针等),确保数据传输的连续性和错误恢复能力。
TCP四次挥手四次挥手的核心目的是确保双方数据传输完成,并释放连接资源,避免数据丢失或重复处理。
- 初始状态:双方均处于ESTABLISHED状态,数据传输完成。
- 第一次挥手:A发送FIN=1、seq=u的报文,进入FIN-WAIT-1状态,表示无新数据发送。此步骤仅关闭A到B的单向连接。
- 第二次挥手:B收到FIN后,回复ACK=1、ack=u+1、seq=v的报文,进入CLOSE-WAIT状态。A收到确认后进入FIN-WAIT-2状态。此步骤允许B继续发送未完成的数据。
- 第三次挥手:B完成数据发送后,发送FIN=1、ACK=1、seq=w、ack=u+1的报文,进入LAST-ACK状态,表示B到A的连接关闭。
- 第四次挥手:A收到FIN后,回复ACK=1、seq=u+1、ack=w+1的报文,进入TIME-WAIT状态。B收到确认后进入CLOSED状态。A等待2MSL(最长报文段寿命)后,若无异常则进入CLOSED状态。
关键点:
常见问题解答- 为什么连接用三次握手,关闭用四次挥手?
连接时,B收到SYN后可立即回复SYN+ACK,合并同步与应答。关闭时,B需等待数据发送完成才能发送FIN,无法合并步骤。
- Server端如何防范SYN攻击?
缩短SYN等待时间、限制单位时间内的SYN请求数、启用SYN Cookie技术(无需分配资源即可生成初始序列号)。
- 为什么TIME-WAIT等待2MSL?
1MSL为报文在网络中的最大存活时间,2MSL确保双方报文均已失效,避免历史连接干扰。
通过三次握手和四次挥手,TCP协议在保证可靠性的同时,高效管理了网络资源,成为互联网通信的基石。