计算机网络--传输层(2)

传输层核心机制深度解析

一、可靠传输实现机制

1. 校验和机制

技术原理:

  • 使用16位二进制反码求和算法,计算范围包括TCP伪首部(12字节)、TCP首部(20字节)和数据部分
  • 接收端重新计算校验和,若与首部字段不符则丢弃该报文段,发送端超时未收到确认将触发重传

设计特点:

  • 双重错误检测:既检测数据传输错误,也验证IP地址和端口号的正确性
  • 伪首部包含源/目的IP地址,确保数据正确路由到目标应用进程

2. 序号机制

实现规范:

  • 初始序号(ISN)生成:采用基于时钟的随机算法(RFC 6528),防止预测攻击
  • 序号空间管理:32位循环序号,每4GB数据循环一次,通过时间戳选项(RFC 7323)解决序号回绕问题

应用场景:

发送序列示例:
[SEQ=1000, DATA=300B] → [SEQ=1300, DATA=200B] → [SEQ=1500, DATA=400B]
接收方按序号重组,检测到SEQ=1700的报文时会发现中间缺失1500-1699段

3. 确认机制

确认策略演进:

  • 普通确认:逐个确认接收报文段
  • 累积确认(RFC 1122):ACK=1500表示已正确接收0-1499所有字节
  • 选择性确认(SACK,RFC 2018):通过TCP选项字段通告不连续接收的数据块

确认超时控制:

  • RTT动态计算:采用指数加权移动平均算法
    RTO = α×RTT_avg + (1-α)×RTT_dev
  • Karn算法:重传报文不更新RTT估计,避免采样偏差

4. 重传机制

重传触发条件比较表:

触发类型检测依据响应速度网络状况判断
超时重传重传计时器到期慢(≥1s)严重拥塞
快速重传收到3个重复ACK快(≈RTT)轻微丢包
超时重传补偿指数退避(RTO×2)自适应持续拥塞

重传策略优化:

  • 冗余数据检测:接收方通过序列号过滤重复报文
  • 乱序处理:TSOPT时间戳选项辅助判断报文有效性

二、流量控制机制

1. 滑动窗口体系结构

三窗口协同工作模型:

+---------------------+---------------------+---------------------+
| 已确认数据 (Closed) | 发送中数据 (Sent)   | 可发送窗口 (Allowed) | 
+---------------------+---------------------+---------------------+
▲                         ▲                         ▲
└── 接收窗口(rwnd)边界     └── 拥塞窗口(cwnd)边界    └── 发送窗口=min(rwnd,cwnd)

窗口动态调整示例:

初始状态:rwnd=4000, cwnd=3000 → 发送窗口=3000
接收方处理2000字节后:rwnd=6000
网络拥塞导致cwnd=2000 → 新发送窗口=2000

2. 零窗口处理

特殊场景应对策略:

  • 零窗口探测(ZWP):发送1字节探测报文,触发接收方更新窗口通告
  • 持续计时器:防止窗口更新报文丢失导致死锁
  • 窗口缩放选项(RFC 7323):通过选项字段实现窗口大小扩展(最大1GB)

3. 流量控制与吞吐量关系

性能公式:
最大吞吐量 = min(rwnd, cwnd) / RTT
例如:窗口大小=64KB,RTT=100ms → 吞吐量≈5.2Mbps

三、拥塞控制算法

1. 算法状态机

完整控制流程:

          (连接建立)↓[慢启动阶段] ↓
(cwnd ≥ ssthresh) → [拥塞避免阶段]↑             ↓└──(丢包事件)←─┐↓     ↓[快速恢复]  [超时处理]↓     ↓(调整ssthresh) (cwnd=1, ssthresh=cwnd/2)

2. 算法参数详解

关键参数计算:

  • 初始ssthresh:通常设置为接收方通告窗口大小
  • cwnd增长规则:
    • 慢启动:每ACK增加1 MSS → 每个RTT增长指数级
    • 拥塞避免:每RTT增加1 MSS → 线性增长
  • AIMD原则:加性增(Additive Increase),乘性减(Multiplicative Decrease)

3. 现代改进算法

增强型算法对比:

算法名称核心改进适用场景
BBR基于带宽时延积建模高带宽长肥管道
CUBIC三次函数增长,公平性优化广域网环境
Vegas前瞻性拥塞检测(RTT变化预测)低延迟网络

四、TCP与UDP协议对比

1. 协议栈位置

体系结构差异:

应用层协议示例:
HTTP/FTP(SMTP) → TCP → IP
DNS/RTP(QUIC)  → UDP → IP

2. 特性对比深化

