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

考研复习Day 9 | 计网:运输层(下)

一TCP可靠传输的实现1.1 以字节为单位的滑动窗口核心概念滑动窗口是以字节为单位的每个字节都有序号。发送窗口的结构区域说明发送窗口后沿之前已发送且已收到确认发送窗口内允许发送的序号发送窗口前沿之后不允许发送窗口移动规则指针移动方向触发条件后沿前移不可能后移收到新的确认前沿向前移动也可能不动收到确认或窗口扩大重要发送窗口的大小不能超过接收方传来的报文首部中的窗口字段值。三个指针发送窗口指针含义P1发送窗口的后沿P2允许发送但尚未发送的第一个字节P3发送窗口的前沿外即将进入P2 ~ P3之间的部分称为可用窗口滑动窗口工作示例A 为发送方B 为接收方。开始时A 根据 B 发来的窗口值20和确认号31构建了自己的发送窗口如上图图5-14所示。此时发送窗口内的数据都是允许发送但尚未发送的数据。现在 A 发送了 11 个字节的数据序号 31-41如下图图5-15所示。此时发送窗口内的数据包含已发送但未收到确认P1~P2的数据和允许发送但尚未发送的数据P2~P3两部分。这时发送窗口的状态需要三个指针来描述P1 指向发送窗口的后沿P2 指向允许发送但尚未发送的第一个字节P3 指向发送窗口的前沿外即将进入发送窗口的字节。P2~P3 之间的部分又称可用窗口。然后 B 收到了序号为 3233 的数据但是没有收到序号为 31 的数据因为 B 只对按序收到的数据中的最高序号进行确认所以此时 B 发送给 A 的确认报文段中确认号仍为 31。接下来 B 收到了序号为 31 的数据并把 31~33 的数据交付给应用进程然后删除了这些数据。B 的接收窗口也向前移动了 3 个序号同时给 A 发送确认号为 34 的确认报文。A 收到确认号为 33 的报文后也将发送窗口向前滑动了 3 个序号此时发送窗口大小没变但是可用窗口变大了。接下来 A 继续把可用窗口中的数据发送完后P2 指针向前移动和 P3 重合此时 A 的可用窗口已减小到 0要暂时停止发送等待收到确认。如果 A 超时未收到确认报文就重传这部分数据直到收到 B 的确认报文为止。发送缓存存放准备发送的数据 已发送但未确认的数据已被确认的数据会被删除发送缓存和发送窗口的后沿是重合的注意应用进程向发送缓存写入数据时不能太快否则会填满发送缓存。接收缓存存放按序到达尚未读取的数据 未按序到达的数据接收窗口是接收缓存的一部分未按序到达的数据先临时存放等缺少的字节到达后再交付累积确认TCP要求接收方必须有累积确认功能接收方可以在合适的时候发送确认也可以捎带确认不能过分推迟发送确认避免不必要的重传全双工通信每一方都有自己的发送窗口和接收窗口。1.2 超时重传时间的选择难点重传时间不能设为固定值网络环境差异大。自适应算法参数含义计算方式RTT往返时间实际测量值RTTs加权平均RTT新RTTs (1-α)×旧RTTs α×新RTTα建议0.125RTTdRTT偏差加权平均新RTTd (1-β)×旧RTTd β×|RTTs - 新RTT|β建议0.25RTO超时重传时间RTO RTTs 4×RTTd重传时的特殊处理报文段每重传一次就把RTO增加一倍避免雪崩不再重传时恢复使用上述公式。1.3 选择确认SACK问题当报文未按序到达到达的字节不连续发送方需要重传确认号之后的所有报文但有些报文实际上已经到了全部重传浪费资源。解决方案SACKSelective ACK在首部选项中添加SACK字段使用两个字节块分别指明一个连续字段的开始位置和长度最多可以指出4个连续字节块的边界现状SACK应用不多了解即可。二TCP的流量控制2.1 利用滑动窗口实现流量控制目的让发送方的发送速率不要太快让接收方来得及接收。实现方式接收方把接收窗口大小放到报文的窗口字段中发送方的发送窗口不能超过这个数值死锁问题场景问题接收窗口减到0发送方停止发送接收窗口恢复但通知报文丢失双方互相等待 →死锁解决方案持续计时器收到零窗口通知后启动持续计时器计时器到期后发送零窗口探测报文段对方在确认报文中给出当前窗口值2.2 TCP的传输效率Nagle算法广泛使用规则说明1先发送到达缓存的第一个字节2收到确认后再发送缓存中剩余数据3当缓存数据达到窗口一半或MSS时立即发送目的避免发送方发送很小的报文段减少网络开销。三TCP的拥塞控制3.1 拥塞控制的一般原理拥塞对网络中某一资源的需求 该资源的可用部分。拥塞的恶性循环网络拥塞 → 报文延迟/丢失 → 超时重传 → 更多分组进入网络 → 拥塞加剧拥塞控制 vs 流量控制对比项拥塞控制流量控制范围全局性涉及所有主机、路由器端到端接收端抑制发送端目标防止网络过载防止接收方来不及接收判断拥塞的依据出现超时。3.2 TCP的拥塞控制方法四种算法慢开始、拥塞避免、快重传、快恢复核心机制发送方维持拥塞窗口cwnd发送窗口 min(cwnd, rwnd)控制原则网络状态操作没有拥塞增大cwnd出现拥塞减小cwnd3.3 四种算法详解慢开始初始cwnd很小≤2-4个MSS每收到一个确认cwnd加倍指数增长每经过一个传输轮次cwnd翻倍拥塞避免cwnd缓慢增大线性增长而非指数当cwnd 阈值时使用拥塞避免当cwnd 阈值时使用慢开始拥塞发生时阈值 cwnd/2cwwd 1重新慢开始快重传要求接收方收到报文段后立即发送确认不延迟工作过程收到失序报文 → 立即重复确认确认号不变发送方连续收到3个重复确认→ 立即重传不等超时目的避免超时防止误判为网络拥塞。快恢复情况阈值操作cwnd操作一般超时减半置为1慢开始快重传3个重复确认减半置为减半后的阈值快恢复拥塞控制流程图3.4 主动队列管理AQM位置网络层路由器传统方式队列满后新到达的分组直接丢弃尾部丢弃AQM方式队列长度还未满时就丢弃后面的分组目的减少网络拥塞的发生。具体丢弃策略尚未标准化。四TCP的运输连接管理4.1 TCP的连接建立三次握手三报文握手流程状态说明状态含义SYN-SENT同步已发送SYN-RCVD同步已收到ESTABLISHED已连接重要规定SYN1的报文段不能携带数据但消耗一个序号ACK1的报文段如果不携带数据不消耗序号第二个报文SYNACK可以拆成两个报文四报文握手为什么需要三次握手解决已失效的连接请求报文突然又到达服务器的问题防止服务器白白等待建立错误连接。4.2 TCP的连接释放四次挥手四次挥手流程状态详解状态所在方含义FIN-WAIT-1客户端发送FIN后CLOSE-WAIT服务器收到FIN等待关闭FIN-WAIT-2客户端收到ACK等待服务器FINLAST-ACK服务器发送FIN等待最后ACKTIME-WAIT客户端发送最后ACK等待2MSLCLOSED双方连接完全关闭重要规定FIN报文即使不携带数据也要消耗一个序号服务器收到FIN后如果还有数据要发送可以继续发送TIME-WAIT状态的意义等待2MSL作用说明1保证最后的ACK能到达服务器如果丢失服务器会重传FIN2防止本连接产生的已失效报文遗留到下一个连接中MSL最长报文段寿命RFC建议2分钟实际≤2分钟2MSL通常≤4分钟保活计时器参数值计时时长2小时探测间隔75秒最大探测次数10次如果连续10次探测无响应服务器认为客户端故障关闭连接。4.3 TCP的有限状态机虚线表示服务器进程的状态变迁实线表示客户进程的状态变迁。关键状态转换CLOSED → LISTEN服务器被动打开LISTEN → SYN-RCVD收到SYNSYN-SENT → ESTABLISHED收到SYNACKESTABLISHED → FIN-WAIT-1主动关闭ESTABLISHED → CLOSE-WAIT被动关闭五思考1. 滑动窗口 ≈ 流水线生产不用等上一个产品完成再开始下一个连续生产每完成一个就往后推一步。这是提高效率的通用思想。2. 拥塞控制 ≈ 高速公路的流量管控车少时提速慢开始→拥塞避免车多时限流阈值减半严重拥堵时封路重开cwnd1。3. 三次握手 ≈ 打电话的“确认机制”“喂能听到吗”“能听到你能听到我吗”“能听到开始说。”——确保双向通信正常。4. 四次挥手 ≈ 分手的“双方确认”“我要挂了。”“好的你稍等我还有点事要说。”“我说完了挂了吧。”“好的拜拜。”——确保双方都说完再断开。六今日小结今天学习了TCP最核心的内容主题核心内容可靠传输滑动窗口、超时重传、SACK流量控制接收窗口、持续计时器、Nagle算法拥塞控制慢开始、拥塞避免、快重传、快恢复连接管理三次握手、四次挥手、TIME-WAIT注以上内容参考计算机网络第8版谢希仁 编著。其中有一些个人理解仅供参考。如有错误希望各位大佬指正感谢七明日计划应用层上

