SCTP协议详解.docx
《SCTP协议详解.docx》由会员分享,可在线阅读,更多相关《SCTP协议详解.docx(15页珍藏版)》请在冰豆网上搜索。
SCTP协议详解
SCTP协议详解
SCTP被视为一个传输层协议,它的上层为SCTP用户应用,下层作为分组网络。
在SIGTRAN
协议的应用中,SCTP上层用户是SCN信令的适配模块(如M2UAM3UA,下层是IP网。
・SCTP相关术语
・SCTP功能
*SCTP基本信令流程
IbM
SCTP相关术语
1.传送地址
传送地址由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也标识了一个不同的传送地址。
2.主机和端点
主机(HOST)主机配有一个或多个IP地址,是一个典型的物理实体。
端点(SCTPEndpoint)
端点是SCTP的基本逻辑概念,是数据报的逻辑发送者和接收者,是一个典型的逻辑
实体。
一个传送地址(IP地址+SCTP端口号)唯一标识一个端点。
一个端点可以由多个传
送地址进行定义,但对于同一个目的端点而言,这些传送地址中的IP地址可以配置成多
个,但必须使用相同的SCTP端口。
3.偶联和流
偶联(AssociATION偶联就是两个SCTP端点通过SCTP协议规定的4步握手机制建立起来的进行数据传递的逻辑联系或者通道。
SCTP协议规定在任何时刻两个端点之间能
且仅能建立一个偶联。
由于偶联由两个端点的传送地址来定义,所以通过数据配置本地IP
地址、本地SCTP端口号、对端IP地址、对端SCTP端口号等四个参数,可以唯一标识一个SCTP偶联。
正因为如此,在GTSOFTX3000中,偶联可以被看成是一条M2UA链路或M3UA链路。
流(Stream)流是SCTP协议的一个特色术语。
SCTP偶联中的流用来指示需要按顺序递交到高层协议的用户消息的序列,在同一个流中的消息需要按照其顺序进行递交。
严格地说,“流”就是一个SCTP偶联中,从一个端点到另一个端点的单向逻辑通道。
一个偶
联是由多个单向的流组成的。
各个流之间相对独立,使用流ID进行标识,每个流可以单
独发送数据而不受其他流的影响。
4.通路(Path)和首选通路(PrimaryPath)
通路(Path)通路是一个端点将SCTP分组发送到对端端点特定目的传送地址的路由。
如果分组发送到对端端点不同的目的传送地址时,不需要配置单独的通路。
首选通路(PrimaryPath)首选通路是在默认情况下,目的地址、源地址在SCTP分
组中发到对端端点的通路。
如果可以使用多个目的地地址作为到一个端点的目的地址,则这个SCTP端点为多归
属。
如果发出SCTP分组的端点属于多归属节点时,如果定义了目的地址、源地址,能够
更好控制响应数据块返回的通路和数据包被发送的接口。
一个SCTP偶联的两个SCTP端
点都可以配置多个IP地址,这样一个偶联的两个端点之间具有多条通路,这就是SCTP偶
联的多地址性。
SCTP偶联的多地址性是SCTP与TCP最大的不同。
一个偶联可以包括多条通路,但只有一个首选通路。
如图1所示,MGC如GTSOFTX3000一个端点包括两个传送地址(10.11.23.14:
2905和10.11.23.15:
2905),而SG一个端
点也包括两个传送地址(10.11.23.16:
2904和10.11.23.17:
2904)。
图1SCTP双归属
此两个端点决定了一个偶联,该偶联包括4条通路(PathO、Pathl、Path2和Path3)。
根据数据配置可以确定此4条通路的选择方式,如图2所示。
图中定义了4条通路,而且首选通路为PathO:
PathO:
本端传送地址1(10.11.23.14:
2905)发送SCTP分组到对端传送地址1(10.11.23.16:
2904)。
端点发送的SCTP工作原理为:
本端点传送地址A发送的SCTP包通过首选通路发送到对端端点。
当首选通路出现故障后,SCTP可以自动切换到其他备用通路上,优先切换对
端端点的传送地址,再次切换本端端点的传送地址。
SCTP定义了心跳消息(HeartBeat)。
当某条通路空闲时,本端SCTP用户要求SCTP生成相应的心跳消息并通过该通路发送到对端端点,而对端端点必须立即发回对应的心跳确
认消息。
这种机制被用来精确测量回路时延RTT(RoundTripTIme),而且可以随时监视偶
联的可用情况和保持SCTP偶联的激活状态。
Historycomaiann:
.ll
祗.A
inpt]-:
A
图2确定通路选择方式的数据配置
5.TSN和SSN
传输顺序号TSN(TransmissionSequeneeNumber)SCTP使用TSN机制实现数据的确认传输。
一个偶联的一端为本端发送的每个数据块顺序分配一个基于初始TSN的32位
顺序号,以便对端收到时进行确认。
TSN是基于偶联进行维护的。
流顺序号SSN(StreamSequeneeNumber)
SCTP为本端在这个流中发送的每个数据块顺序分配一个16位SSN以便保证流内的
顺序传递。
在偶联建立时,所有流中的SSN都是从0开始。
当SSN到达65535后,贝U接下来的SSN为0。
TSN和SSN的分配是相互独立的。
6.拥塞窗口CWNDCongestionWindow)
SCTP也是一个滑动窗口协议,拥塞窗口是针对每个目的地址维护的,它会根据网络状
况调节。
当目的地址的发送未证实消息长度超过其CWND寸,端点将停止向这个地址发送
数据。
7.接收窗口RWNDReceiveWindow)
RWNE用来描述一个偶联对端的接收缓冲区大小。
偶联建立过程中,双方会交换彼此的
初始RWNDRWND会根据数据发送、证实的情况即时地变化。
RWND勺大小限制了SCTP可
以发送的数据的大小。
当RWND等于0时,SCTP还可以发送一个数据报,以便通过证实消息得知对方缓冲区的变化,直到达到CWND勺限制。
8.传输控制块TCB(TransmissionControlBlock)
TCB是一种内部数据结构,是一个SCTP端点为它与其他端点之间已经启动的每一个
偶联生成的。
TCB包括端点的所有状态、操作信息,便于维护和管理相应的偶联。
SCTP功能
如图所示,SCTP的功能主要包括:
偶联的建立和关闭、流内消息顺序递交、用户数据分段、证实和避免拥塞、消息块绑定、分组的有效性和通路管理。
流内咂库递交
图SCTP功能示意图
1、偶联的建立和关闭
偶联的建立是由SCTP用户(如M2UAM3UA等)发起请求来启动的。
而且建立过程
相对于TCP连接而言比较复杂,是个“四次握手”过程,并用到了“COOKIE”的机制。
COOKIE是一个含有端点初始信息和加密信息的数据块,通信的双方在关联建立时需要处理
并交换,从而增加协议的安全性,防止拒绝服务和伪装等潜在的攻击。
SCTP提供了对激
活偶联的正常的关闭程序,它必须根据SCTP用户的请求来执行,当然SCTP也提供一种非
正常(即中止)程序,中止程序的执行既可以根据SCTP用户的请求来启动,也可以由SCTP
协议检查出差错来中止。
SCTP不支持半打开状态(即一端可以在另一端结束后继续发送数据)。
无论是哪个端点执行了关闭程序,偶联的两端都应停止接受从SCTP用户发来请求原语。
2、流内消息顺序递交
SCTP提供数据报的顺序传递,顺序传递的数据报必须放在一个“流”中传递。
流是顺
序传递的基石。
通过流,SCTP将数据的确认和传输的有序递交分成两种不同机制。
SCTP使
用TSN机制实现了数据的确认传输,使用流号和SSN(流顺序号)则实现数据的有序递交。
当SCTP收到数据的SSN连续的时候,SCTP就可以将数据向SCTP用户递交,而不用等到数据的TSN号连续以后才向SCTP用户递交。
当一个流被闭塞时,期望的下一个连续的SCTP用户消息可以从另外的流上进行递交。
SCTP也提供非顺序递交的业务,接收到的用户消息可以使用这种方式立即递交到SCTP用
户,而不需要保证其接收顺序。
3、用户数据分段
SCTP通过对传送通路上最大PMTU(PathMaximumTransmissiONUnit)的检测,实
现在SCTP层将超大用户数据分片打包,避免在IP层的多次分片、重组,可以减少IP层
的数据负担。
在发送端,SCTP可以对大的用户数据报进行分片以确保SCTP数据报传递到低层时适
合通路MTU(MaximumTransmissionUnit)。
在接收端,SCTP将分片重组为完整的用户数据报,然后传递给SCTP用户。
4、证实和避免拥塞
证实和重传是协议保证传输可靠性的策略,SCTP也一样。
证实机制是SCTP保证传输
可靠性的基石。
避免拥塞沿袭了TCP的窗口机制,进行合适的流量控制。
?
?
SCTP在将数据(数据分片或未分片的用户数据报)发送给底层之前顺序地为之分配一
个发送顺序号(TSN。
TSN和SSN(流顺序号)是相互独立的,TSN用于保证传输的可靠性,SSN用于保证流
内消息的顺序传递。
TSN和SSN在功能上使可靠传递和顺序传递分开。
接收端证实所有收到的TSNs,即使
其中有些尚未收到。
包重发功能负责TSN的证实,还负责拥塞消除。
5、消息块绑定
如果长度很短的用户数据被带上很大一个SCTP消息头,其传递效率会很低,因此,
SCTP将几个用户数据绑定在一个SCTP报文里面传输,以提高带宽的利用率。
SCTP分组由公共分组头和一个/多个信息块组成,信息块可以是用户数据,也可以是
SCTP控制信息。
SCTP用户能够可选地使用捆绑功能,决定是否将多个用户数据报捆绑在一个SCTP分
组中。
为提高效率,拥塞/重发时,捆绑功能可能仍被执行,即使用户已经禁止捆绑。
6、分组的有效性
分组的有效性是SCTP提供无差错传输的基石。
SCTP分组的公共分组头包含一个验证
标签(VerificATIonTag)和一个可选的32位校验码(Checksum)。
验证标签的值由偶联两端在偶联启动时选择。
如果收到的分组中如果没有期望的验证标签值,接收端将丢弃这
个分组,以阻止攻击和失效的SCTP分组。
校验码由SCTP分组的发送方设置,以提供附
加的保护,用来避免由网络造成的数据差错。
接收端将丢弃包含无效校验码的SCTP分组。
7、通路管理
发送端的SCTP用户能够使用一组传送地址作为SCTP分组的目的地。
SCTP管理功能可以根据SCTP用户的指令和当前合格的目的地集合的可达性状态,为每个发送的SCTP分
组选择一个目的地传送地址。
当其他分组业务量不能完全表明可达性时,通路管理功能可
以通过心跳消息来监视到某个目的地地址的可达性,并当任何对端传送地址的可达性发生
变化时,向SCTP用户提供指示。
通路功能也用来在偶联建立时,向对端报告合格的本端
传送地址集合,并把从对端返回的传送地址报告给本地的SCTP用户。
在偶联建立时,为
每个SCTP端点定义一个首选通路,用来正常情况下发送SCTP分组。
在接收端,通路管理功能在处理SCTP分组前,用来验证入局的SCTP分组属于的偶联是否存在。
SCTP基本信令流程
1偶联的建立和发送流程
SCTP端点A启动建立偶联,并向端点B发送一个用户消息,随后端点B向A发送两个用户消息。
(假定这些消息没有捆绑和分段)。
信令流程如图1所示。
Endpoint0
塾LNTTACK
⑶COOKIEECHO
⑷COOKIEACK
⑼0A7A
SACK
(7)DATA
同DATA
倒SACK
图1偶联建立过程消息交互图
(1)端点A创建一个数据结构TCB(传输控制块)来描述即将发起的这个偶联(包含偶联的基本信息),然后向端点B发送INIT数据块。
INIT数据块中主要包括如下参数:
启动标签(InitiateTag):
对端验证标签,如设为Tag_A。
Tag_A是从1到4294967295
中的一个随机数。
输出流数量(OS:
本端点期望的最大出局流的数量。
输入流数量(MIS):
本端点允许入局流的最大数量。
(2)端点B收到INIT消息后,立即用INITACK数据块响应。
INITACK数据块中必须带有如下参数:
目的地IP地址:
设置成INIT数据块的起源IP地址。
启动标签(InitiateTag):
设置成Tag_B。
状态COOKIE(STATECOOKIE:
根据偶联的基本信息生成一个TCB不过这个TCB是
一个临时TCB这个TCB生成以后,将其中的必要信息(包含一个COOKIE生成的时间戳、COOKIE的生命期)和一个本端的密钥通过RFC2401描述的算法计算成一个32位的摘要
MAC(这种计算是不可逆的)。
必要信息和MAC组合成STATECOOKIE参数。
本端点传送地址。
最大入局流的数量。
最大出局流的数量。
(3)端点A收到INITACK后,首先停止INIT定时器离开COOKIE-WAIT状态,然后发送COOKIEECHO数据块,将收到INITACK数据块中的STATECOOKIE参数原封带回。
最后端点A启动COOKIE定时器并进入COOKIE-ECHOED状态。
(4)端点B收到COOKIEECHO^据块后,进行COOK旧佥证。
将STATECOOKIE中的TCB
部分和本端密钥根据RFC2401的MAC算法进行计算,得出的MAC和STATECOOKIE中携带
的MAC进行比较。
如果不同则丢弃这个消息;女口果相同,则取出TCB部分的时间戳,和当
前时间比较,看时间是否已经超过了COOKIE的生命期。
如果是,同样丢弃。
否则根据TCB
中的信息建立一个和端A的偶联。
端点B将状态迁入ESTABLISHED并发出COOKIEACK数据块。
端点B向SCTP用户发送SCOMMUNCIATIONI通知。
(5)端点A向端点B发送一个DATA数据块,启动T3-RTS定时器。
DATA数据块中必须带有如下参数:
TSNDATA数据块的初始TSN
流标识符(StreamIdentifier):
用户数据属于的流,假设流标识符为0。
流顺序码(StreamSequeneeNumber):
所在流中的用户数据的顺序号码。
该字段从0到
65535。
用户数据(UserData):
携带用户数据净荷。
(6)端点B收到DATA数据块后,返回SACK数据块。
SACK数据块中必须带有如下参数:
累积证实TSN标签(CumulativeTSNAck):
端点A的初始TSM
间隔块(GapAckBlock):
此值为0。
端点A收到SACK数据块后,停止T3-RTX定时器。
(7)端点B向端点A发送第一个DATA数据块。
DATA数据块中必须带有如下参数:
TSN端点B发出DATA数据块的初始TSM
流标识符(StreamIdentifier):
用户数据属于的流,假设流标识符为0。
流顺序码(StreamSequeneeNumber):
所在流中的用户数据的顺序号码。
假设流顺序
码为0。
用户数据(UserData):
携带用户数据净荷。
(8)端点B向端点A发送第二个DATA数据块。
DATA数据块中必须带有如下参数:
TSN端点B发出DATA数据块的初始TSN+1。
流标识符(StreamIdentifier):
用户数据属于的流,假设流标识符为0。
流顺序码(StreamSequeneeNumber):
所在流中的用户数据的顺序号码。
此时流顺序
码为1。
用户数据(UserData):
携带用户数据净荷。
(9)端点A收到DATA数据块后,返回SACK数据块。
SACK数据块中必须带有如下参数:
累积证实TSN标签(CumulativeTSNAck):
端点B的初始TSM
间隔块(GapAckBlock):
此值为0。
2偶联关闭流程
一个端点退出服务时,需要停止它的偶联。
偶联的停止使用两种流程:
偶联的中止流
程(非正常关闭)和偶联的正常关闭流程。
偶联的中止(非正常关闭)可以在任何未完成
期间进行,偶联的两端都舍弃数据并且不提交到对端。
此种方法不考虑数据的安全。
偶联
的中止步骤比较简单:
发起端点向对端端点发送ABORT数据块,发送的SCTP分组中必须填上对端端点的验证标签,而且不在ABORT数据块中捆绑任何DATA数据;接收端点收到
ABORT数据块后,进行验证标签的检查。
如果验证标签与本端验证标签相同,接收端点从记录上清除该偶联,并向SCTP用户报告偶联的停止。
偶联的正常关闭:
任何一个端点执行正常关闭程序时,偶联的两端将停止接受从其SCTP
用户发来的新数据,并且在发送或接收到SHUTDOW数据块时,把分组中的数据递交给SCTP用户。
偶联的关闭可以保证所有两端的未发送、发送未证实数据得到发送和证实后再终止
偶联。
(HSHUTDOWN
|2)SHUTDOWNACK
(3)SHUTDOWNCOMPLETE
图2偶联正常关闭消息交互图
偶联的正常关闭步骤如下:
⑴偶联关闭发起端点A的SCTP用户向SCTP发送请求SHUTDOW原因。
SCTP偶联从ESTABLISHED犬态迁入SHUTDOWN-PENDING态。
在这个状态,SCTP不接受SCTP用户在这个偶联上的任何数据发送请求。
同时等待端点A所有发送未证实的数据得到端点B的
证实。
当所有端点A发送未证实数据得到证实,则向端点B发送SHUTDOW数据块。
端点
A启动T2-shutdown定时器进入SHUTDOWN-SEN状态。
启动T2-shutdown定时器的目的是等待端点B发回的SHUTDOWN-ACK据块,如果定时器超时,则端点A必须重新发送SHUTDOW数据块。
(2)端点B收到SHUTDOW消息后,进入SHOUTDOWNRECEIVED状态,不再接收从SCTP用户发来的的新数据,并且检查数据块的累积TSNACK字段,验证所有未完成的DATA数据块已经被SHUTDOW的发送方接收。
当端点B所有未发送数据和发送未证实数据得到
发送和证实后,发送SHUTDOWNAC数据块并启动本端T2-SHUTDOW定时器,并且进入
SHUTDOWN-ACK-SENT态。
如果定时器超时了,端点B则重新发送SHUTDOWNCK数据块。
(3)端点A收到SHUTDOWACK消息后,停止T2-shutdown定时器,并且向端点B发送SHUTDOWNDMPLET数据块,并清除偶联的所有记录。
端点B收到SHUTDOWNOMPLETE^据块后,验证是否处于SHUTDOWN-ACK-SENT态。
如果不是处于该状态,则丢弃该数据块;如果端点处于SHUTDOWN-ACK-SEI状态,端点B则停止T2-shutdown定时器并清除偶联的所有记录,进入CLOSEDT态。