本文目录导读:

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)、消息边界保护以及多流并行处理,但开发者需要理解其共享窗口特性对多流可能造成的干扰。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播