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

网页中的三次握手,四次挥手

目的:在客户端和服务器之间建立一个可靠的TCP连接,确保双方都具有发送和接收数据的能力。

这个过程就像一个双方确认通话的过程:

第一次握手 - SYN

客户端 向 服务器 发送一个TCP数据包。

第二次握手 - SYN-ACK

服务器 收到客户端的 SYN 包后,如果同意连接,会回复一个数据包。

第三次握手 - ACK

客户端 收到服务器的 SYN-ACK 包后,会再向服务器发送一个确认包。

至此,连接建立成功,双方可以开始传输数据(比如HTTP请求和响应)。

为什么是三次,而不是两次?
主要是为了防止已失效的连接请求报文突然又传到了服务器,导致错误。
假设只有两次握手:如果客户端一个旧的连接请求在网络中滞留了很久,后来才到达服务器,服务器会误以为这是一个新的连接请求并回复确认。如果是两次握手,此时连接就建立了,但客户端并没有意图建立这个连接,也不会发送数据,从而导致服务器空等,浪费资源。三次握手的设计使得客户端不会对服务器的确认再进行确认,这个无效的连接请求就不会被建立。

----------------------------------------------------------分割线---------------------------------------------------------

TCP 四次挥手 - 断开连接
目的:安全、可靠地终止一个TCP连接。由于TCP连接是全双工的(数据可以双向传输),每个方向都必须单独进行关闭。

这个过程就像两个人通完话后礼貌地道别:

第一次挥手 - FIN

主动关闭方(假设是客户端) 发送一个TCP数据包。

第二次挥手 - ACK

被动关闭方(服务器) 收到 FIN 包后,会立即回复一个确认包。

第三次挥手 - FIN

当被动关闭方(服务器) 也完成了数据的发送,准备关闭连接时,它会发送一个 FIN 包。

第四次挥手 - ACK

主动关闭方(客户端) 收到服务器的 FIN 包后,会发送一个确认包。

这个数据包中标志位 ACK=1。

为什么是四次挥手?
因为TCP连接是全双工的,一方关闭发送通道后,另一方可能还有数据要发送。因此,关闭过程需要分两步:

第一次和第二次挥手:关闭从A到B的连接。

第三次和第四次挥手:关闭从B到A的连接。

http://www.jsqmd.com/news/35972/

相关文章:

  • 设计驱动开发实战
  • Linux - 11 Shell(脚本、变量、条件判断)
  • pythontip 字符串转列表
  • 双亲委派模型?就是【Java开发日记】请介绍类加载过程,什么
  • #20232408 2025-2026-1 《网络与系统攻防技术》实验四实验报告 - 20232408
  • 2025.11.10~2025.11.16
  • 性能学习
  • npm: 无法加载文件
  • NOIP 模拟赛 4 总结
  • Python中a = b = 10的底层机制:从名字绑定到引用计数的完整拆解
  • Python中“赋值”说法是否规范?详解`=`的语句属性与无返回值特性
  • 洛谷 P14461 【MX-S10-T2】『FeOI-4』青年晚报
  • Microsoft Agent Framework 接入DeepSeek的优雅姿势
  • 详细介绍:C语言——深入解析C语言指针:从基础到实践从入门到精通(二)
  • 深入解析:k8s学习(二)——kubernetes整体架构及组件解析
  • 2025.11.9博客
  • 硬件基础知识和典型应用-4G模组供电设计推荐
  • 计算机课程在线视频 —— 王道计算机考研 计算机网络
  • 案例研究
  • 深入解析:归档及压缩、重定向与管道操作和综合使用,find精确查找、find处理查找结果、vim高级使用、vimdiff多文件使用
  • 高雅 - Gon
  • AI 测试 智能体30节课
  • BUUCTF-wustctf2020_getshell_2
  • P14359 [CSP-J 2025] 异或和 / xor(官方数据)
  • 从CPython底层解析:为何a=10 b=10复用对象,a=[] b=[]新建对象?
  • 对长度为 n 的数组 arr,调用 `merge_sort(a, 0, n-1)`,在排序过程中,`merge` 函数的递归调用次数大约是多少?
  • 解析SP3D VUE和PDMS RVM文件-PlantAssistant
  • 20251109-3
  • VS Code 1.105正式发布: AI 新特性详解:7 大亮点全面提升智能开发体验 - 详解
  • kettle从入门到精通 第110课 ETL之kettle webspoon的两种部署方式docker+tomcat使用教程