Skip to main content

10. 与上层接口 (Interface with Upper Layer)

本章定义SCTP与上层协议(ULP)之间的接口服务。这些是抽象接口,具体实现可能因操作系统而异。

10.1. ULP到SCTP (ULP-to-SCTP)

ULP使用以下原语向SCTP发送命令和数据:

10.1.1. Initialize

格式INITIALIZE([local port], [local eligible address list])

用途:初始化SCTP端点。

参数

  • local port:本地端口号(可选)
  • local eligible address list:本地合格地址列表(可选)

结果

  • 成功:返回本地端点句柄
  • 失败:返回错误代码

描述

- 为SCTP端点分配资源
- 绑定到指定的本地端口和地址
- 如果未指定端口,系统自动分配
- 如果未指定地址,使用所有可用的本地地址

10.1.2. Associate

格式ASSOCIATE(local SCTP instance name, destination transport addr, outbound stream count)

用途:请求与远程SCTP端点建立新的关联。

必需参数

  • local SCTP instance name:本地SCTP实例名称
  • destination transport addr:目标传输地址(IP地址和端口)
  • outbound stream count:请求的出站流数量

可选参数

  • destination transport addr list:目标传输地址列表(用于多宿主)
  • stream payload protocol identifier:流有效载荷协议标识符

结果

  • COMMUNICATION UP:关联成功建立
  • COMMUNICATION LOST:关联建立失败

描述

1. 生成INIT块
2. 启动T1-init定时器
3. 发送INIT到目标地址
4. 等待INIT ACK
5. 发送COOKIE ECHO
6. 等待COOKIE ACK
7. 进入ESTABLISHED状态

10.1.3. Send

格式SEND(association id, buffer address, byte count [,context] [,stream id] [,life time] [,destination transport address] [,unordered flag] [,no-bundle flag] [,payload protocol-id])

用途:将用户消息传递给SCTP进行传输。

必需参数

  • association id:关联标识符
  • buffer address:缓冲区地址
  • byte count:字节数

可选参数

  • context:用户上下文(用于错误报告)
  • stream id:流标识符(默认0)
  • life time:消息生存时间(毫秒)
  • destination transport address:目标传输地址
  • unordered flag:无序传递标志
  • no-bundle flag:禁止捆绑标志
  • payload protocol-id:有效载荷协议ID

结果

  • 成功:消息已接受传输
  • 失败:返回错误代码

描述

- 将用户数据分段为DATA块
- 根据流ID和SSN分配
- 如果指定了生存时间,超时则丢弃
- 默认使用主要目标地址

10.1.4. Shutdown

格式SHUTDOWN(association id)

用途:优雅地关闭关联。

必需参数

  • association id:关联标识符

结果

  • SHUTDOWN COMPLETE:关闭成功
  • COMMUNICATION LOST:关闭失败

描述

1. 停止接受新的用户数据
2. 完成所有未发送数据的传输
3. 等待所有数据被确认
4. 发送SHUTDOWN块
5. 等待SHUTDOWN ACK
6. 发送SHUTDOWN COMPLETE
7. 销毁TCB

10.1.5. Abort

格式ABORT(association id [,Upper Layer Abort Reason])

用途:立即终止关联。

必需参数

  • association id:关联标识符

可选参数

  • Upper Layer Abort Reason:上层中止原因

结果

  • COMMUNICATION LOST:关联已中止

描述

1. 发送ABORT块(包含原因)
2. 丢弃所有未发送和未确认数据
3. 销毁TCB
4. 向ULP报告COMMUNICATION LOST

10.1.6. Set Primary

格式SET PRIMARY(association id, destination transport address)

用途:设置主要目标地址。

必需参数

  • association id:关联标识符
  • destination transport address:目标传输地址

结果

  • 成功:主要地址已更新
  • 失败:地址不在关联的对等地址列表中

描述

- 更改当前主要目标地址
- 用于流量工程或故障恢复
- 地址必须是关联的有效对等地址

10.1.7. Receive

格式RECEIVE(association id, buffer address, buffer size)

用途:从SCTP接收数据。

必需参数

  • association id:关联标识符
  • buffer address:接收缓冲区地址
  • buffer size:缓冲区大小

返回值

  • byte count:接收的字节数
  • stream id:流标识符
  • stream sequence number:流序列号
  • partial flag:部分传递标志
  • delivery number:传递编号
  • transport address:源传输地址

描述

- 从接收队列中提取用户消息
- 如果没有数据,可能阻塞(取决于实现)
- 按流ID和SSN的顺序传递(除非无序)

10.1.8. Status

格式STATUS(association id)

用途:查询关联的当前状态。

必需参数

  • association id:关联标识符

返回值

  • association connection state:关联连接状态
  • destination transport address list:目标传输地址列表
  • destination transport address reachability states:目标传输地址可达性状态
  • current receiver window size:当前接收器窗口大小
  • current congestion window sizes:当前拥塞窗口大小
  • number of outbound streams:出站流数量
  • number of inbound streams:入站流数量
  • primary path:主要路径

10.1.9. Change Heartbeat

格式CHANGE HEARTBEAT(association id, destination transport address, new state [,interval])

用途:启用或禁用特定目标地址的心跳。

必需参数

  • association id:关联标识符
  • destination transport address:目标传输地址
  • new state:新状态(启用/禁用)

可选参数

  • interval:心跳间隔(毫秒)

10.1.10. Request Heartbeat

格式REQUEST HEARTBEAT(association id, destination transport address)

用途:请求向特定目标地址发送心跳。

必需参数

  • association id:关联标识符
  • destination transport address:目标传输地址