相关文章:

考研复习Day 9 | 计网:运输层(下)

一:TCP可靠传输的实现 1.1 以字节为单位的滑动窗口 核心概念:滑动窗口是以字节为单位的,每个字节都有序号。 发送窗口的结构: 区域说明发送窗口后沿之前已发送且已收到确认发送窗口内允许发送的序号发送窗口前沿之后不允许发送 …...

IoTWay:面向嵌入式设备的轻量级代理通信Arduino库

1. 项目概述IoTWay 是一个面向嵌入式设备的轻量级 Arduino 库,专为在资源受限的微控制器(如 ESP32、ESP8266、Arduino Nano RP2040 Connect、STM32F4 Discovery 等)上实现安全、可靠、低开销的物联网通信而设计。其核心定位并非直接对接云平台…...

塞尔达传说旷野之息存档编辑器:终极免费修改工具使用指南

塞尔达传说旷野之息存档编辑器:终极免费修改工具使用指南 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI BOTW-Save-Editor-GUI是一款专为《塞尔达传说…...

等保.三级要求下Redis 安全测评应该怎么做?低

在之前的文章中,我们花了大量的篇幅,从记录后端pod真实ip开始说起,然后引入envoy,再解决了各种各样的需求:配置自动重载、流量劫持、sidecar自动注入,到envoy的各种能力:熔断、流控、分流、透明…...

