计算机网络篇1:OSI + HTTP进化史 + 三次握手四次挥手

一、osi模型

主要的三大层:

  • 应用层 (Application Layer):这里的“居民”是我们熟悉的HTTP, HTTPS, DNS。它们负责直接为用户的应用服务。

  • 传输层 (Transport Layer):这里的“搬运工”是TCPUDP。它们负责端到端的数据传输(管发不管送达是 UDP,使命必达是 TCP)。

  • 网络层 (Network Layer):这里的核心是IP。负责寻址和路由,告诉数据包该往哪走。

二、http和https

HTTP 协议的发展,本质上是减少延迟 (Latency)提高带宽利用率的历史。

1. HTTP/1.0 vs HTTP/1.1:短连接到长连接

  • HTTP/1.0 (短连接):每次请求都要新建一个 TCP 连接,发完就断。就像送快递,送一个包裹就得重新打一次电话叫快递员,效率极低。

  • HTTP/1.1 (长连接 Keep-Alive):引入了长连接。快递员送完一个包裹后不走,继续等待下一个包裹。

    • 痛点:虽然连接复用了,但请求必须排队(串行)。如果前面的请求(大文件)处理慢,后面的请求(小数据)就得干等。这就是应用层的队头阻塞 (Head-of-Line Blocking)

2. HTTP/1.1 vs HTTP/2.0:从“串行”到“并行”

为了解决阻塞,HTTP/2.0 带来了革命性的改变:

  • 多路复用 (Multiplexing):不再按顺序排队,而是将数据切成二进制帧。所有请求和响应的帧在同一个 TCP 连接中乱序混发,接收端根据 ID 重新组装。

  • 头部压缩 (HPACK):使用字典压缩 Header,不再重复发送 User-Agent 等冗余信息。

  • 痛点:虽然应用层不堵了,但底层还是 TCP。TCP 的队头阻塞依然存在——一旦发生丢包,TCP 协议会强行暂停所有数据流,等待重传。

3. HTTP/3.0:从TCP到UDP

既然 TCP 太死板,HTTP/3.0 直接抛弃 TCP,改用基于UDPQUIC 协议

  • 0-RTT 建连:极速建立连接。

  • 连接迁移:基于 ID 识别连接,网络从 WiFi 切到 4G 不断线。

  • 彻底解决阻塞:不同数据流互不干扰,丢包只重传丢失的部分。

4. 关于 HTTPS:更安全

HTTP 是明文传输(裸奔),HTTPS 则是HTTP + SSL/TLS

  • 核心逻辑非对称加密(RSA/ECC)用于安全的交换密钥,对称加密(AES)用于快速传输数据。对称密钥就是加密解密同一把钥匙,非对成就是公钥加密,私钥解密。

  • 流程简述:客户端索要证书 -> 验证证书 -> 算出随机密钥 -> 用公钥加密发给服务端 -> 双方达成共识,后续用随机密钥进行加密通信。

三、TCP 的核心 —— 握手与挥手(重点)

前置知识

在研究三次握手之前,我们必须先看懂 TCP 报文格式包括里面的四个核心字段。它们决定了连接的状态和数据的顺序。

a. 序号 (Sequence Number, 简称 seq)

  • 是什么:它是一个 32 位的数字。

  • 作用给数据编号。TCP 是面向字节流的,为了解决乱序问题,发送出去的每一个字节都有一个编号。

  • 通俗理解:就像你写一本 1000 页的书寄给朋友。

    • 第一页的seq= 1

    • 第二页的seq= 2

    • ...

    • 这样朋友收到后,即使纸张乱了,看页码(seq)也能重新排好序。

  • 注意:为了安全(防止黑客伪造),最开始的序号(ISN)通常不是从 0 或 1 开始,而是随机生成的。

