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

计算机网络笔记(三十二)——5.4可靠传输的工作原理

5.4.1停止等待协议

停止等待协议是计算机网络中用于实现可靠数据传输的基本协议,适用于具有比特差错或丢包的信道环境下。

一、协议核心原理

  1. 可靠传输三要素

    • 基于确认的重传(接收方显式反馈)
    • 分组序列号(识别重复分组)
    • 超时重传定时器(处理确认丢失)
  2. 基本工作流程

    • 每发送一个分组后停止等待确认
    • 收到正确ACK后才发送下一分组
    • 若超时未收到ACK则重传当前分组

在这里插入图片描述

二、关键机制设计

  1. 数据包编号系统

    • 采用1位序列号(0/1交替)
    • 解决重复分组识别问题
    • 示例:编号0的ACK确认表示期待收到编号1的下一个分组
  2. 超时重传机制

    • 时间需大于RTT(往返传播时间)
    • 典型实现:每次超时后加倍等待时间(二进制指数退避)
  3. 错误处理方案

    • ACK校验失败:静默丢弃冗余ACK
    • 分组损坏检测:通过校验和确认
    • 数据传输中断:发送NAK加速恢复(可选)

三、协议状态机模型

在这里插入图片描述

四、性能特征分析

  1. 信道利用率公式

    U = (L/R) / (RTT + L/R)
    

    L: 分组长度,R: 传输速率,RTT: 往返时延

  2. 典型场景效率对比

网络环境带宽RTT利用率
局域网1Gbps1ms>90%
广域网100Mbps100ms<10%
  1. 优势与局限

    • 优点:实现简单、资源占用低
    • 缺点:信道利用率低、不适用高速网络
    • 演进方向:发展为滑动窗口协议提升效率

五、实际应用场景

  1. TFTP协议(简单文件传输)
  2. 无线传感器网络控制报文
  3. 物联网设备状态上报
  4. 卫星通信链路控制

六、典型问题解决

重复ACK处理
当收到多个相同ACK时:

  1. 检查是否为预期序列号的ACK
  2. 若已处理过相同ACK则直接丢弃
  3. 保持当前状态不进行任何操作

示例报文交互

Sender               Receiver
|----Packet0------>|
|<-ACK0------------|
|----Packet1------>X(丢失)
|----Packet1(timeout)->|
|<-ACK1------------|
|----Packet0------>|
|<-ACK0------------|

该协议通过严格的时序控制和冗余防护机制,在不可靠信道上构建了可靠的传输通道。

5.4.2连续ARQ协议

一、协议核心机制

  1. 滑动窗口机制
    发送方维护一个发送窗口(发送缓冲区),允许在未收到确认前连续发送多个分组
    窗口大小_WS_表示最大允许发送的未确认分组数量

  2. 累积确认机制
    接收方采用累积确认方式,对按序到达的最后一个分组发送ACK
    例如:收到分组1、2、3后返回ACK3,表示所有≤3的分组都已正确接收

  3. 超时重传机制
    每个发送的分组都设置超时计时器,超时后重传整个窗口分组(Go-Back-N原理)
    窗口中的某个分组n未被确认时,后续所有分组n+1…都会被阻塞

二、工作流程(基于回退N步)

在这里插入图片描述

三、协议要素对比表

特性停等ARQ连续ARQ
窗口大小1WS ≥1
信道利用率
确认方式单个确认累积确认
错误处理单独重传出错分组重传出错分组及其后续
缓冲区要求仅需1分组缓冲区需要WS大小缓冲区
典型应用场景低带宽网络高带宽延迟积网络

四、关键算法实现

发送方逻辑

  1. 从上层接收数据组帧,存入发送窗口
  2. 当窗口未满时连续发送分组
  3. 每次收到ACKn后,窗口移动至n+1位置
  4. 超时事件触发全部未确认分组重传

接收方逻辑

  1. 只接收当前期望序号的正确分组(假设期望接收rn)
  2. 对rn分组进行校验:
    • 通过:交付上层,返回ACK(rn)
    • 失败/过时:丢弃并返回最近正确分组的ACK

五、性能优化技巧

  1. 窗口尺寸限制
    最大窗口尺寸≤2ⁿ-1(n为序号位数),避免序号混淆
    例如:3位序号最多允许7个未确认分组

  2. 冗余ACK处理
    收到3次重复ACK立即触发快速重传(改进型ARQ)

  3. 动态窗口调整
    根据网络状况动态调整窗口大小(TCP拥塞控制基础)

典型故障处理流程
当分组2丢失时:

  1. 接收方缓存后续分组3-4
  2. 持续返回ACK1(最后正确接收的分组号)
  3. 发送方超时后重传分组2-4
  4. 接收方收到分组2后,按序交付2-4并返回ACK4
http://www.xdnf.cn/news/13173.html

相关文章:

  • 【PHP】BC Math 函数参考表
  • 反射获取方法和属性
  • 2-2 Linux-命令入门(2025.6.9学习篇)
  • uni-app页面发布测试环境出现连接服务器超时,点击屏幕重试解决方案
  • Flv与Rtmp
  • Jetpack Compose 与 ViewModel 的完美结合
  • docker开启2375端口-docker开启api接口 ,实现远程访问,dockerapi官方文档
  • NIFI的处理器:SplitJson 2.4.0
  • 适配java8版本的langchian4j实战
  • 【黑客与安全】Linux的常用命令之系统架构信息获取系列命令
  • 深入解析C#表达式求值:优先级、结合性与括号的魔法
  • Tauri2学习笔记
  • 带传动---
  • git: early EOF
  • 自我堕落公式证明法:你为谁而活
  • 火山 RTC 引擎11----集成创建房间、加入房间、销毁引擎 到互动项目中
  • [Java 基础]Object 类
  • 【题解-洛谷】B4292 [蓝桥杯青少年组省赛 2022] 路线
  • R语言速释制剂QBD解决方案之二
  • 网站指纹识别
  • 博图 SCL 编程技巧:灵活实现上升沿与下降沿检测案例分享(下)
  • 交通自动气象站的作用
  • [Linux] 命令行管理文件
  • 国产三维CAD皇冠CAD(CrownCAD)建模教程:压力变送器
  • 如何开发ONLYOFFICE协作空间插件:完整教程
  • AI高考志愿助手应用架构设计并上线实施运行
  • 使用python进行图像处理—图像变换(6)
  • 前端开发面试题总结-vue2框架篇(一)
  • MES系统如何解决电机制造业自动化生产管理?
  • 回溯算法学习