@ju1900
2017-07-04T10:05:45.000000Z
字数 7252
阅读 2354
基础
132
传送地址由 IP 地址、传输层协议类型和传输层端口号定义。由于 SCTP 在 IP 上传输,所以一个 SCTP 传送地址由一个 IP 地址加一个 SCTP 端口号决定。SCTP 端口号就是 SCTP 用来识别同一地址上的用户,和 TCP 端口号是一个概念。比如 IP 地址 10.105.28.92 和 SCTP 端口号 1024 标识了一个传送地址,而 10.105.28.93 和 1024 则标识了另外一个传送地址,同样,10.105.28.92 和端口号 1023 也标识了一个不同的传送地址。
一个偶联可以包括多条通路,但只有一个首选通路。如图所示,MGC(如 GTSOFTX3000)一个端点包括两个传送地址(10.11.23.14:2905 和10.11.23.15: 2905),而SG 一个端点也包括两个传送地址(10.11.23.16:2904 和10.11.23.17: 2904)。
此两个端点决定了一个偶联,该偶联包括 4 条通路(Path0、Path1、Path2 和Path3)。根据数据配置可以确定此4 条通路的选择方式,如下图所示。图中定义了4 条通 路,而且首选通路为Path0:
SCTP 也是一个滑动窗口协议,拥塞窗口是针对每个目的地址维护的,它会根据网络状况调节。当目的地址的发送消息长度超过其CWND 时,端点将停止向这个地址发送数据。
RWND 用来描述一个偶联对端的接收缓冲区大小。偶联建立过程中,双方会交换彼此的初始 RWND。RWND 会根据数据发送、证实的情况即时地变化。RWND 的大小限制了SCTP 可以发送的数据的大小。当RWND 等于0 时,SCTP 还可以发送一个数据报,以便 通过证实消息(SACK)消息得知对方缓冲区的变化,直到达到CWND 的限制。
TCB 是一种内部数据结构,是一个 SCTP 端点为它与其他端点之间已经启动的每一个偶联生成的。TCB 包括端点的所有状态、操作信息,便于 维护和管理相应的偶联。
如图所示,SCTP 的功能主要包括:偶联的建立和关闭、流内消息顺序递交、用户数据分段、证实(SACK)和避免拥塞、消息块绑定、分组的有效性和通路管理。
偶联的建立是由 SCTP 用户(如 M2UA、M3UA 等)发起请求来启动的。而且建立过程相对于 TCP 连接而言比较复杂,是个 四次握手 过程,并用到了 COOKIE
的机制。
SCTP 提供了对激活偶联的 正常的关闭程序,它必须根据 SCTP 用户的请求来执行, 当然 SCTP 也提供一种非正常(即中止)程序,中止程序 的执行既可以根据 SCTP 用户的请求来启动,也可以由 SCTP 协议检查出差错来中止。 SCTP 不支持半打开状态(即一端可以在另一端结束后继续发送数据)。无论是哪个端点执行了关闭程序,偶联的两端都应停止接受从 SCTP 用户发来请求原语。
SCTP 提供数据报的顺序传递,顺序传递的数据报必须放在一个“流”中传递。流是顺序传递的基石。 通过流,SCTP 将数据的确认传输和有序递交分成两种不同机制。SCTP 使用 TSN(传输顺序号) 机制实现了数据的确认传输,使用流号(ID)和SSN(流顺序号)则实现数据的有序递交。
当 SCTP 收到数据的 SSN 连续的时候,SCTP 就可以将数据向 SCTP 用户递交, 而不用等到数据的 TSN 号连续以后才向 SCTP 用户递交。
当一个流被闭塞时,期望的下一个连续的 SCTP 用户消息可以从另外的流上进行递交。 SCTP 也提供 非顺序递交 的业务,接收到的用户消息可以使用这种方式立即递交到 SCTP 用户,而不需要保证其接收顺序。
SCTP 通过对传送通路上最大 PMTU(Path Maximum TransmissiON Unit)的检测, 实现在 SCTP 层将超大用户数据分片打包,避免在IP层的多次分片、重组,可以减少 IP 层的数据负担。
证实和重传是协议保证传输可靠性的策略,SCTP 也一样。证实机制是 SCTP 保证传输可靠性的基石。避免拥塞沿袭了 TCP 的窗口机制,进行合适的流量控制
如果长度很短的用户数据被带上很大一个 SCTP 消息头,其传递效率会很低,因此,SCTP 将几个用户数据绑定在一个 SCTP 报文里面传输,以提高带宽的利用率。
分组的有效性是 SCTP 提供无差错传输的基石。SCTP 分组的公共分组头包含一个 验证标签(Verification Tag)和一个可选的 32 位校验码(Checksum)。
SCTP 端点 A 启动建立偶联,并向端点 B 发送一个用户消息,随后端点 B 向 A 发送两个用户消息。(假定这些消息没有捆绑和分段)。信令流程如图所示。
(1) 端点 A 创建一个数据结构 TCB(传输控制块)来描述即将发起的这个偶联(包含偶联的基本信息),然后向端点 B 发送 INIT 数据块, 启动 INIT 计时器
, 进入 COOKIE-WAIT 状态
(2) 端点B 收到 INIT 消息后,立即用 INIT ACK 数据块响应
(3) 端点 A 收到 INIT ACK 后,首先停止 INIT 定时器, 离开 COOKIE-WAIT 状态, 然后发送 COOKIE ECHO 数据块,将收到 INIT ACK 数据块中的 STATE COOKIE 参数原封带回。最后端点 A 启动 COOKIE 定时器
并进入 COOKIE-ECHOED 状态
。
(4) 端点 B 收到 COOKIE ECHO 数据块后,进行 COOKIE 验证。将 STATE COOKIE 中的 TCB 部分和本端密钥根据 RFC2401 的 MAC 算法进行计算,得出的 MAC 和 STATE COOKIE 中携带的 MAC 进行比较。如果不同则丢弃这个消息;如果相同,则取出 TCB 部分的时间戳,和当前时间比较,看时间是否已经超过了 COOKIE 的生命期。如果是,同样丢弃。否则根据TCB 中的信息建立一个和端 A 的偶联。端点 B 将状态迁入 ESTABLISHED 状态
,并发出 COOKIE ACK 数据块。端点 B 向 SCTP 用户发送 SCOMMUNCIATION UP
通知。端点 A 接收到 COOKIE ACK, 也会进入 ESTABLISHED 状态
(5) 端点 A 向端点B 发送一个 DATA 数据块,启动 T3-RTS 定时器
(6) 端点 B 收到 DATA 数据块后,返回 SACK 数据块
(7) 端点 B 向端点 A 发送第一个 DATA 数据块
(8) 端点 A 收到 DATA 数据块后,返回 SACK 数据块。SACK 数据块中必须带有如下参数:
一个端点退出服务时,需要停止它的偶联。偶联的停止使用两种流程:偶联的中止流程(非正常关闭)和偶联的正常关闭流程。
偶联的中止(非正常关闭)可以在任何未完成期间进行,偶联的两端都舍弃数据并且不提交到对端。此种方法不考虑数据的安全。偶联的中止步骤比较简单:发起端点向对端端点发送 ABORT
数据块,发送的 SCTP 分组中必须填上对端端点的验证标签,而且不在 ABORT 数据块中捆绑任何 DATA 数据;接收端点收到 ABORT 数 据块后,进行验证标签的检查。如果验证标签与本端验证标签相同,接收端点从记录上清除该偶联,并向 SCTP 用户报告偶联的停止。
偶联的正常关闭:任何一个端点执行正常关闭程序时,偶联的两端将停止接受从其 SCTP 用户发来的新数据,并且在发送或接收到 SHUTDOWN 数据块时,把分组中的数据递交给 SCTP 用户。偶联的关闭可以保证所有两端的未发送、发送未证实数据得到发送和证实后再终止偶联。
偶联的正常关闭步骤如下:
(1) 偶联关闭发起端点 A 的 SCTP 用户向 SCTP 发送 SHUTDOWN 请求。SCTP 偶联从 ESTABLISHED 状态迁入 SHUTDOWN-PENDING 状态
。在这个状态,SCTP 不接受 SCTP 用户在这个偶联上的任何数据发送请求。同时等待端点 A 所有发送未证实的数据得到端点 B 的证实。当所有端点 A 发送未证实数据得到证实,则向端点 B 发送 SHUTDOWN 数据块。端点 A 启动 T2-shutdown 定时器进入 SHUTDOWN-SENT 状态
。启动 `T2-shutdown 定时器的目的是等待端点B 发回的 SHUTDOWN-ACK 数据块,如果定时器超时,则端点 A 必须重新发送 SHUTDOWN 数据块。
(2) 端点 B 收到 SHUTDOWN 消息后,进入 SHOUTDOWN-RECEIVED 状态
, 不再接收从 SCTP 用户发来的的新数据,并且检查数据块的累积 TSN ACK 字段,验证所有未完成的 DATA 数据块已经被 SHUTDOWN 的发送方接收。当端点 B 所有未发送数据和发送未证实数据得到发送和证实后, 发送 SHUTDOWN ACK 数据块并启动本端 T2-SHUTDOWN 定时器
,并且进入 SHUTDOWN-ACK-SENT 状态
。如果定时器超时了,端点B 则重新发送 SHUTDOWN ACK 数据块。
(3) 端点 A 收到 SHUTDOWN ACK 消息后,停止 T2-shutdown 定时器,并且向端点 B 发送 SHUTDOWN COMPLETE 数据块,并清除偶联的所有记录。端点 B 收到 SHUTDOWN COMPLETE 数据块后, 验证是否处于 SHUTDOWN-ACK-SENT 状态。如果不是处于该状态,则丢弃该数据块;如果端点处于SHUTDOWN-ACK-SENT 状态,端点 B 则停止 T2-shutdown 定时器并清除偶联的所有记录,进入CLOSED 状态。