sctp如何流控制

联启 网络工具 14

本文目录导读:

sctp如何流控制-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 基本流控机制:接收窗口(rwnd)
  2. 与TCP不同的流控细节
  3. 流控与拥塞控制的配合
  4. 流控相关的特殊场景处理
  5. 流控制的关键参数

SCTP(流控制传输协议)的流控制机制与TCP类似,但由于其多流(Multi-Streaming)特性,在细节上有所不同,SCTP的流控制主要依赖接收端窗口发送端窗口的结合,同时引入了慢启动拥塞避免算法,以下是SCTP流控制的核心机制:


基本流控机制:接收窗口(rwnd)

与TCP一样,SCTP使用接收窗口(Receiver Window, rwnd) 来控制发送端的数据量,防止接收端缓冲区溢出。

  • 工作方式:接收端在SCTP的SACK块中通告自己的 a_rwnd(Advertised Receiver Window),告诉发送端自己还有多少可用缓冲区。
  • 发送限制:发送端未确认的数据总量不能超过接收端的 rwnd
  • 动态调整:当接收端缓冲区变满,rwnd减小;当数据被应用层读取,rwnd增大。

注意:由于SCTP支持多流,但 rwnd关联级别的(per association),不是每个流独立的,一个关联内的所有流共享同一个接收窗口。


与TCP不同的流控细节

(1)消息边界与部分确认

  • SCTP是面向消息的(对应TCP的字节流),接收端必须完全接收一个完整的消息(chunk)后才能递交给应用层。
  • 即使接收窗口非零,但如果下一条消息的前几个字节(chunk)还没到,接收端可能无法处理后续数据,导致接收窗口阻塞

(2)多流不影响流控窗口

  • SCTP的多流(stream)可以独立保证消息的顺序交付(比如Stream 1和Stream 2的消息可以乱序到达,但各自有序)。
  • 流控制窗口是关联级别共享的,一个流发送速度太快,会占用整个关联的窗口,影响其他流。

(3)SACK与流控

  • SCTP的SACK(Selective Acknowledgment)不仅可以确认已收到的chunk,还能报告接收端当前的可用窗口大小(a_rwnd)。
  • 发送端收到SACK后,会更新自己的 cur_rwnd(当前接收窗口),并据此调整发送速率。

流控与拥塞控制的配合

SCTP将流控(防止接收端过载)与拥塞控制(防止网络过载)分开处理:

  • 流控窗口(rwnd):由接收端控制,通过SACK通告。
  • 拥塞窗口(cwnd):由发送端根据网络拥塞情况动态调整(使用类似TCP的慢启动、拥塞避免、快速重传)。
  • 实际发送窗口 = min(rwnd, cwnd)

流控相关的特殊场景处理

(1)接收窗口为0时的探测

当接收端通告 rwnd=0时,发送端会停止发送数据,但会启动零窗口探测(Zero Window Probe,ZWP):

  • 发送端每隔RTO(Retransmission Timeout)发送一个小的探测chunk。
  • 接收端收到后,回复SACK并通告当前 rwnd(如果已有可用空间)。

(2)接收窗口的更新

  • 当接收端应用层读取数据后,接收端会立即发送一个SACK给发送端,告知新的更大的 rwnd(称为窗口更新)。
  • 发送端收到窗口更新后,可以恢复发送。

(3)多流下的窗口饥饿问题

  • 由于窗口是关联共享的,如果某个流发送了大量低优先级数据,可能占用所有窗口,导致其他高优先级流无法发送。
  • 解决方案:应用层可以自行对多流进行优先级调度,或SCTP选择使用部分可靠SCTP(PR-SCTP)来丢弃超时未发送的消息。

流控制的关键参数

参数 描述 影响
a_rwnd 接收端在SACK中通告的可用窗口大小 限制发送端未确认数据量
cur_rwnd 发送端维护的当前接收窗口估计值 决定实际发送数据量
cwnd 发送端拥塞窗口 与网络拥塞相关,叠加于流控
flight_size 已发送但未确认的数据量 发送端必须保证 flight_size ≤ cur_rwnd

SCTP的流控制是基于接收端窗口(rwnd)+ 拥塞窗口(cwnd)的联合控制,

  • rwnd 保护接收端缓冲区不溢出(端到端流控)。
  • cwnd 保护网络不会过载(拥塞控制)。
  • 多流 不影响窗口计算(窗口是关联级别共享),但可能导致低优先级流抢占资源。

实际应用中,SCTP的流控通常比TCP更灵活,因为SCTP支持部分确认(SACK)、消息边界保护以及多流并行处理,但开发者需要理解其共享窗口特性对多流可能造成的干扰。

标签: SCTP 流控制

抱歉,评论功能暂时关闭!