跳到主要内容

13. 推荐的传输控制块 (TCB) 参数

本章定义 SCTP 实现应维护的传输控制块 (Transmission Control Block, TCB) 参数. 这些参数对 SCTP 的正确运行至关重要.

13.1. SCTP 实例所需参数

13.1.1. Local SCTP Port Number

描述: 用于接收 INIT chunk 的本地 SCTP 端口号. 类型: 16-bit unsigned integer 用途: 标识本地 SCTP 端点

13.1.2. Local IP Address List

描述: 所有本地端点 IP 地址的列表. 类型: IP 地址数组 用途: 多宿主支持, 接口绑定, 在 INIT/INIT ACK 中通告

13.1.3. SCTP Protocol Version

描述: 支持的 SCTP 协议版本号. 当前值: 1 用途: 协议兼容性检查

13.1.4. Secret Key

描述: 用于生成 State Cookie 的密钥. 类型: 字节序列 (建议最小 160 bits) 用途: 生成并验证 State Cookie 的 HMAC, 防止伪造, 应周期性轮换

13.1.5. Valid.Cookie.Life

描述: State Cookie 的有效生存期. 推荐值: 60 秒 范围: 建议 1-60 秒 用途: 防止接受过期 cookie

13.1.6. Association.Max.Retrans

描述: Association 级最大重传次数. 推荐值: 10 次尝试 用途: 超过后认为 association 失败, 向 ULP 报告 COMMUNICATION LOST

13.2. 每个 Association 所需参数

13.2.1. Peer Verification Tag

描述: 从对等方收到的 Verification Tag. 类型: 32-bit unsigned integer 来源: INIT 或 INIT ACK 中的 Initiate Tag 字段 用途: 用于每个出站 SCTP 分组, 防止分组伪造

13.2.2. My Verification Tag

描述: 本地端点的 Verification Tag. 类型: 32-bit unsigned integer 生成方式: association 建立时随机生成 (不得为 0) 用途: 在 INIT 或 INIT ACK 中发送给对等方, 用于验证接收的分组

13.2.3. Association State

描述: 当前 association 状态. 可能值: 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 端口, 状态 (active/inactive), 错误计数

13.2.5. Primary Path

描述: 用于数据传输的主目的地址. 类型: 指向对等传输地址列表中地址的指针 用途: 默认数据传输路径, 可通过 SET PRIMARY 修改

13.2.6. Overall Error Count

描述: Association 级总体错误计数器. 类型: 整数计数器 用途: 跟踪 association 累计错误, 超过 Association.Max.Retrans 时 association 失败

13.2.7. Overall Error Threshold

描述: 用于判定 association 失败的总体错误阈值. 推荐值: 等于 Association.Max.Retrans 用途: 判定 association 失败

13.2.8. Peer Rwnd

描述: 对等方的接收方窗口大小. 类型: 32-bit unsigned integer 来源: 来自 INIT ACK, SACK 或窗口更新 用途: 流量控制, 防止接收方缓冲区溢出

13.2.9. Next TSN

描述: 分配给下一条用户消息的 TSN. 类型: 32-bit unsigned integer 初始值: 从 Initial TSN 开始 用途: 为每个 DATA chunk 分配唯一 TSN, 单调递增 (回绕到 0)

13.2.10. Cumulative TSN Ack Point

描述: 对等方已确认的最高累计 TSN. 类型: 32-bit unsigned integer 更新来源: SACK 中的 Cumulative TSN Ack 字段 用途: 确定已确认数据, 释放发送缓冲区

13.2.11. Outbound Streams

描述: 此端点可使用的出站流数量. 类型: 16-bit unsigned integer 协商: 在 association 建立期间协商 (取双方请求的较小值) 用途: 多流支持, stream ID 范围: 0 到 (Outbound Streams - 1)

13.2.12. Inbound Streams

描述: 对等方可使用的入站流数量. 类型: 16-bit unsigned integer 协商: 在 association 建立期间协商 用途: 验证收到的 stream ID,必须< Inbound Streams

13.2.13. Reordering Queue

描述: 存储已收到但尚未按序交付的 DATA chunk. 数据结构: 按 TSN 排序的队列 用途: 处理乱序接收, 按序交付给上层

13.2.14. Local Transport Address List

描述: 此 association 使用的本地传输地址. 类型: IP 地址列表 用途: 多宿主支持, 接口绑定