对比维度TCP实现方案UDP处理方式
连接维护状态机管理(11种状态转换)无状态
数据传输单元字节流(无边界)数据报(保留边界)
错误处理自动重传、数据校验仅校验和检查,无纠错
资源消耗需要维护发送/接收缓冲区仅需单个数据报缓存
多路复用四元组标识(源IP+Port, 目的IP+Port)相同机制,但无连接状态

3. 混合使用场景

创新协议设计:

  • QUIC协议:在UDP上实现可靠传输,融合TCP优点和UDP高效性
  • HTTP/3:基于QUIC,解决队头阻塞问题,提升Web性能

五、关键机制图解

1. 发送窗口动态调整

窗口滑动过程示例:
初始窗口范围:[1000, 5000)
收到ACK=3000后,窗口滑动至:[3000, 7000)
当rwnd扩大至8000时,窗口变为:[3000, 8000)

2. 拥塞控制状态转换

完整状态迁移路径:
慢启动 →(cwnd≥ssthresh)→ 拥塞避免
慢启动 →(3 DupACK)→ 快恢复 → 拥塞避免
慢启动 →(超时)→ 重置cwnd=1,进入慢启动
拥塞避免 →(超时)→ 重置cwnd=1,ssthresh=cwnd/2

六、优化技术演进

1. 新型确认机制

  • 延迟ACK(RFC 1122):最多等待500ms或收到两个报文后发送确认
  • SACK块示例:
    TCP Header Option: 
    Kind=5, Length=10, Left Edge=1000, Right Edge=2000
    表示已成功接收1000-1999字节范围
    

2. 时间戳优化

  • TSOPT字段作用:
    • 精确RTT测量(微秒级精度)
    • PAWS(Protection Against Wrapped Sequences)机制
    • 抗序列号回绕攻击

3. 多路径TCP(MPTCP)

核心特性:

  • 允许同时使用多个网络接口
  • 子流独立拥塞控制
  • 数据序列号全局统一管理
  • 无缝切换网络连接

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

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

相关文章

再探带权并查集

典型例题 Acwing 权值 故名思义,在带权并查集中,我们需要让每个节点携带一个**“权值”**。 那么这个权值应该是什么呢?其实答案就在并查集当中。 由于在并查集当中我们可以在 O ( 1 ) O(1) O(1) 时间内找到一个节点的根节点,那…

Vala编成语言教程-构造函数和析构函数

构造函数 Vala支持两种略有不同的构造方案:我们将重点讨论Java/C#风格的构造方案,另一种是GObject风格的构造方案。 Vala不支持构造函数重载的原因与方法重载不被允许的原因相同,这意味着一个类不能有多个同名构造函数。但这并不构成问题&…

本地部署Stable Diffusion生成爆火的AI图片