SWSPI软件SPI协议栈原理与嵌入式工程实践

1. SWSPI 软件模拟 SPI 协议栈深度解析与工程实践指南1.1 技术定位与工程必要性SWSPI(Software SPI)并非一个具体某家厂商发布的标准库,而是一类在嵌入式系统中广泛存在的纯软件实现的 SPI 主机协议栈。其核心价值在于:当硬件 SPI…...

mysql如何在指定位置添加新列_After关键字用法实操

MySQL 8.0.19 稳定支持 ALTER TABLE ... ADD COLUMN ... AFTER,仅适用于 ADD COLUMN,AFTER 后必须为已存在列名,不适用于 MODIFY/CHANGE COLUMN;5.7 及早期 8.0 版本存在兼容性问题。ALTER TABLE … ADD COLUMN … AFTER 语法是否…...

嵌入式GPIO镜像与锁存:亚微秒级确定性I/O控制库

1. 项目概述hardwareIO是一个面向嵌入式底层开发的轻量级硬件I/O抽象与控制库,其设计目标并非提供通用外设驱动(如UART、SPI协议栈),而是聚焦于物理层信号的确定性操控与状态同步——即对GPIO引脚进行高精度镜像(mirro…...

如何免费提升Windows性能51%?Win11Debloat终极系统优化指南

如何免费提升Windows性能51%?Win11Debloat终极系统优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...

MIMO-UNet:重新思考单图像去模糊中的多尺度融合策略

1. 为什么我们需要重新思考图像去模糊? 每次看到手机里拍糊的照片,我都忍不住想:要是能一键修复该多好。这就是图像去模糊技术要解决的问题。传统方法就像用PS手动修复,费时费力效果还一般。后来深度学习来了,特别是那…...

差分进化算法调参实战:Mutation Factor和Crossover Rate怎么设?附Python代码与可视化分析

差分进化算法调参实战:Mutation Factor和Crossover Rate怎么设?附Python代码与可视化分析 差分进化算法(Differential Evolution, DE)作为一种高效的全局优化算法,在机器学习超参数调优、工程优化等领域展现出强大的性…...

嵌入式通用传感器驱动框架:协议解耦与数据归一化设计

1. Energesis_GenericSensor 库概述Energesis_GenericSensor 是一个面向嵌入式系统的通用传感器驱动抽象框架,其核心目标并非实现具体硬件的寄存器操作,而是构建一套可互换、可复用、可验证的软件接口层。在工业现场、IoT终端与消费类电子产品的生命周期…...

SSD1306/SSD1315 OLED滚动显示:硬件指令与软件算法的实战抉择

1. 硬件滚动与软件滚动的本质区别 第一次接触OLED滚动显示功能时,我也被硬件和软件两种方案搞得一头雾水。后来在几个实际项目中反复折腾才发现,这两种方案最根本的区别在于谁来承担计算负担。硬件滚动是把计算压力转嫁给驱动芯片,软件滚动则…...

KIM库解析:Arduino上实现6502总线时序与复古计算仿真

1. KIM库:面向KIM1 Shield v2的Arduino底层驱动框架解析1.1 历史背景与硬件定位KIM1 Shield v2 是一款已停产的Arduino扩展板,专为复刻与教学用途设计,其核心目标是模拟1975年MOS Technology推出的KIM-1单板计算机(Keyboard Input…...

ST-LINK Reset and Run失效?教你3步搞定STM32复位问题

ST-LINK Reset and Run失效?3步精准定位STM32复位异常 最近在调试STM32项目时,遇到一个令人抓狂的问题——明明在Keil中勾选了Reset and Run选项,程序烧录后芯片却像睡着了一样毫无反应。这种看似简单的复位问题,往往藏着开发环境…...

告别数据丢包!用Qt实现高可靠串口数据采集的3个关键策略(附线程安全队列代码)

工业级串口数据采集:Qt高可靠通信架构设计与实战 在工业自动化与物联网设备监控领域,数据采集的可靠性直接关系到系统决策的准确性。我曾参与过一个风电监测项目,现场振动传感器通过RS485串口每秒上传2000个采样点,但初期版本的数…...

MPL3115A2气压高度传感器嵌入式驱动开发与FreeRTOS集成

1. MPL3115A2气压高度传感器技术解析与嵌入式驱动开发实践1.1 器件定位与工程价值MPL3115A2是NXP(原Freescale)推出的高精度数字气压/高度/温度传感器,采用IC接口,工作电压范围为1.95V–3.6V,典型功耗仅7μA&#xff0…...

【架构实战】SQL调优实战:从执行计划到索引优化

一、为什么需要SQL调优 在应用开发中,SQL性能直接影响系统响应速度: 慢SQL的影响: 页面加载缓慢,用户体验差数据库CPU使用率飙升连接池耗尽,应用不可用甚至引发连锁故障 调优的目标: 查询时间从秒级降到毫秒…...

OFA-Image-Caption模型微调实战:使用自定义数据集提升垂直领域描述精度

OFA-Image-Caption模型微调实战:使用自定义数据集提升垂直领域描述精度 你是不是也遇到过这种情况?一个通用的图片描述模型,用来描述日常照片效果还不错,但一旦面对专业领域的图片,比如医学影像、工业设计图或者艺术品…...

DeOldify服务监控方案:Prometheus+Grafana实时跟踪GPU利用率与QPS

DeOldify服务监控方案:PrometheusGrafana实时跟踪GPU利用率与QPS 1. 监控方案概述 在实际的AI服务部署中,仅仅能够运行服务是不够的。我们需要实时了解服务的运行状态、资源使用情况以及性能指标。对于DeOldify这样的深度学习图像上色服务,…...

Python3.9镜像新手入门:从零开始配置开发环境

Python3.9镜像新手入门:从零开始配置开发环境 1. 为什么选择Python3.9镜像 Python作为当今最流行的编程语言之一,其3.9版本在性能优化和语法特性上都有显著提升。使用预配置的Python3.9镜像可以让你: 快速开始:省去繁琐的环境配…...

LVGL Linux模拟器实战:从GUI-Guider设计到EVDEV按键事件处理的完整链路

LVGL Linux模拟器实战:从GUI-Guider设计到EVDEV按键事件处理的完整链路 在嵌入式GUI开发领域,LVGL凭借其轻量级、高性能的特性已成为众多开发者的首选。本文将带您深入探索一个常被忽视但至关重要的技术环节:如何让GUI-Guider设计的界面在Lin…...

STM32F429开发实战:手把手教你开启FPU并验证性能提升(含Lazy Stacking详解)

STM32F429开发实战:FPU性能优化与Lazy Stacking深度解析 在嵌入式系统开发中,浮点运算性能往往是制约算法实时性的关键瓶颈。STM32F429作为Cortex-M4内核的代表性产品,其内置的浮点运算单元(FPU)能显著提升计算效率——但前提是开发者必须正确…...

【向量检索实战】FAISS + BGE-M3:构建高效RAG系统的核心引擎

1. 为什么需要FAISSBGE-M3组合? 在构建RAG系统时,最头疼的问题就是如何快速从海量文档中找到最相关的信息。想象一下,你正在整理一个超大的衣柜,里面有成千上万件衣服。当你想找"适合夏天穿的蓝色衬衫"时,如…...

2026届毕业生推荐的六大AI科研平台推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术于学术写作领域的运用愈发广泛,其关键价值展现于文献检索、数据整理…...

F28335项目功耗优化实战:如何通过精细管理外设时钟(PCLKCR)来省电

F28335项目功耗优化实战:精细管理外设时钟(PCLKCR)的省电艺术 在电池供电的电机控制或物联网传感节点开发中,系统功耗直接决定了产品的续航能力。TMS320F28335作为一款高性能DSP控制器,其动态功耗往往成为系统优化的重…...

Qwen3-ForcedAligner-0.6B在Dify平台上的无代码部署方案

Qwen3-ForcedAligner-0.6B在Dify平台上的无代码部署方案 1. 引言 语音和文本的对齐技术在实际应用中越来越重要,无论是制作字幕、语音分析还是内容创作,都需要精确的时间戳对齐。传统方法往往需要复杂的代码编写和配置,让很多非技术背景的用…...

SITS2026图谱深度解读:从LlamaFactory到vLLM再到Prometheus-Metrics,谁才是真正可规模化的工程底座?

第一章:SITS2026发布:大模型工程化工具链图谱 2026奇点智能技术大会(https://ml-summit.org) SITS2026(Scalable Intelligent Toolchain Summit 2026)正式发布面向生产级大模型开发的全栈工程化工具链图谱,聚焦模型训…...

YOLOFuse功能体验:支持多种融合策略,实测中期融合性价比最高

YOLOFuse功能体验:支持多种融合策略,实测中期融合性价比最高 1. 多模态目标检测的挑战与机遇 在目标检测领域,单一传感器已经难以满足全天候、复杂环境下的应用需求。传统RGB摄像头在低光照、烟雾、雨雪等恶劣条件下性能急剧下降&#xff0…...

【大模型上线前必过隐私审计关】:7类高危数据场景识别表+3套自动化检测脚本(附开源工具链)

第一章:大模型工程化中的数据隐私保护 2026奇点智能技术大会(https://ml-summit.org) 在大模型工程化落地过程中,原始训练数据、微调语料及推理输入往往蕴含敏感个人信息、企业专有知识或受监管的行业数据。若缺乏系统性隐私防护机制,模型可…...

嵌入式传感器抽象框架:ArduSensorPlatformCoreBase核心解析

1. ArduSensorPlatformCoreBase 框架核心组件深度解析ArduSensorPlatformCoreBase 是 ArdusensorPlatform 框架的底层基石模块,其定位并非通用传感器驱动集合,而是为构建可扩展、可复用、跨平台的嵌入式传感系统提供标准化抽象层与基础设施支撑。该模块不…...