13.3. 每个传输地址的数据

对于每个对等传输地址, SCTP 端点必须维护:

13.3.1. Error Count

描述: 此地址的连续传输失败次数. 类型: 整数计数器 用途: 路径故障检测, 超过 Path.Max.Retrans 时将路径标记为 inactive

13.3.2. Error Threshold

描述: 将路径标记为 inactive 的阈值. 推荐值: Path.Max.Retrans (建议为 5) 用途: 判定路径故障

13.3.3. Path.Max.Retrans

描述: 单条路径的最大重传次数. 推荐值: 5 次尝试 用途: 路径故障检测

13.3.4. cwnd (Congestion Window)

描述: 以字节为单位的拥塞窗口大小. 类型: 32-bit unsigned integer 初始值: min(4 * MTU, max(2 * MTU, 4380)) 用途: 拥塞控制, 限制未完成确认的数据量

13.3.5. ssthresh (Slow Start Threshold)

描述: 以字节为单位的慢启动阈值. 类型: 32-bit unsigned integer 初始值: 对等方的 Rwnd 用途: 区分慢启动和拥塞避免阶段

13.3.6. partial_bytes_acked

描述: 拥塞避免中累计的部分字节确认数. 类型: 32-bit unsigned integer 用途: 拥塞避免中的 cwnd 增长, 在增加 cwnd 前累计 MTU 字节

13.3.7. PMTU (Path MTU)

描述: 到此目的地的路径 MTU. 类型: Integer 初始值: 第一跳 MTU 或保守值 (例如 576 字节) 更新方式: Path MTU Discovery 用途: 数据分段, 避免 IP 分片

13.3.8. RTO (Retransmission Timeout)

描述: 以毫秒为单位的重传超时值. 类型: Integer 初始值: RTO.Initial (建议 3000 ms) 范围: RTO.Min 到 RTO.Max 用途: 确定何时重传未确认数据, 基于 RTT 动态调整

13.3.9. SRTT (Smoothed Round-Trip Time)

描述: 以毫秒为单位的平滑往返时间. 类型: Integer 用途: 计算 RTO, 估计网络时延

13.3.10. RTTVAR (Round-Trip Time Variation)

描述: 以毫秒为单位的往返时间变化量. 类型: Integer 用途: 计算 RTO, 计入 RTT 抖动

13.3.11. Heartbeat Interval

描述: 向此地址发送 heartbeat 的间隔. 推荐值: 30 秒 类型: Integer (毫秒) 用途: 监测路径可达性, 保持路径 active

13.3.12. Last Heartbeat Time

描述: 上一次向此地址发送 heartbeat 的时间. 类型: Timestamp 用途: 确定何时发送下一次 heartbeat, 与 Heartbeat Interval 配合使用

13.3.13. Destination Confirm Time

描述: 此路径最近一次被确认可达的时间. 类型: Timestamp 更新时机: 收到 HEARTBEAT ACK, 收到新的数据确认 用途: 判断是否需要发送 heartbeat

13.3.14. Transport Address State

描述: 此传输地址的当前状态. 可能值: Active (可用于数据传输), Inactive (当前不可用), Unconfirmed (尚未验证) 用途: 路径选择和故障处理

13.4. 所需通用参数

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

推荐值: 1/8 (0.125) 用途: SRTT = (1 - alpha) * SRTT + alpha * RTT'

13.4.5. RTO.Beta

推荐值: 1/4 (0.25) 用途: RTTVAR = (1 - beta) * RTTVAR + beta * |SRTT - RTT'|

13.4.6. Max.Burst

推荐值: 4 个 PMTU 大小的分组 用途: 防止突发流量导致拥塞, 限制快速重传和超时后的发送量

13.4.7. SACK.Delay

推荐值: 200 毫秒 最大值: 500 毫秒 用途: 允许 SACK 捆绑, 降低控制 chunk 开销

13.4.8. Valid.Cookie.Life

推荐值: 60 秒 用途: 防止重放攻击


总结

TCB 参数的重要性:

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

实现建议: 使用推荐值作为默认值, 允许通过管理接口配置, 保持参数一致性

性能优化: 适当的 RTO 在快速重传和避免虚假重传之间取得平衡, 合适的 cwnd/ssthresh 优化吞吐量, heartbeat 间隔影响故障检测速度和开销