Skip to main content

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参数的重要性:

  1. 实例级参数:定义SCTP端点的基本配置
  2. 关联级参数:维护每个关联的状态和控制信息
  3. 地址级参数:支持多宿主和路径管理
  4. 通用参数:提供协议行为的可调节控制

实现建议

  • 所有推荐值经过实践验证,应作为默认值
  • 某些参数可根据网络条件调整
  • 参数应可通过管理接口配置
  • 维护参数的一致性和正确性至关重要

性能优化

  • 合理的RTO值可以平衡快速重传和避免虚假重传
  • 适当的cwnd和ssthresh值优化吞吐量
  • 心跳间隔影响故障检测速度和开销
  • SACK延迟影响确认及时性和开销