直接上代码 Mapping("/send") Post public Object send(Body String promptBody) { JSONObject postSend new JSONObject(); System.out.println(promptBody); JSONObject body JSONObject.parseObject(promptBody); List<S…

python爬虫WASM

WASM 一.WASM简介 1.1 WASM定义 ​ WebAssembly(简称wasm)是一个虚拟指令集体系架构(virtual ISA),整体架构包括核心的ISA定义、二进制编码、程序语义的定义与执行,以及面向不同的嵌入环境(如Web)的应用编程接口(WebAssembly API)。是一种运行在现代网络浏览器中的…

Docker镜像迁移方案

Docker镜像迁移方案 文章目录 Docker镜像迁移方案一&#xff1a;背景二&#xff1a;操作方式三&#xff1a;异常原因参考&#xff1a; 一&#xff1a;背景 比如机器上已经有先有的容器&#xff0c;但是docker pull的时候是失败的二&#xff1a;操作方式 1、停止正在运行的容器…

关于跨域问题(本地前端访问服务器端接口跨域出错)

问题来源&#xff1a; 当服务器封装了接口但是本地电脑端前端访问出现跨域问题。 解决方案&#xff1b; 1、使用ipconfig 查看本地电脑的ip地址 ipconfig 2、在后端接口处配置如下代码 allow_origins["http://本地ip地址:3001", # 局域网内其他设备访问的本地…

边缘计算 vs. 云计算,谁才是工业物联网的未来?

前言 在物联网&#xff08;IoT&#xff09;飞速发展的今天&#xff0c;边缘计算正在彻底改变数据的处理、存储和分析方式。传统的IoT设备数据通常需要发送到云端进行处理&#xff0c;但随着设备数量的激增&#xff0c;这种模式在延迟、带宽和安全性方面暴露出诸多局限。边缘计…

dell 台式机 电脑 纽扣电池 如何取下?

dell 台式机 电脑 纽扣电池 如何取下&#xff1f; 戴尔-optiplex-3060-塔式机-服务手册

NFC 智能门锁全栈解决方案:移动端、服务器、Web 管理平台

目录 一、系统整体架构 二、移动端 APP 开发 2.1 开发环境与基础准备 2.2 主要功能模块 2.3 示例代码&#xff08;Android/Kotlin 简化示例&#xff09; 三、后台服务开发 3.1 环境准备 3.2 主要功能 3.3 示例代码&#xff08;Node.js Express 简化示例&#xff09; …

DDR4、DDR5、固态硬盘(SSD)和机械硬盘(HDD)在连续读/写、随机读/写性能的对比分析

以下是关于DDR4、DDR5、固态硬盘&#xff08;SSD&#xff09;和机械硬盘&#xff08;HDD&#xff09;在连续读/写、随机读/写性能的对比分析&#xff0c;结合技术特性与应用场景的总结&#xff1a; 一、性能对比表格 存储类型连续读&#xff08;MB/s&#xff09;连续写&#x…

【AI】MAC版本本地Stable Diffusion web ui安装

文章目录 前言环境依赖homebrewpython3下载stable-diffusion-webui webui模型准备模型网站 中文页面设置提示词转汉语转英文controlnet安装controlnet模型下载 结尾 前言 目前&#xff0c;市面上已经出现了很多用Ai 绘图制作的作品&#xff0c;用于自媒体或者商业等。例如表情…

Linux 云服务器开放端口

首先找到你买服务器的官网&#xff0c;我这里是阿里云 点击这里的控制台 这里先点手动添加&#xff0c;再看自己是UDP还是TCP协议&#xff0c;找到对应的协议&#xff0c;目的就填你想开放的端口&#xff0c;源填所有IP/4 0.0.0.0 添加备注点击保存就开放好了。

[unity 点击事件] 区域响应点击事件,排除子节点区域,Raycast Target 应用

当我打开一个二级弹窗后&#xff0c;希望可以通过点击弹窗以外的区域来关闭该弹窗。一开始我是在弹窗主节点上挂载了一个 button 组件&#xff0c;该 button 注册的点击事件中关闭该弹窗。在子节点&#xff08;一个背景图&#xff09;的image组件上启用 Raycast Target 选项&am…

表的约束及代码练习

一.表的约束 查看表&#xff1a;mysql> select * from t_hero; 1.设置t_hero的主键为t_id alter table t_hero add primary key(t_id); 2.设置t_hero t_id属性非空 alter table t_hero modify t_id int not null;3.设置name属性为非空非重复 alter table t_hero modify…

Linux笔记---动静态库(使用篇)

目录 1. 库的概念 2. 静态库&#xff08;Static Libraries&#xff09; 2.1 静态库的制作 2.2 静态库的使用 2.2.1 显式指定库文件及头文件路径 2.2.2 将库文件安装到系统目录 2.2.3 将头文件安装到系统目录 3. 动态库 3.1 动态库的制作 3.2 动态库的使用 3.2.1 显式…

Java并发编程2(锁-Sychronized)

目录 认识Java对象头 sychronized锁原理 基本概念 工作原理 1.作用在方法上 2.作用在代码块上 工作机制 JVM优化锁 Monitor锁 wait/notify park/unpark 线程状态转换案例 死锁 概念 死锁发生的必要条件 哲学家问题 活锁 饥饿 概念 饥饿的原因 Reentrant…

现阶段高校的人工智能方案培训如何?

人工智能在未来肯定是核心发展力&#xff0c;核心竞争力&#xff0c;也是国家重点扶持的对象&#xff0c;但我还是不看好高校的人工智能方向&#xff0c;只是怕有些同学对市场前景盲目乐观&#xff0c;就轻易上车了。 你要是985以上的高校&#xff0c;可以考虑选择人工智能&…

JavaScript中的继承有哪些方式?各有什么优缺点

在 JavaScript 中&#xff0c;继承主要通过原型链实现&#xff0c;常见的继承方式有以下几种&#xff0c;每种方式都有其优缺点&#xff1a; 1. 原型链继承 1. 实现方式&#xff1a;将子类的原型对象指向父类的实例。 function Parent() {} function Child() {} Child.protot…

深入理解指针(3)(C语言版)

文章目录 前言 一、字符指针变量二、数组指针变量2.1 数组指针变量是什么2.2 数组指针变量怎么初始化2.2.1 静态初始化2.2.2 动态初始化 三、二维数组传参的本质四、函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 typedef关键字4.4拓展 五、函数指针数组六、转…

Linux之 权限提升(Linux Privilege Escalation)

Linux 之权限提升 系统信息 1.获取操作系统信息 2.检查PATH&#xff0c;是否有任何可写的文件夹&#xff1f; 3.检查环境变量&#xff0c;有任何敏感细节吗&#xff1f; 4.使用脚本&#xff08;DirtyCow&#xff1f;&#xff09;搜索内核漏洞 5.检查sudo 版本是否存在漏洞…