用途

  • 测试特定路径的可达性
  • 更新路径的RTT估计

10.1.11. Get SRTT Report

格式GET SRTT REPORT(association id, destination transport address)

用途:获取特定目标地址的SRTT(平滑往返时间)。

返回值

  • srtt:当前SRTT值
  • last update time:最后更新时间

10.1.12. Set Failure Threshold

格式SET FAILURE THRESHOLD(association id, destination transport address, failure threshold)

用途:设置路径故障阈值。

参数

  • association id:关联标识符
  • destination transport address:目标传输地址
  • failure threshold:故障阈值

10.1.13. Set Protocol Parameters

格式SET PROTOCOL PARAMETERS(association id, [,destination transport address,] protocol parameter list)

用途:设置SCTP协议参数。

可设置的参数

  • RTO.Initial:初始重传超时
  • RTO.Min:最小重传超时
  • RTO.Max:最大重传超时
  • RTO.Alpha:SRTT估计器的alpha值
  • RTO.Beta:SRTT估计器的beta值
  • Max.Burst:最大突发大小
  • Association.Max.Retrans:关联最大重传次数
  • Path.Max.Retrans:路径最大重传次数
  • Valid.Cookie.Life:有效Cookie生存时间
  • SACK.Delay:SACK延迟

10.1.14. Destroy SCTP Instance

格式DESTROY(local SCTP instance name)

用途:销毁SCTP实例。

描述

1. 中止所有活动关联
2. 释放所有资源
3. 解除端口和地址绑定

10.2. SCTP到ULP (SCTP-to-ULP)

SCTP使用以下原语向ULP报告事件:

10.2.1. COMMUNICATION UP

格式COMMUNICATION UP(association id, destination transport address list, outbound stream count, inbound stream count)

触发条件

  • 新关联已成功建立(ASSOCIATE完成)
  • 作为被动侧接受新关联(收到INIT并完成四次握手)

参数

  • association id:新建立的关联标识符
  • destination transport address list:对等地址列表
  • outbound stream count:协商的出站流数量
  • inbound stream count:协商的入站流数量

10.2.2. DATA ARRIVE

格式DATA ARRIVE(association id, stream id, stream sequence number, flags, payload protocol identifier, user data)

触发条件

  • 从对等方接收到用户数据

参数

  • association id:关联标识符
  • stream id:流标识符
  • stream sequence number:流序列号
  • flags:标志(例如无序标志)
  • payload protocol identifier:有效载荷协议标识符
  • user data:用户数据

描述

- 通知ULP有新数据可用
- ULP应使用RECEIVE原语检索数据
- 数据按流ID和SSN的顺序传递(除非无序)

10.2.3. COMMUNICATION LOST

格式COMMUNICATION LOST(association id, status)

触发条件

  • 关联失败或被中止
  • 检测到对等端点故障
  • 收到ABORT块
  • SHUTDOWN失败

参数

  • association id:关联标识符
  • status:失败原因
    • Association exceeded maximum retransmissions:超过最大重传次数
    • Peer sent ABORT:对等方发送ABORT
    • Peer unexpectedly closed:对等方意外关闭
    • Resources unavailable:资源不可用

10.2.4. COMMUNICATION ERROR

格式COMMUNICATION ERROR(association id, error info)

触发条件

  • 检测到可恢复的通信错误
  • 收到ERROR块
  • 路径故障(但关联仍然活动)

参数

  • association id:关联标识符
  • error info:错误信息

10.2.5. RESTART

格式RESTART(association id, peer's new tag)

触发条件

  • 检测到对等端点已重启

参数

  • association id:关联标识符
  • peer's new tag:对等方的新标签

描述

- 通知ULP对等方已重启
- ULP应决定如何处理(重新建立或终止)
- 可能需要重新同步应用层状态

10.2.6. SHUTDOWN COMPLETE

格式SHUTDOWN COMPLETE(association id)

触发条件

  • 优雅关闭过程成功完成

参数

  • association id:关联标识符

描述

- 关联已成功关闭
- 所有数据已可靠传递
- TCB已销毁

10.2.7. SEND FAILURE

格式SEND FAILURE(association id, data retrieval id, cause code, context)

触发条件

  • 数据由于某种原因未能传输
  • 达到最大重传次数
  • 消息生存时间已过期

参数

  • association id:关联标识符
  • data retrieval id:数据检索标识符
  • cause code:失败原因代码
  • context:用户上下文(来自SEND原语)

原因代码

  • Message expired:消息已过期
  • Association aborted:关联已中止
  • Send failed:发送失败

10.2.8. NETWORK STATUS CHANGE

格式NETWORK STATUS CHANGE(association id, destination transport address, new status)

触发条件

  • 目标传输地址的状态改变
  • 路径变为活动或非活动

参数

  • association id:关联标识符
  • destination transport address:目标传输地址
  • new status:新状态
    • Active:路径现在可用
    • Inactive:路径现在不可用
    • Unconfirmed:路径未确认

总结

SCTP的ULP接口提供:

  1. 完整的关联管理:初始化、建立、关闭、中止
  2. 灵活的数据传输:支持多流、有序/无序、生存时间
  3. 路径管理:心跳、故障检测、主要路径选择
  4. 状态监控:查询关联状态、网络状态变化通知
  5. 参数配置:运行时调整协议参数

最佳实践

  • 正确处理所有SCTP到ULP的通知
  • 使用流ID进行逻辑数据分离
  • 合理设置消息生存时间
  • 监控网络状态变化并做出响应
  • 优雅关闭优于强制中止