TCP连接管理:建立、关闭与连接状态
TCP连接管理
TCP的运输连接包括连接建立、数据传送和连接释放三个阶段。运输连接管理就是对连接建立以及连接释放过程的管控,使其能正常运行。
连接建立的过程被称为三次握手(three-way handshake):
- 第一次握手:客户端的应用进程主动打开,并向服务端发出请求报文段。其首部中,SYN=1、seq=x。
- 第二次握手:服务器应用进程被动打开,若同意客户端的请求,则发回确认报文。其首部中,SYN=1、ACK=1、ack=x+1、seq=y。
- 第三次握手:客户端收到确认报文后,通知上层应用进程连接已建立,并向服务器发出确认报文。其首部,ACK=1、ack=y+1。当服务器收到客户端的确认报文后,也通知其上层应用进程连接已建立。
互动实验
建立连接并重试丢失的SYN-ACK
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
客户端SYN序号为100,服务器SYN序号为500,第三次纯ACK的Seq/ACK是什么?
连接释放
连接释放的过程被称为四次挥手:
- 第一次挥手:数据传输结束后,客户端应用进程发出连接释放报文段,并停止发送数据。其首部,FIN=1、seq=u。
- 第二次挥手:服务器收到连接释放报文段后,发出确认报文。其首部,ack=u+1、seq=v。此时本次连接就进入了半关闭状态,客户端不再向服务器发送数据,而服务器仍会继续发送。
- 第三次挥手:若服务器已经没有要向客户端发送的数据,其应用进程就通知服务器释放TCP连接。这个阶段服务器所发出的最后一个报文的首部中,FIN=1、ACK=1、seq=w、ack=u+1。
- 第四次挥手:客户端收到连接释放报文段后,必须发出确认,ACK=1、seq=u+1、ack=w+1。再经过2倍最长报文段寿命MSL(Maximum Segment Lifetime),本次TCP连接真正结束。
互动实验
半关闭后继续接收
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
服务器收到并确认客户端FIN后,尚未发送自己的FIN,可以继续向客户端发送数据吗?
连接状态与TIME-WAIT
典型主动关闭端经历ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、TIME-WAIT、CLOSED;被动关闭端经历ESTABLISHED、CLOSE-WAIT、LAST-ACK、CLOSED。TIME-WAIT允许最终ACK丢失时再次确认重复FIN,也让旧报文段在连接标识被复用之前失效。
这里分别画出四个关闭报文段,实际实现也可以把ACK与FIN合并;双方还可能同时关闭。RST是复位,不等同于正常的FIN关闭过程。
动手练习
为握手与有序关闭编号
握手初始序号为100/500。建立后客户端未发送数据就关闭,服务器确认、发送8字节数据,再发送FIN。列出握手与关闭Seq/ACK及主要状态。首个SYN-ACK丢失时怎样处理?MSL=30秒时TIME-WAIT多久?