15. 建议的SCTP协议参数值 (Suggested SCTP Protocol Parameter Values)
本章总结了SCTP协议中使用的关键参数的建议值。这些值基于经验和测试,旨在为大多数网络环境提供良好的性能。
15.1. RTO参数 (RTO Parameters)
15.1.1. RTO.Initial
建议值:3秒(3000毫秒) 说明:初始重传超时值,在没有RTT测量时使用 用途:关联建立期间的初始INIT重传
15.1.2. RTO.Min
建议值:1秒(1000毫秒) 说明:重传超时的最小值 用途:防止过于激进的重传
15.1.3. RTO.Max
建议值:60秒(60000毫秒) 说明:重传超时的最大值 用途:避免在不良网络条件下无限期等待
15.1.4. RTO.Alpha
建议值:1/8(0.125) 说明:SRTT平滑因子 公式:SRTT = (1 - Alpha) * SRTT + Alpha * RTT'
15.1.5. RTO.Beta
建议值:1/4(0.25) 说明:RTTVAR平滑因子 公式:RTTVAR = (1 - Beta) * RTTVAR + Beta * |SRTT - RTT'|
15.1.6. RTO计算公式
RTO = SRTT + 4 * RTTVAR
RTO = MAX(RTO.Min, MIN(RTO, RTO.Max))
15.2. 最大重传次数 (Maximum Retransmission Limits)
15.2.1. Association.Max.Retrans
建议值:10次 说明:关联级别的最大重传次数 用途:超过此值则认为关联失败
15.2.2. Path.Max.Retrans
建议值:5次 说明:单个路径的最大重传次数 用途:超过此值则标记路径为非活动
15.2.3. Max.Init.Retransmits
建议值:8次 说明:INIT块的最大重传次数 用途:关联初始化失败前的尝试次数
15.3. Cookie参数 (Cookie Parameters)
15.3.1. Valid.Cookie.Life
建议值:60秒 说明:State Cookie的有效生存时间 范围:建议1-60秒之间 用途:防止陈旧Cookie被接受,平衡安全性和重试能力
15.3.2. Cookie Preservative
说明:允许端点请求延长Cookie生存时间 用途:在慢速网络或高延迟场景中使用
15.4. 心跳参数 (Heartbeat Parameters)
15.4.1. Heartbeat.Interval
建议值:30秒(30000毫秒) 说明:向目标地址发送心跳的间隔 范围:可配置,通常10-60秒 用途:监控路径可达性,保持NAT绑定
15.4.2. Heartbeat.Max.Burst
建议值:1次 说明:一次可以发送的心跳数量 用途:避免心跳流量过载
15.5. 延迟确认参数 (Delayed Acknowledgement Parameters)
15.5.1. SACK.Delay
建议值:200毫秒 最大值:500毫秒 说明:延迟发送SACK的时间 用途:允许SACK与数据捆绑,减少控制块开销
15.5.2. SACK.Freq
建议值:每2个数据包发送一次SACK 说明:接收到多少数据包后立即发送SACK(不等待延迟) 用途:平衡及时确认和开销
15.6. 拥塞控制参数 (Congestion Control Parameters)
15.6.1. 初始拥塞窗口 (Initial cwnd)
建议值:min(4 * MTU, max(2 * MTU, 4380字节)) 说明:关联建立时的初始拥塞窗口大小 RFC 3390参考:遵循TCP的初始窗口建议
15.6.2. 初始慢启动阈值 (Initial ssthresh)
建议值:对等方通告的接收器窗口大小(a_rwnd) 说明:初始慢启动阈值 用途:区分慢启动和拥塞避免阶段
15.6.3. Max.Burst
建议值:4个PMTU大小的数据包 说明:一次最多可以突发传输的数据包数量 用途:
- 限制快速重传后的突发
- 限制超时重传后的突发
- 防止突发流量造成拥塞
15.6.4. 最小拥塞窗口 (Minimum cwnd)
建议值:1 * MTU 说明:拥塞窗口的最小值 用途:即使在严重拥塞后也允许至少发送一个完整数据包
15.7. 流和队列参数 (Stream and Queue Parameters)
15.7.1. MIS (Maximum Inbound Streams)
建议值:65535(最大值) 说明:愿意支持的最大入站流数量 实际值:在INIT/INIT ACK中协商 限制:受实现和资源限制
15.7.2. OS (Outbound Streams)
建议值:10(默认)或应用需要的值 说明:请求的出站流数量 实际值:在INIT/INIT ACK中协商 考虑:根据应用需求调整
15.7.3. 重排序队列大小
建议:足够大以处理合理的乱序程度 考虑:网络特性、RTT、带宽
15.8. 缓冲区大小参数 (Buffer Size Parameters)
15.8.1. 接收窗口 (Receive Window)
建议值:至少64KB 最佳值:带宽延迟积(BDP) 计算:BDP = 带宽 × RTT 说明:影响吞吐量和流量控制
15.8.2. 发送缓冲区
建议值:至少与接收窗口相同 考虑:应用发送模式、网络条件
15.9. 路径MTU发现参数 (Path MTU Discovery Parameters)
15.9.1. 初始PMTU
建议值:
- IPv4:576字节(保守)或1500字节(以太网)
- IPv6:1280字节(最小) 说明:初始假设的路径MTU 更新:通过PMTU Discovery动态调整
15.9.2. PMTU探测间隔
建议值:10分钟 说明:定期尝试更大MTU的间隔 用途:检测路径MTU增加
15.10. 超时和定时器参数 (Timeout and Timer Parameters)
15.10.1. T1-init定时器
初始值:RTO.Initial(3秒) 最大值:RTO.Max(60秒) 重传:指数退避
15.10.2. T1-cookie定时器
初始值:RTO.Initial(3秒) 最大值:RTO.Max(60秒) 重传:指数退避
15.10.3. T2-shutdown定时器
初始值:RTO.Initial(3秒) 最大值:RTO.Max(60秒) 重传:指数退避
15.10.4. T3-rtx定时器
值:每个目标地址的RTO 动态调整:基于RTT测量 用途:数据重传
15.11. 其他参数 (Other Parameters)
15.11.1. 部分可靠性参数
PR-SCTP生存时间:应用特定 说明:消息可以在队列中等待的时间 用途:实时应用的消息过期
15.11.2. 分片参数
最大分片大小:PMTU - SCTP头部开销 说明:用户消息分片为DATA块 头部开销:至少16字节(DATA块头部)+ 12字节(SCTP公共头部)
15.12. 参数调优建议 (Parameter Tuning Recommendations)
15.12.1. 高延迟网络
- 增加 RTO.Initial:5-10秒
- 增加 Heartbeat.Interval:60秒
- 增加 接收窗口:基于BDP
- 增加 Max.Burst:6-8个数据包
15.12.2. 低延迟网络
- 减少 SACK.Delay:50-100毫秒
- 减少 Heartbeat.Interval:10-15秒
- 标准 RTO参数
15.12.3. 有损网络
- 增加 Path.Max.Retrans:7-10次
- 增加 Association.Max.Retrans:15次
- 更频繁的心跳:15-20秒
15.12.4. 移动/无线网络
- 增加 RTO.Initial:5秒
- 增加 所有重传限制
- 更频繁的PMTU探测
- 积极的心跳:10-15秒
15.13. 参数兼容性考虑 (Parameter Compatibility Considerations)
15.13.1. 与TCP兼容性
目标:SCTP参数应与TCP在相似网络条件下表现类似 参考:RFC 2581(TCP拥塞控制)
15.13.2. 向后兼容性
原则:新参数不应破坏与旧实现的互操作性 机制:使用可选参数和协商
15.13.3. 互操作性测试
建议:测试不同实现间的参数协商 关注:边界值、极端情况
总结
关键要点:
- 这些是建议值,不是强制要求
- 实现可以根据具体环境调整
- 应提供配置接口允许调优
- 测试验证在实际环境中的效果
调优原则:
- 从建议值开始
- 监控性能指标
- 逐步调整
- 记录变更和效果
- 在生产环境中验证
重要提示:
- 不恰当的参数可能导致性能下降
- 过于激进的值可能引起网络拥塞
- 过于保守的值可能限制吞吐量
- 应根据实际测量调整,而非猜测