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 参数的重要性:
- 实例级: 定义基本 SCTP 端点配置
- Association 级: 维护每个 association 的状态和控制信息
- 地址级: 支持多宿主和路径管理
- 通用: 提供对协议行为的可调控制
实现建议: 使用推荐值作为默认值, 允许通过管理接口配置, 保持参数一致性
性能优化: 适当的 RTO 在快速重传和避免虚假重传之间取得平衡, 合适的 cwnd/ssthresh 优化吞吐量, heartbeat 间隔影响故障检测速度和开销