当前位置: 首页 > news >正文

TCP 三次握手与四次挥手深度解析(面试高频)

一、三次握手详解

问题:为什么必须是三次握手?两次或四次会有什么问题?
三次握手流程:

Client Server SYN=1, seq=x (我想连接) SYN=1, ACK=1, seq=y, ack=x+1 (我准备好了,你呢?) ACK=1, seq=x+1, ack=y+1 (我也好了,可以传输啦~) Client Server

为什么不能是两次握手?

历史连接问题:
如果客户端发送的SYN因网络延迟超时重传,旧的SYN可能在新连接建立后到达服务端。
两次握手时,服务端直接进入连接状态,会错误接受过期请求。
三次握手通过客户端的最终ACK确认当前连接的时效性。
资源浪费风险:
服务端在收到SYN后立即分配资源(如连接缓冲区),若客户端不回应ACK,会导致资源长期占用。
攻击者可利用此发起SYN Flood攻击。
双向通信能力验证:
第三次握手确认客户端的接收能力和服务端的发送能力均正常。

为什么不需要四次握手?

第三次握手已能同时携带数据(如HTTP请求),额外握手会增加延迟而无实际收益。

二、四次挥手详解

问题:为什么需要四次挥手?能否合并为三次?

Client Server FIN=1, seq=u (我要关闭-第一次挥手) ACK=1, ack=u+1 (知道了-第二次挥手) FIN=1, seq=v, ack=u+1 (我也要关闭-第三次挥手) ACK=1, ack=v+1 (好的,关闭完成-第四次挥手) Client Server

为什么需要四次挥手?

半关闭状态(Half-Close):

  • TCP允许单向关闭。当客户端发送FIN后,服务端可能仍有数据需要发送(如服务器未响应的剩余HTTP数据)。
  • 第二次挥手(ACK)仅确认收到FIN,不表示服务端立即关闭。

数据完整性保证:

  • 服务端在第三次挥手(FIN)前会确保所有数据已发送完毕。
  • 若合并第二次和第三次挥手,可能导致数据丢失。

能否合并为三次挥手?

可以,但有限制:
当服务端没有待发数据时,其第二次挥手(ACK)和第三次挥手(FIN)可合并为一个报文(称为延迟确认)。

Client Server FIN ACK+FIN (合并报文) ACK Client Server

相关文章:

  • 百度热力图数据获取,原理,处理及论文应用25
  • SEO长尾关键词优化实战策略
  • webpack和vite的区别是什么
  • NAT穿越
  • Ollama+open-webui搭建私有本地大模型详细教程
  • HashMap 在 JDK 1.7 和 JDK 1.8 有什么区别
  • EasyExcel导出自动回显中文,读取自动转换码值(基于全局转换器与自定义注解)
  • 基于SpringBoot的高校学术交流平台
  • FPGA学习(三)——数码管实现四位分秒计数器
  • 【Easylive】saveCategory方法中的if判断(对应增加和修改)
  • 如何获取ecovadis分数?获取ecovadis分数流程,更快通过ecovadis分数方法
  • 27--当路由器学会“防狼术“:华为设备管理面安全深度解剖(完整战备版)
  • 2025年消费观念转变与行为趋势全景洞察:”抽象、符号、游戏、共益、AI”重构新世代消费价值的新范式|徐礼昭
  • 【Spiffo】环境配置:最简cmake工程构建(含使用例)
  • 2025年win10使用dockerdesktop安装k8s
  • 浙大研究团队揭示电场调控5-HT1AR的分子机制
  • 动态规划问题之最长公共子序列
  • 【Easylive】convertVideo2Ts 和 union 方法解析
  • UML统一建模语言
  • Mysql之事务(下)
  • 《中华人民共和国经济史(1949—1978年)》教材出版发行
  • 三星“七天机”质保期内屏幕漏液被拒保,澎湃介入后已解决
  • 浙江推动人工智能终端消费:家居机器人纳入以旧换新补贴范围
  • 83岁山水花鸟画家、书法家吴静山离世,系岭南画派代表人物
  • “GoFun出行”订单时隔7年扣费后续:平台将退费,双方已和解
  • 乌克兰官员与法德英美四国官员举行会谈