【计算机网络】TCP协议相关总结,TCP可靠性的生动讲解
TCP 可靠性 = 确保快递不丢、不乱、不过载
| 机制 | 作用(快递类比) | 防止的问题 |
|---|---|---|
| 检验和 | 检查包裹是否损坏,损坏就重新发 | 数据出错 |
| 序列号 | 给每个包裹编号,按顺序整理 | 乱序、重复 |
| 确认应答 | 每送到一件,就让收件人签收 | 丢失 |
| 滑动窗口 | 控制一次寄几件,避免堆积 | 过载 |
| 超时重传 | 快递超时未送达,自动补发 | 丢失 |
| 拥塞控制 | 高峰期限流,减少派送压力 | 网络堵塞 |
| 流量控制 | 收件人快递放不下了,暂停派送 | 过载 |
- 滑动窗口和流量控制的个人理解:
- 滑动窗口是限制某一刻的发送大小,而流量控制更像所需发送的全部流量的限制大小
- 即
- 滑动窗口 就像一条限流高速公路,最多同时允许 5 辆车行驶(窗口大小 = 5)。
- 流量控制 相当于整个高速的容量,如果总流量太大(接收端处理不过来),就会限速或关闭部分入口(缩小窗口)。
TCP 如何保证可靠性?
1️⃣ 检验和:接收端检测数据是否出错,若有错误则丢弃并请求重传。
2️⃣ 序列号 & 确认应答:
- 序列号:保证数据按序传输,去重重复数据。
- 确认应答(ACK):接收方收到数据后,发送 ACK 确认,告知发送方已接收的数据范围及下次应发送的位置。
3️⃣ 滑动窗口:动态调整发送数据量,提高传输效率,防止接收端超载。
4️⃣ 超时重传:若发送数据超时未收到 ACK,认为丢失并重新发送,超时时间动态计算。
5️⃣ 拥塞控制:监测网络状态,避免因发送速率过高导致网络拥堵,保证数据高效传输。
6️⃣ 流量控制:接收端通过窗口大小告知发送方自身处理能力,避免数据过载和丢包。
TCP 滑动窗口详解
1. 滑动窗口是什么?
TCP 滑动窗口(Sliding Window)是一种流量控制机制,用于管理发送端和接收端的数据传输速率,确保高效传输的同时,防止接收端超载。
窗口大小指的是不需要等待确认应答包而可以继续发送数据包的最大值。
核心作用:
- 提高传输效率:无需等待每个数据包的 ACK 确认才能继续发送,而是允许发送多个数据包,提高带宽利用率。
- 避免接收方过载:根据接收方的处理能力调整发送速率,防止数据溢出。
2. 滑动窗口的工作过程
假设发送端一次最多发送 5 个数据包,窗口大小 = 5(每个数据包用 ①②③④⑤ 表示):
1️⃣ 初始状态(发送窗口 = 5)
[①②③④⑤] ⑥⑦⑧⑨🔟 ... (窗口大小 = 5,最多可发送 5 个)
- 发送方先发送 ①②③④⑤,等待 ACK 确认。
2️⃣ 收到部分 ACK(窗口右移)
✔① ✔② [③④⑤⑥⑦] ⑧⑨🔟 ...
- ①② 已收到 ACK,窗口向前滑动 2 位,允许发送 ⑥⑦。
3️⃣ 持续滑动(高效传输)
✔① ✔② ✔③ ✔④ ✔⑤ [⑥⑦⑧⑨🔟] ...
- 每次收到 ACK,窗口继续滑动,提高传输效率。
3. 窗口大小如何调整?
1️⃣ 流量控制(Flow Control)
-
接收端调整窗口大小(rwnd),防止缓存溢出。例如:-
缓存充足 → 窗口大 → 发送方可发送更多数据。
-
缓存快满了 → 窗口缩小 → 发送方减少数据发送。
-
缓存满了 → 窗口变 0 → 发送方暂停发送,等待窗口恢复。
-
2️⃣ 拥塞控制(Congestion Control)
-
发送端根据网络情况调整窗口大小(cwnd),防止网络拥堵。例如:-
网络畅通 →
cwnd增加,提高发送速率。 -
检测到丢包 →
cwnd减小,降低发送速率。
-
TCP 拥塞控制详细解析
四大算法:
-
慢开始(Slow Start)
-
拥塞避免(Congestion Avoidance)
-
快速重传(Fast Retransmit)
-
快速恢复(Fast Recovery)
明确拥塞产生的基础过程:A发送报文,B回一个ACK表示收到,循环操作
慢开始
初始阶段指数增长,避免一开始就占满带宽,即每收到一次ACK就指数增长下一次发送报文的大小,但由此带来的问题是,从1开始的指数增长会不会也变得很大,导致拥塞,于是引出拥塞避免
拥塞避免
为慢开始的指数增长设定一个阈值,一旦超过后,不再指数增长,而是每次+1
快速重传
TCP 规定:当发送方连续收到 3 个重复 ACK,说明某个数据包丢失了。发送方立即重传丢失的数据包,而不等待超时。
-
例:发送方发送 pkt1, pkt2, pkt3, pkt4。
pkt2 丢失,接收方收到 pkt3 后,发送 重复 (在很短的时间内)ACK(pkt2)。 -
发送方收到 3 个 ACK(pkt2),立即重传 pkt2,无需等待超时。(如果没有快速重传机制,正常是接收方每收到pkt2,所以一直不发送pkt2的ACK导致发送方没接到这个ACK最终超时,才进行重新发送)
快速恢复
避免慢开始,从丢包前的一半窗口大小开始,随后采用拥塞避免算法逐步增加窗口
- 设想一下当前链路每次传输100,突然丢包,如果没有快速恢复,则根据慢开始算法从1开始,重新增长速度,太低效,因此规定,减少窗口大小到1/2而不从1开始,即,从50开始,同时停止指数增长,每次+1,复用拥塞避免的逻辑而不使用慢开始,这就是快速恢复。
什么是 SYN洪泛攻击?如何防范?
SYN洪泛攻击属于 DOS 攻击的一种,它利用 TCP 协议缺陷,通过发送大量的半连接请求,耗费 CPU 和内存资源。
1. 什么是半连接(Half-Open Connect)
在 TCP 三次握手过程中,服务器发送 [SYN/ACK] 后(第二次握手后),进入 SYN_RECV 状态,等待客户端的 [ACK]。
- 若收到
[ACK],连接建立。 - 若未收到,服务器会 重发
[SYN/ACK]直至超时,占用资源。
2. SYN 攻击原理
攻击者伪造 大量不存在的 IP 地址,向服务器发送 [SYN],服务器回复 [SYN/ACK] 并等待 ACK,但客户端 不会响应。
- 影响:大量半连接占满队列,导致正常请求无法处理,甚至服务器瘫痪。
- 检测:若服务器出现 大量 SYN_RECV 连接,且来源 IP 随机,基本可判定为 SYN 攻击。
3. SYN 攻击防范
- 网络层防护:
- 通过 防火墙/路由器 过滤异常流量。
- 限制 每个 IP 的 SYN 速率。
- TCP/IP 协议栈优化:
- 增加最大半连接数,提高抗攻击能力。
- 缩短 SYN 超时时间,减少资源占用。
- SYN Cookies 技术:
- 在
SYN/ACK中嵌入 特殊编码(Cookie),不分配资源,只有客户端回复正确的ACK才真正建立连接。 - 特点:无需维护半连接队列,可有效抵御 SYN 攻击。
- 在
https://github.com/0voice
相关文章:
【计算机网络】TCP协议相关总结,TCP可靠性的生动讲解
TCP 可靠性 确保快递不丢、不乱、不过载 机制作用(快递类比)防止的问题检验和检查包裹是否损坏,损坏就重新发数据出错序列号给每个包裹编号,按顺序整理乱序、重复确认应答每送到一件,就让收件人签收丢失滑动窗口控制…...
lua基础语法学习
lua基础语法学习 文章目录 lua基础语法学习1. 基础2. 输入输出3. 分支结构与循环结构4. 函数5. 元表与元方法6. 面向对象 1. 基础 注释 --单行注释--[[ 多行注释 --]]标识符 标识符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上 0 个或多个字母,下划线&…...
【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】
文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-1微调2.2.3.2 zero-2微调2.2.3.3 zero-3微调2.2.3.4 单卡Lora微调 2.2.4 实验2.2.4.1 实验1:多GPU微调-zero12.2.4.2 实验2:…...
【SpringBoot】数据访问技术spring Data、 JDBC、MyBatis、JSR-303校验
Spring Boot 数据访问技术及特性 目录标题 Spring Boot 数据访问技术及特性摘要1. 引言2. Spring Data架构与原理2.1 Spring Data概述2.2 Spring Data核心组件2.3 Spring Boot与Spring Data的集成机制 3. Spring Boot与JDBC的整合3.1 JDBC整合流程3.2 数据源自动配置3.3 JdbcTe…...
手机放兜里,支付宝“碰一下”被盗刷?
大家好,我是小悟。 近期,网络上关于“支付宝‘碰一下’支付易被盗刷”的传言甚嚣尘上,不少用户对此心生疑虑。 首先,要明确一点:“碰一下”支付并不会像某些传言中所描述的那样容易被隔空盗刷。这一观点已经得到了支付…...
Java Web应用中获取客户端的真实IP地址
Java Web应用中获取客户端的真实IP地址,尤其在存在代理服务器的情况下。 代码示例: public static String getClientIP(HttpServletRequest request) {String ip = parseCommaSeparatedIPs(request.getHeader("X-Forwarded-For"));if (isInvalid(ip)) {ip = pars…...
vue框架后遗症∶被遗忘的dom操作
用多了vue、react等前端框架,不得不说用数据驱动视图来开发真的很香,但是也免不了会有不用这些框架的项目,dom操作还是很有必要的,一开始学习网页设计的时候就教过,后面一直开发项目基本上用框架。虽然有些想不起来了&…...
基于深度学习+NLP豆瓣电影数据爬虫可视化推荐系统
博主介绍:资深开发工程师,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有…...
8. 示例:对32位数据总线实现位宽和值域覆盖
文章目录 前言示例一:示例二:示例三:仿真与覆盖率分析覆盖点详细说明覆盖率提升技巧常见错误排查 示例四:仿真步骤 前言 针对32位数据总线实现位宽和值域的覆盖,并且能够用xrun运行,查看日志和波形。cover…...
深度剖析Seata源码:解锁分布式事务处理的核心逻辑
文章目录 写在文章开头如何使用源码(配置转掉)基于AT模式详解Seata全链路流程Seata服务端启动本地服务如何基于GlobalTransaction注解开启事务客户端如何开启分布式事务RM和TC如何协调处理分支事务RM生成回滚日志事务全局提交与回滚小结参考写在文章开头 在当今分布式系统日益…...
快速列出MS Word中所有可用字体
Word中有很多字体,虽然在字体下拉列表中提供了字体的样例,但是并不全面,例如使用Batang字体的话,数字会显示成什么效果,就无法直观的看到。 打开Word应用程序,新建一个空白文档,按AltF11打开VBE…...
SpringDataJPA使用deleteAllInBatch方法逻辑删除失效
概述 在使用Spring Boot JPA时,执行批量删除操作时,遇到逻辑删除失效的问题。具体而言,当使用deleteAllInBatch方法时,数据会被物理删除,而不是进行逻辑删除;但是当使用deleteAll时,逻辑删除操…...
【密码学实战】Java 实现 SM2 国密算法(签名带id、验签及 C1C3C2 加密解密)
前言 SM2是中国国家密码管理局发布的椭圆曲线公钥密码算法标准(GB/T 32918),属于国密算法体系。与RSA和ECDSA相比,SM2在相同安全强度下密钥更短、计算效率更高。本文将介绍如何在Java中实现SM2的密钥生成、数字签名、验签、加密及…...
flex布局自定义一行几栏,靠左对齐===grid布局
模板 <div class"content"><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"…...
Harmony os next~鸿蒙应用开发入门教程
鸿蒙应用开发入门教程 基础准备与环境搭建 1. 了解鸿蒙系统 1.1 核心理念学习 HarmonyOS(鸿蒙系统)是华为推出的全场景分布式操作系统,其核心特点如下: 分布式能力 设备协同:手机、平板、智能手表、IoT设备等可无…...
使用 Ansys Discovery 高效创建角焊缝
概括 Ansys Discovery 2024R1 中的焊缝功能是一项重大改进,旨在简化和精简工程模拟中焊缝的分配过程。此功能集成了间歇焊缝等高级工具和功能,以更直观、更高效的方式促进焊缝的准备和分配。 该功能为工程师提供了无缝的工作流程,以准备和分…...
Rk3568驱动开发_新字符设备驱动原理_7
1.申请设备号: 之前用的是register_chrdev(LED_MAJOR, LED_NAME, &led_fops);手动申请很不方便 使用alloc_chrdev_region函数申请设备号,手动申请的话要先查询是否有空余的设备号,很不方便,用此函数内核会自动将将空余设备号…...
ESP32-S3 42引脚 语音控制模块、设备运转展示 GOOUUU TECH 果云科技S3-N16R8 控制舵机 LED开关 直流电机
最近还是想玩了下esp32,基于原来的开发板,看见佬做了一个语音识别的项目,通过这个语音识别可以控制LED开关和直流电机这些,详情可见视频(推荐)具体硬件就在下方。 信泰微】ESP32-S3 42引脚 语音控制模块、…...
2025年光电科学与智能传感国际学术会议(ICOIS 2025)
重要信息 官网:www.ic-icois.org 时间:2025年3月14-16日 地点:中国-长春 简介 2025年光电科学与智能传感国际学术会议(ICOIS 2025)将于2025年3月14-16日在中国-长春隆重召开。会议将围绕“光学光电”、“智能传感”…...
高性能PHP框架webman爬虫引擎插件,如何爬取数据
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
三大主流负载均衡器之对比(Comparison of the Three Mainstream Load balancers)
【 Linux 】三大主流软件负载均衡器对比(LVS、Nginx、HAproxy) 三大主流软件负载均衡器对比(LVS、Nginx、HAproxy) (资料来自网络,做了部分的补充说明) LVS: 1. 抗负载能力强,性能高,能达到F5的60%,对…...
深入探索Python机器学习算法:监督学习(线性回归,逻辑回归,决策树与随机森林,支持向量机,K近邻算法)
文章目录 深入探索Python机器学习算法:监督学习一、线性回归二、逻辑回归三、决策树与随机森林四、支持向量机五、K近邻算法 深入探索Python机器学习算法:监督学习 在机器学习领域,Python凭借其丰富的库和简洁的语法成为了众多数据科学家和机…...
Qt跨线程信号槽调用:为什么信号不能像普通函数那样调用
1. 信号与槽机制的基本原理 在 Qt 中,信号与槽机制是一种事件驱动的通信方式,用于对象之间的解耦交互。其关键特点如下: 信号不能直接调用 信号只是一个声明,并没有实际的函数实现。它们通过 emit 关键字在对象内部被触发&…...
Ubuntu+deepseek+Dify本地部署
1.deepseek本地部署 在Ollama官网下载 需要魔法下载 curl -fsSL https://ollama.com/install.sh | sh 在官网找到需要下载的deepseek模型版本 复制命令到终端 ollama run deepseek-r1:7b 停止ollama服务 sudo systemctl stop ollama # sudo systemctl stop ollama.servi…...
【LLM】DeepSeek开源技术汇总
note 一、FlashMLA:MLA解码内核 二、DeepEP:针对MoE和EP的通信库 三、DeepGEMM:FP8 通用矩阵乘法(GEMM)库 四、DualPipe、EPLB:双向管道并行算法 五、3FS:一种高性能分布式文件系统 文章目录 n…...
PostgreSQL10 逻辑复制实战:构建高可用数据同步架构!
PostgreSQL10 逻辑复制实战:打造高可用数据同步架构! 概述 PostgreSQL 10 引入了逻辑复制(Logical Replication),为数据库高可用和数据同步提供了更灵活的选择。PostgreSQL 复制机制主要分为物理复制和逻辑复制两种&…...
springboot之HTML与图片生成
背景 后台需要根据字段动态生成HTML,并生成图片,发送邮件到给定邮箱 依赖 <!-- freemarker模板引擎--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifa…...
455. 分发饼干(LeetCode)
题目来源: 455. 分发饼干 - 力扣(LeetCode) 题目内容: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i]…...
go设计模式
刘:https://www.bilibili.com/video/BV1kG411g7h4 https://www.bilibili.com/video/BV1jyreYKE8z 1. 单例模式 2. 简单工厂模式 代码逻辑: 原始:业务逻辑层 —> 基础类模块工厂:业务逻辑层 —> 工厂模块 —> 基础类模块…...
基于STM32的智能家居能源管理系统
1. 引言 传统家庭能源管理存在能耗监控粗放、设备联动不足等问题,难以适应绿色低碳发展需求。本文设计了一款基于STM32的智能家居能源管理系统,通过多源能耗监测、负荷预测与优化调度技术,实现家庭能源的精细化管理与智能优化,提…...
