TCP三次握手与四次挥手详解

一、TCP三次握手(连接建立)

过程:

  1. 客户端 → 服务器:发送SYN=1,seq=x(随机序列号),进入SYN_SENT状态

  2. 服务器 → 客户端:回复SYN=1,ACK=1,ack=x+1(确认号),seq=y(随机序列号),进入SYN_RCVD状态

  3. 客户端 → 服务器:发送ACK=1,ack=y+1,seq=x+1,双方进入ESTABLISHED状态

关键点:

  • 每次握手都携带序列号(seq)和确认号(ack)

  • 第三次握手可携带应用层数据

意义:

  1. 确认双向通信能力:验证客户端和服务器双方的发送和接收能力

  2. 同步初始序列号:为后续可靠传输奠定基础

  3. 防止历史连接干扰:避免网络延迟导致的旧连接请求造成混乱

  4. 协商关键参数:如MSS(最大报文段大小)、窗口大小等

二、TCP四次挥手(连接释放)

过程:

  1. 主动方 → 被动方:发送FIN=1,seq=u,进入FIN_WAIT_1状态

  2. 被动方 → 主动方:回复ACK=1,ack=u+1,进入CLOSE_WAIT状态(此时被动方可继续发送数据)

  3. 被动方 → 主动方:发送FIN=1,ACK=1,seq=v,ack=u+1,进入LAST_ACK状态

  4. 主动方 → 被动方:发送ACK=1,ack=v+1,进入TIME_WAIT状态(等待2MSL后关闭)

关键点:

  • 挥手次数比握手多一次是因为TCP的全双工特性

  • TIME_WAIT状态持续2MSL(报文最大生存时间)

意义:

  1. 可靠释放连接:确保双方都能完整结束数据传输

  2. 处理延迟报文:TIME_WAIT状态让网络中残余报文失效

  3. 保证最后ACK到达:若丢失,被动方可重传FIN报文

  4. 允许数据收尾:被动方可能有剩余数据需要发送

三、高频追问

Q1:为什么不能两次握手?
A:无法防止历史连接请求干扰,且无法确认客户端的接收能力。

Q2:为什么挥手需要四次?
A:因为TCP是全双工的,FIN和ACK需要分开发送,且被动方可能需要时间处理未发送完的数据。

Q3:TIME_WAIT为什么是2MSL?
A:1MSL确保最后一个ACK到达对端,另1MSL确保对端重传的FIN能被处理。

Q4:大量TIME_WAIT状态有什么问题?
A:会占用端口资源,可通过调整内核参数(如tcp_tw_reuse)或修改协议超时时间优化。

建议回答方式:

  1. 先清晰描述过程(可用画图辅助)

  2. 再解释每个环节的意义

  3. 最后补充常见问题的标准答案

  4. 可适当结合实际场景(如HTTP连接、数据库连接等)说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值