13. 推荐的传输控制块参数 (Recommended Transmission Control Block Parameters)
本章定义了SCTP实现应维护的传输控制块(TCB)参数。这些参数对于SCTP的正确操作至关重要。
13.1. SCTP实例所需参数 (Parameters Necessary for the SCTP Instance)
13.1.1. 本地SCTP端口号 (Local SCTP Port Number)
描述:本地SCTP端口号,用于接收INIT块。 类型:16位无符号整数 用途:标识本地SCTP端点
13.1.2. 本地IP地址列表 (Local IP Address List)
描述:本地端点的所有IP地址列表。 类型:IP地址数组 用途:
- 多宿主支持
- 绑定到特定接口
- 在INIT和INIT ACK中通告
13.1.3. SCTP协议版本 (SCTP Protocol Version)
描述:支持的SCTP协议版本号。 当前值:1 用途:协议兼容性检查
13.1.4. Secret Key (秘密密钥)
描述:用于生成State Cookie的秘密密钥。 类型:字节序列(建议至少160位) 用途:
- 生成和验证State Cookie的HMAC
- 防止Cookie伪造
- 应定期更换(例如每小时)
13.1.5. 有效Cookie生存时间 (Valid.Cookie.Life)
描述:State Cookie的有效生存时间。 推荐值:60秒 范围:建议1-60秒 用途:防止陈旧Cookie被接受
13.1.6. 关联最大重传次数 (Association.Max.Retrans)
描述:关联级别的最大重传次数。 推荐值:10次 用途:
- 超过此值则认为关联失败
- 向ULP报告COMMUNICATION LOST
13.2. 每个关联所需参数 (Parameters Necessary per Association)
13.2.1. 对等验证标签 (Peer Verification Tag)
描述:从对等方接收的验证标签。 类型:32位无符号整数 来源:从INIT或INIT ACK中的Initiate Tag字段获取 用途:
- 在发送的每个SCTP数据包中使用
- 防止数据包伪造
13.2.2. 我的验证标签 (My Verification Tag)
描述:本地端点的验证标签。 类型:32位无符号整数 生成:关联建立时随机生成(不得为0) 用途:
- 在INIT或INIT ACK中发送给对等方
- 验证接收的数据包
13.2.3. 关联状态 (Association State)
描述:当前关联的状态。 可能值:
- CLOSED
- COOKIE-WAIT
- COOKIE-ECHOED
- ESTABLISHED
- SHUTDOWN-PENDING
- SHUTDOWN-SENT
- SHUTDOWN-RECEIVED
- SHUTDOWN-ACK-SENT
13.2.4. 对等传输地址列表 (Peer Transport Address List)
描述:对等端点的所有传输地址。 来源:从INIT、INIT ACK或ASCONF获取 内容:每个地址包含:
- IP地址
- SCTP端口号
- 状态(活动/非活动)
- 错误计数
13.2.5. 主要路径 (Primary Path)
描述:当前用于数据传输的主要目标地址。 类型:指向对等传输地址列表中某个地址的指针 用途:
- 默认数据传输路径
- 可通过SET PRIMARY更改
13.2.6. 总体错误计数 (Overall Error Count)
描述:关联级别的总体错误计数器。 类型:整数计数器 用途:
- 跟踪关联的累积错误
- 超过Association.Max.Retrans时关联失败
13.2.7. 总体错误阈值 (Overall Error Threshold)
描述:关联失败的总体错误阈值。 推荐值:等于Association.Max.Retrans 用途:判断关联是否失败
13.2.8. 对等接收器窗口大小 (Peer Rwnd)
描述:对等方的接收器窗口大小。 类型:32位无符号整数 来源:从INIT ACK、SACK或窗口更新获取 用途:
- 流量控制
- 防止接收器缓冲区溢出
13.2.9. 下一个TSN (Next TSN)
描述:要分配给下一个用户消息的TSN。 类型:32位无符号整数 初始值:从Initial TSN开始 用途:
- 为每个新的DATA块分配唯一的TSN
- 单调递增(环绕后从0继续)
13.2.10. 累积TSN确认点 (Cumulative TSN Ack Point)
描述:已被对等方确认的最高累积TSN。 类型:32位无符号整数 更新:从SACK的Cumulative TSN Ack字段 用途:
- 确定哪些数据已被确认
- 释放发送缓冲区
13.2.11. 出站流数量 (Outbound Streams)
描述:本端点可以使用的出站流数量。 类型:16位无符号整数 协商:在关联建立时协商(取两端请求的最小值) 用途:
- 多流支持
- 流标识符范围:0到(Outbound Streams - 1)
13.2.12. 入站流数量 (Inbound Streams)
描述:对等方可以使用的入站流数量。 类型:16位无符号整数 协商:在关联建立时协商 用途:
- 验证接收的流标识符
- 流标识符必须 < Inbound Streams
13.2.13. 重排序队列 (Reordering Queue)
描述:存储已接收但还未按序交付的DATA块。 数据结构:按TSN排序的队列 用途:
- 处理乱序接收
- 按序交付到上层
13.2.14. 本地传输地址列表 (Local Transport Address List)
描述:本关联使用的本地传输地址。 类型:IP地址列表 用途:
- 多宿主支持
- 绑定到特定接口
13.3. 每个传输地址数据 (Per Transport Address Data)
对于每个对等传输地址,SCTP端点必须维护:
13.3.1. 错误计数 (Error Count)
描述:此传输地址的连续传输失败次数。 类型:整数计数器 用途:
- 路径故障检测
- 超过Path.Max.Retrans时标记路径为非活动
13.3.2. 错误阈值 (Error Threshold)
描述:标记路径为非活动的阈值。 推荐值:Path.Max.Retrans(推荐5次) 用途:判断路径是否失败
13.3.3. 路径最大重传次数 (Path.Max.Retrans)
描述:单个路径的最大重传次数。 推荐值:5次 用途:路径故障检测
13.3.4. 当前拥塞窗口 (cwnd)
描述:拥塞窗口大小(字节)。 类型:32位无符号整数 初始值:min(4 * MTU, max(2 * MTU, 4380)) 用途:
- 拥塞控制
- 限制未确认数据量
13.3.5. 慢启动阈值 (ssthresh)
描述:慢启动阈值(字节)。 类型:32位无符号整数 初始值:对等方的Rwnd 用途:
- 区分慢启动和拥塞避免阶段
- 拥塞控制算法
13.3.6. 部分字节确认 (partial_bytes_acked)
描述:拥塞避免阶段累积的部分字节确认。 类型:32位无符号整数 用途:
- 拥塞避免时cwnd的增长
- 每次增加cwnd前累积MTU字节的确认
13.3.7. 路径MTU (PMTU)
描述:到此目标的路径MTU。 类型:整数 初始值:第一跳MTU或保守值(如576字节) 更新:通过Path MTU Discovery 用途:
- 数据分段
- 避免IP分片
13.3.8. RTO (Retransmission Timeout)
描述:重传超时值(毫秒)。 类型:整数 初始值:RTO.Initial(推荐3000毫秒) 范围:RTO.Min到RTO.Max 用途:
- 确定何时重传未确认的数据
- 根据RTT测量动态调整
13.3.9. SRTT (Smoothed Round-Trip Time)
描述:平滑往返时间(毫秒)。 类型:整数 用途:
- 计算RTO
- 估计网络延迟
13.3.10. RTTVAR (Round-Trip Time Variation)
描述:往返时间变化(毫秒)。 类型:整数 用途:
- 计算RTO
- 考虑RTT的抖动
13.3.11. 心跳间隔 (Heartbeat Interval)
描述:向此地址发送心跳的间隔。 推荐值:30秒 类型:整数(毫秒) 用途:
- 监控路径可达性
- 保持路径活跃
13.3.12. 最后一次心跳时间 (Last Heartbeat Time)
描述:上次向此地址发送心跳的时间。 类型:时间戳 用途:
- 确定何时发送下一个心跳
- 与Heartbeat Interval配合使用
13.3.13. 目标确认时间 (Destination Confirm Time)
描述:上次确认此路径可达的时间。 类型:时间戳 更新时机:
- 收到HEARTBEAT ACK
- 收到新数据的确认 用途:决定是否需要发送心跳
13.3.14. 传输地址状态 (Transport Address State)
描述:此传输地址的当前状态。 可能值:
- Active(活动):可用于数据传输
- Inactive(非活动):当前不可用
- Unconfirmed(未确认):尚未验证 用途:路径选择和故障处理
13.4. 所需的通用参数 (General Parameters Needed)
13.4.1. RTO.Initial
描述:初始重传超时值。 推荐值:3000毫秒(3秒) 用途:在没有RTT测量时使用
13.4.2. RTO.Min
描述:最小重传超时值。 推荐值:1000毫秒(1秒) 用途:RTO的下限
13.4.3. RTO.Max
描述:最大重传超时值。 推荐值:60000毫秒(60秒) 用途:RTO的上限
13.4.4. RTO.Alpha
描述:SRTT平滑因子。 推荐值:1/8(0.125) 用途:SRTT = (1 - alpha) * SRTT + alpha * RTT'
13.4.5. RTO.Beta
描述:RTTVAR平滑因子。 推荐值:1/4(0.25) 用途:RTTVAR = (1 - beta) * RTTVAR + beta * |SRTT - RTT'|
13.4.6. Max.Burst
描述:一次可以突发传输的最大数据包数。 推荐值:4个PMTU大小的数据包 用途:
- 防止突发流量导致拥塞
- 在快速重传和超时后限制传输
13.4.7. SACK.Delay
描述:延迟发送SACK的时间。 推荐值:200毫秒 最大值:500毫秒 用途:
- 允许SACK捆绑
- 减少控制块开销
13.4.8. 有效Cookie生存时间 (Valid.Cookie.Life)
描述:State Cookie的有效期。 推荐值:60秒 用途:防止重放攻击
总结
TCB参数的重要性:
- 实例级参数:定义SCTP端点的基本配置
- 关联级参数:维护每个关联的状态和控制信息
- 地址级参数:支持多宿主和路径管理
- 通用参数:提供协议行为的可调节控制
实现建议:
- 所有推荐值经过实践验证,应作为默认值
- 某些参数可根据网络条件调整
- 参数应可通过管理接口配置
- 维护参数的一致性和正确性至关重要
性能优化:
- 合理的RTO值可以平衡快速重传和避免虚假重传
- 适当的cwnd和ssthresh值优化吞吐量
- 心跳间隔影响故障检测速度和开销
- SACK延迟影响确认及时性和开销