b. 确认号 (Acknowledgment Number, 简称 ack)

  • 是什么:它也是一个 32 位的数字。

  • 作用告诉对方“我想要什么”

  • 核心逻辑ack = N表示“N 序号之前的所有数据我都收到了,下一次请你从 N 开始发”

  • 通俗理解:朋友收到了前 10 页,他回复你ack = 11。意思是:“前 10 页都齐了,快把第 11 页发过来”。

c. 标志位:SYN (Synchronize)

  • 是什么:一个开关(Bit)。

  • 作用发起新连接

  • 场景:当SYN=1时,说明这是一个“请求建立连接”的包。

d. 标志位:ACK (Acknowledgment)

  • 是什么:也是一个开关(Bit)。

  • 作用确认收到

  • 场景:只要连接建立后,所有传输的数据包ACK开关都必须推上去(置为 1),否则传输无效。

TCP 是面向连接的、可靠的传输协议。它的可靠性体现在:我知道你知道了

1. 三次握手 (Three-Way Handshake)

建立连接的过程,就是确认双方发送接收能力的过程。

  • 第一次 (SYN):客户端发包。含义:“我是客户端,我想连你,我的初始序号是 X。”(客户端处于SYN_SENT

  • 第二次 (SYN + ACK):服务端回复。含义:“收到 X 了(ACK=X+1)。我是服务端,我也想连你,我的初始序号是 Y。”(服务端处于SYN_RCVD

  • 第三次 (ACK):客户端回复。含义:“收到 Y 了(ACK=Y+1)。连接建立,可以发数据了。”(客户端处于ESTABLISHED

为什么是三次?不是两次?

我们三次握手的目的是要让客户端和服务端都知道:自己和对方都可以发送和接收,而如果没有第三次握手的话,服务端它是不知道syn和ack是不是送到的,也就是它不能确定自己是不是发成功了,也不知道客户端是不是接收成功了。

案例:帮助理解

目标:凑齐 4 张拼图 客户端能发? 服务端能收? 服务端能发? 客户端能收? 我们来看看,如果是两次握手,这 4 张拼图能凑齐吗? 第一步:客户端 -> 服务端 (SYN) 动作:客户端发包,服务端收到了。 服务端心想: “好的,我收到了你的信。” -> 证明了:客户端能发 (√),服务端能收 (√)。 缺憾:此时,客户端什么都不知道。 第二步:服务端 -> 客户端 (SYN + ACK) 动作:服务端回信,客户端收到了。 客户端心想: “太好了!既然我收到了回信,说明我的信你收到了,你的信我也收到了。” 证明了:服务端能收 (√),服务端能发 (√),客户端能发 (√),客户端能收 (√)。 结论:对于客户端来说,两次握手后,它手里的 4 张拼图已经全齐了! 它知道连接是通的。 关键问题来了:此时服务端的视角 在发完第二步(SYN+ACK)之后,如果只有两次握手(没有第三步): 服务端心想: “我把回信发出去了,但是……他收到了吗?” “如果他没收到,那我发的数据岂不是都石沉大海了?” “我现在只知道‘他能发’,但我完全不知道‘他能不能收’!” 你看,对于服务端来说,拼图缺了两块: 服务端能发?(服务端自己不知道发出去能不能到) 客户端能收?(服务端不知道客户端耳朵好不好使) 第三步:客户端 -> 服务端 (ACK) 动作:客户端回一句:“我收到你的确认了”。 服务端心想: “Nice!他收到我的回信了!” 补齐最后两块拼图:证明了 服务端能发 (√),客户端能收 (√)。
造成的问题:僵尸请求问题

2. 四次挥手 (Four-Way Wave)

断开连接时,由于 TCP 是全双工(双向)的,需要双方分别关闭自己的通道。

  • 第一次 (FIN):客户端说:“我没数据发了,我要挂了。”(客户端进入FIN_WAIT_1

  • 第二次 (ACK):服务端说:“知道你要挂了,但我还有数据没发完,你先等着。”(服务端进入CLOSE_WAIT,客户端进入FIN_WAIT_2

    • 此时,客户端 -> 服务端的通道关闭,但 服务端 -> 客户端 依然畅通。

  • 第三次 (FIN):服务端数据发完了,说:“好了,我也没数据了,我也挂了。”(服务端进入LAST_ACK

  • 第四次 (ACK):客户端说:“好的,拜拜。”(客户端进入TIME_WAIT

为什么是四次?

其实最本质的原因是tcp是全双工的。

因为服务端的 ACK(确认收到客户端的关闭请求)和 FIN(服务端自己的关闭请求)通常不能合并发送。中间那段时间服务端可能还在处理未发送完的数据。

3. 关键状态:TIME_WAIT

主动关闭连接的一方(通常是客户端),在发送完最后一个 ACK 后,必须等待2MSL(报文最大生存时间的2倍)才能彻底释放资源。

  • 为什么?

    1. 防丢包:万一最后一个 ACK 丢了,服务端会重发 FIN。如果客户端早已关闭,服务端就会报错。2MSL 是为了兜底。

    2. 防混淆:等待足够长的时间,让网络中所有残留的旧报文都自然消亡,避免影响新的连接。


总结

  • OSI/TCP是架构基础。

  • HTTP演进是为了更快(多路复用)和更强(QUIC)。

  • HTTPS是为了更安全(混合加密)。

  • TCP 握手挥手是为了保证在不可靠的网络中实现可靠的通信(序列号同步与确认机制)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1155501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Martin Fowler:AI带来非确定性计算时代的挑战与机遇

Thoughtworks首席科学家、面向对象编程长期专家Martin Fowler认为,AI是他整个职业生涯中见过的最大编程转变。在由Gergely Orosz主持的Pragmatic Engineer播客采访中,Fowler坦言关于AI,"我们仍在学习如何做到这一点。"对于行业来说…

计算机毕业设计springboot天天儿童福利院管理系统 基于 Spring Boot 的儿童福利院信息管理系统设计与实现 Spring Boot 框架下儿童福利院管理系统的开发与应用

计算机毕业设计springboot天天儿童福利院管理系统244mg9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着社会的不断发展,信息技术在各个领域的应用愈发广泛。特别…

基于微信小程序的心理咨询预约系统-计算机毕业设计源码+LW文档免费

摘 要:随着国家的高速发展和互联网技术的不断进步,生活节奏日益加快。为了更有效地利用时间并提升工作效率,越来越多的人倾向于通过互联网处理各类事务,这促使了微信小程序的大量涌现。与此同时,人们逐渐接受了这种便…

taobao商品详情API接口数据分析比价

如何选择与实现 1. 选择策略 选择API的情况: 你的应用需要长期稳定运行。对数据的准确性和实时性要求很高。业务场景需要全面、深度的商品信息(如构建完整的商品详情页)。希望合规操作,避免法律风险。 考虑解析详情页的情况&…

基于STM32与W5500的Modbus TCP协议实现指南

一、硬件架构设计核心硬件组成主控芯片:STM32F103(Cortex-M3内核,72MHz主频)网络模块:W5500(集成MACPHY,支持TCP/IP硬件协议栈)通信接口:SPI(STM32 SPI2 ↔ W…

AI工作负载推动数据库重返Postgres

我花了几年时间观察数据库领域经历一波波的兴奋和失望。向量、图数据库、多模态和NoSQL系统轮流成为焦点。每一波都承诺更简单的开发和新的可能性。有些兑现了承诺,有些没有。大多数在当时都有其合理性。然后AI来了。AI不仅仅是对现有系统的延伸,它打破了…

【TSP问题】基于变邻域搜索算法求解旅行社问题附Matlab代码和论文

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &#x1…

从零开始刷算法——二叉树篇:层序遍历 + 有序数组转二叉搜索树

在二叉树的算法体系中,"读取"(遍历)与"写入"(构建)是两个最核心的命题。本文将通过两道经典题目——二叉树的层序遍历与有序数组转搜索树,深入剖析两种截然不同的思维模式:…

为什么说RAG是AI 2.0时代的“杀手级”应用?

你好,我是常扬,欢迎你加入到《RAG 快速开发实战》课程的学习中。在正式开始之前,我想先介绍一下自己,我本科在同济大学学习软件工程,后来又在复旦大学攻读人工智能方向的硕士和博士,期间发表过多篇 SCI 核心…

零基础也能学懂提示词?OpenCSG公益课给出清晰学习路径:从“会问”到“会驱动”

提示词工程的进阶路径不是背技巧,而是从简单到复杂的“表达升级”。本文给出零基础可执行的学习路线与写法框架,让你用自然语言更精确地驱动AI完成复杂任务。 一、先建立一个判断:你写的不是“问题”,而是“任务指令” 很多提示…

通义深度搜索-生成对话

产品链接 面向深度的查询问答和调研分析需求场景,多步骤推理规划研究路径,生成有洞察、可溯源、图文并茂的长文报告-大模型服务平台百炼(Model Studio)-阿里云帮助中心 本产品(通义深度搜索)对外服务接口目录。所有接口使用 DashScope HTTP 协议对外提…

机器学习:基于python二手房数据分析系统 可视化 Scrapy 爬虫 链家二手房数据 Django框架 基于用户的协同过滤推荐 二手房推荐系统 (源码)

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…

机器学习:python招聘数据分析可视化系统 机器学习 招聘推荐 薪资预测 爬虫 决策树回归模型 XGBoost回归模型 Flask框架 前程无忧

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…

书籍-塔西佗《编年史》

塔西佗《编年史》详细介绍 书籍基本信息 书名:编年史(Annales / Ab Excessu Divi Augusti) 作者:塔西佗(Publius Cornelius Tacitus,约56-120年) 成书时间:约公元110-120年 卷数&…

如何翻译图片?图片上的外语一键翻译成中文,教程来了~

工程图纸是扫描图可以翻译吗?手机拍的图纸照片可以翻译吗?图片形式的图纸可以翻译吗?针对以上三类工程图纸翻译常见问题,进行统一答复:PlanForm-AI工程图纸翻译都可以翻译,教程如下:1.如果你遇到…

物联网毕设 基于单片机的红外热视仪(源码+硬件+论文)

文章目录 0 前言1 主要功能2 硬件设计3 核心软件设计4 实现效果5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己…

机器学习:python租房数据分析可视化系统 K-means聚类算法 线性回归预测算法 机器学习 链家租房网 Django框架 scrapy 爬虫(建议收藏)

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…

OpenCSG课程精华:为什么结构化提示词更有效?Markdown / XML / JSON 的正确打开方式

构化提示词的关键不是“好看”,而是边界清晰、可被系统消费。本文解释 Markdown、XML、JSON 三种结构化方式的适用场景,并给出更稳的输出控制方法。 一、结构化的意义:先解决“边界不清”,再谈“表达优雅” 大模型最怕的是混淆&…

jmeter基础知识-安装配置环境变量

1.安装JDK 2.配置java环境变量 搜索栏输入编辑环境变量 用户变量:只对当前用户生效 系统变量:对所有用户生效 点击新建在变量名中输入:JAVA_HOME 变量值中输入jdk的安装路径 例如:C:\ProgramFiles\Java\jdk1.8.0_161 再次点击…

RH134 第八章 管理存储堆栈

一 创建和拓展逻辑卷1.1 逻辑卷(LVM)概念LVM 有助于更加轻松地管理磁盘空间。可以将卷组 Volume Group 中的可用空间分配给逻辑卷 (Logical Volume),并且可以调整文件系统的大小✔ 如果磁盘出现错误,可将替换磁盘注册为物理卷 (Ph…