04第4章SCTP协议.docx
- 文档编号:9916412
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:50
- 大小:446.21KB
04第4章SCTP协议.docx
《04第4章SCTP协议.docx》由会员分享,可在线阅读,更多相关《04第4章SCTP协议.docx(50页珍藏版)》请在冰豆网上搜索。
04第4章SCTP协议
第4章SCTP协议
4.1概述
在SCTP(StreamControlTransmissionProtocol,流控制传输协议)制定以前,在IP网上传输七号信令使用的是UDP、TCP协议。
UDP是一种无连接的传输协议,无法满足七号信令对传输质量的要求。
TCP协议是一种有连接的传输协议,可以信令的可靠传输,但是TCP协议具有行头阻塞、实时性差、支持多归属比较困难、易受拒绝服务攻击(Dos)的缺陷。
因此IETF(InternetEngineeringTaskForce)RFC2960制定了面向连接的基于分组的可靠传输协议SCTP协议。
SCTP对TCP的缺陷进行了完善,使得信令传输具有更高的可靠性,SCTP的设计包括适当的拥塞控制、防止泛滥和伪装攻击、更优的实时性能和多归属性支持,因此,SCTP成为SIGTRAN协议族中的传输协议。
SCTP被视为一个传输层协议,它的上层为SCTP用户应用,下层作为分组网络。
在SIGTRAN协议的应用中,SCTP上层用户是SCN信令的适配模块(如M2UA、M3UA),下层是IP网。
4.2SCTP相关术语
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偶联。
正因为如此,在MSOFTX3000中,偶联可以被看成是一条M2UA链路或M3UA链路。
●流(Stream)
流是SCTP协议的一个特色术语。
SCTP偶联中的流用来指示需要按顺序递交到高层协议的用户消息的序列,在同一个流中的消息需要按照其顺序进行递交。
严格地说,“流”就是一个SCTP偶联中,从一个端点到另一个端点的单向逻辑通道。
一个偶联是由多个单向的流组成的。
各个流之间相对独立,使用流ID进行标识,每个流可以单独发送数据而不受其他流的影响。
&说明:
●一个偶联中可以包含多个流,可用流的数量是在建立偶两时由双方端点协商决定,而一个流只能属于一个偶联。
同时,出局的流数量可以与入局流数量的取值不同。
●顺序提交的数据必须在一个流里面传输。
4.通路(Path)和首选通路(PrimaryPath)
●通路(Path)
通路是一个端点将SCTP分组发送到对端端点特定目的传送地址的路由。
如果分组发送到对端端点不同的目的传送地址时,不需要配置单独的通路。
●首选通路(PrimaryPath)
首选通路是在默认情况下,目的地址、源地址在SCTP分组中发到对端端点的通路。
如果可以使用多个目的地地址作为到一个端点的目的地址,则这个SCTP端点为多归属。
如果发出SCTP分组的端点属于多归属节点时,如果定义了目的地址、源地址,能够更好控制响应数据块返回的通路和数据包被发送的接口。
一个SCTP偶联的两个SCTP端点都可以配置多个IP地址,这样一个偶联的两个端点之间具有多条通路,这就是SCTP偶联的多地址性。
SCTP偶联的多地址性是SCTP与TCP最大的不同。
一个偶联可以包括多条通路,但只有一个首选通路。
如图4-1所示,MGC(如MSOFTX3000)一个端点包括两个传送地址(10.11.23.14:
2905和10.11.23.15:
2905),而SG一个端点也包括两个传送地址(10.11.23.16:
2904和10.11.23.17:
2904)。
图4-1SCTP双归属
此两个端点决定了一个偶联,该偶联包括4条通路(Path0、Path1、Path2、Path3)。
根据数据配置可以确定此4条通路的选择方式,如图4-2所示。
图中定义了4条通路,而且首选通路为Path0:
●Path0:
本端传送地址1(10.11.23.14:
2905)发送SCTP分组到对端传送地址1(10.11.23.16:
2904)
●Path1:
本端传送地址1(10.11.23.14:
2905)发送SCTP分组到对端传送地址2(10.11.23.17:
2904)
●Path2:
本端传送地址2(10.11.23.15:
2905)发送SCTP分组到对端传送地址1(10.11.23.16:
2904)
●Path3:
本端传送地址2(10.11.23.15:
2905)发送SCTP分组到对端传送地址2(10.11.23.17:
2904)
端点发送的SCTP工作原理为:
本端点传送地址A发送的SCTP包通过首选通路发送到对端端点。
当首选通路出现故障后,SCTP可以自动切换到其他备用通路上,优先切换对端端点的传送地址,再次切换本端端点的传送地址。
SCTP定义了心跳消息(HeartBeat)。
当某条通路空闲时,本端SCTP用户要求SCTP生成相应的心跳消息并通过该通路发送到对端端点,而对端端点必须立即发回对应的心跳确认消息。
这种机制被用来精确测量回路时延(RTT,RoundTripTime),而且可以随时监视偶联的可用情况和保持SCTP偶联的激活状态。
图4-2确定通路选择方式的数据配置
5.TSN和SSN
●TSN(TransmissionSequenceNumber,传输顺序号)
SCTP使用TSN机制实现数据的确认传输。
一个偶联的一端为本端发送的每个数据块顺序分配一个基于初始TSN的32位顺序号,以便对端收到时进行确认。
TSN是基于偶联进行维护的。
&说明:
在TCP协议中,数据的确认传输和顺序递交是通过TSN这一种机制实现的。
当发现TSN不连续时候,TCP将进行数据重传,直到TSN连续以后才将数据向TCP层的上层用户递交。
这实现机制导致TCP协议不能满足七号信令对于低传输时延的要求。
●SSN(StreamSequenceNumber,流顺序号)
SCTP为本端在这个流中发送的每个数据块顺序分配一个16位SSN,以便保证流内的顺序传递。
在偶联建立时,所有流中的SSN都是从0开始。
当SSN到达65535后,则接下来的SSN为0。
TSN和SSN的分配是相互独立的。
6.CWND(CongestionWindow,拥塞窗口)
SCTP也是一个滑动窗口协议,拥塞窗口是针对每个目的地址维护的,它会根据网络状况调节。
当目的地址的发送未证实消息长度超过其CWND时,端点将停止向这个地址发送数据。
7.RWND(ReceiveWindow,接收窗口)
RWND用来描述一个偶联对端的接收缓冲区大小。
偶联建立过程中,双方会交换彼此的初始RWND。
RWND会根据数据发送、证实的情况即时地变化。
RWND的大小限制了SCTP可以发送的数据的大小。
当RWND等于0时,SCTP还可以发送一个数据报,以便通过证实消息得知对方缓冲区的变化,直到达到CWND的限制。
8.TCB(TransmissionControlBlock,传输控制块)
TCB是一种内部数据结构,是一个SCTP端点为它与其他端点之间已经启动的每一个偶联生成的。
TCB包括端点的所有状态、操作信息,便于维护和管理相应的偶联。
4.3SCTP功能
如图4-3所示,SCTP的功能主要包括偶联的建立与关闭、流内消息的顺序递交、用户数据分段、证实和避免拥塞、数据块绑定、分组的有效性和通路管理等。
图4-1SCTP功能示意图
4.3.2偶联的建立和关闭
偶联的建立是由SCTP用户(如M2UA、M3UA等)发起请求来启动的。
而且建立过程相对于TCP连接而言比较复杂,是个“四次握手”过程,并用到了“COOKIE”的机制。
COOKIE是一个含有端点初始信息和加密信息的数据块,通信的双方在关联建立时需要处理并交换,从而增加协议的安全性,防止拒绝服务和伪装等潜在的攻击。
SCTP提供了对激活偶联的正常的关闭程序,它必须根据SCTP用户的请求来执行,当然SCTP也提供一种非正常(即中止)程序,中止程序的执行既可以根据SCTP用户的请求来启动,也可以由SCTP协议检查出差错来中止。
SCTP不支持半打开状态(即一端可以在另一端结束后继续发送数据)。
无论是哪个端点执行了关闭程序,偶联的两端都应停止接受从SCTP用户发来请求原语。
4.3.3流内消息顺序递交
SCTP提供数据报的顺序传递,顺序传递的数据报必须放在一个“流”中传递。
流是顺序传递的基石。
通过流,SCTP将数据的确认和传输的有序递交分成两种不同机制。
SCTP使用TSN机制实现了数据的确认传输,使用流号和SSN(流顺序号)则实现数据的有序递交。
当SCTP收到数据的SSN连续的时候,SCTP就可以将数据向SCTP用户递交,而不用等到数据的TSN号连续以后才向SCTP用户递交。
当一个流被闭塞时,期望的下一个连续的SCTP用户消息可以从另外的流上进行递交。
SCTP也提供非顺序递交的业务,接收到的用户消息可以使用这种方式立即递交到SCTP用户,而不需要保证其接收顺序。
4.3.4用户数据分段
SCTP通过对传送通路上最大PMTU(PathMaximumTransmissionUnit)的检测,实现在SCTP层将超大用户数据分片打包,避免在IP层的多次分片、重组,可以减少IP层的数据负担。
●在发送端,SCTP可以对大的用户数据报进行分片以确保SCTP数据报传递到低层时适合通路MTU(MaximumTransmissionUnit)。
●在接收端,SCTP将分片重组为完整的用户数据报,然后传递给SCTP用户。
4.3.5证实和避免拥塞
证实和重传是协议保证传输可靠性的策略,SCTP也一样。
证实机制是SCTP保证传输可靠性的基石。
避免拥塞沿袭了TCP的窗口机制,进行合适的流量控制。
●SCTP在将数据(数据分片或未分片的用户数据报)发送给底层之前顺序地为之分配一个发送顺序号(TSN)。
●TSN和SSN(流顺序号)是相互独立的,TSN用于保证传输的可靠性,SSN用于保证流内消息的顺序传递。
●TSN和SSN在功能上使可靠传递和顺序传递分开。
接收端证实所有收到的TSNs,即使其中有些尚未收到。
●包重发功能负责TSN的证实,还负责拥塞消除。
4.3.6消息块绑定
如果长度很短的用户数据被带上很大一个SCTP消息头,其传递效率会很低,因此,SCTP将几个用户数据绑定在一个SCTP报文里面传输,以提高带宽的利用率。
●SCTP分组由公共分组头和一个/多个信息块组成,信息块可以是用户数据,也可以是SCTP控制信息。
●SCTP用户能够可选地使用捆绑功能,决定是否将多个用户数据报捆绑在一个SCTP分组中。
●为提高效率,拥塞/重发时,捆绑功能可能仍被执行,即使用户已经禁止捆绑。
4.3.7分组的有效性
分组的有效性是SCTP提供无差错传输的基石。
SCTP分组的公共分组头包含一个验证标签(VerificationTag)和一个可选的32位校验码(Checksum)。
验证标签的值由偶联两端在偶联启动时选择。
如果收到的分组中如果没有期望的验证标签值,接收端将丢弃这个分组,以阻止攻击和失效的SCTP分组。
校验码由SCTP分组的发送方设置,以提供附加的保护,用来避免由网络造成的数据差错。
接收端将丢弃包含无效校验码的SCTP分组。
4.3.8通路管理
发送端的SCTP用户能够使用一组传送地址作为SCTP分组的目的地。
SCTP管理功能可以根据SCTP用户的指令和当前合格的目的地集合的可达性状态,为每个发送的SCTP分组选择一个目的地传送地址。
当其他分组业务量不能完全表明可达性时,通路管理功能可以通过心跳消息来监视到某个目的地地址的可达性,并当任何对端传送地址的可达性发生变化时,向SCTP用户提供指示。
通路功能也用来在偶联建立时,向对端报告合格的本端传送地址集合,并把从对端返回的传送地址报告给本地的SCTP用户。
在偶联建立时,为每个SCTP端点定义一个首选通路,用来正常情况下发送SCTP分组。
在接收端,通路管理功能在处理SCTP分组前,用来验证入局的SCTP分组属于的偶联是否存在。
4.4SCTP原语
SCTP通过接收高层协议(SCTP用户)发送的原语请求,为SCTP的用户提供服务。
同时SCTP可以根据不同事件向SCTP用户发送通知原语。
SCTP原语描述使用了如下格式:
原语名:
必备属性,【任选属性】
返回结果:
必备属性,【任选属性】
4.4.1SCTP用户向SCTP发送的请求原语
SCTP用户向SCTP发送的请求原语共有16种,含义如表4-1所示。
表4-1SCTP请求原语
原语名
功能
INITIALIZE
允许SCTP启动其内部的数据结构,并为建立操作环境分配所需的资源,一旦SCTP启动后,则高层协议在与其他SCTP端点之间通信时就不需要再调用此原语。
SCTP将向高层协议返回本地准备处理SCTP偶联的事件号(实例)。
ASSOCIATE
由高层启动一个到特定端点的偶联。
对端端点将按照该端点定义的传送地址的方式进行规定。
如果偶联事件尚未启动,则认为该原语是一个错误。
用来本地处理SCTP偶联的偶联ID,将作为返回结果用来返回偶联是否成功建立。
如果偶联建立不成功,则返回一个差错。
如果偶联成功,则返回结果中还应包含到对端的完整传送地址以及本端端点出局的流数量,同时还应从返回的目的地地址中选择一个传送地址,该传送地址将作为本地端点向对端端点发送SCTP分组的首选通路。
返回的“目的地传送地址列表”可以由SCTP用户用来改变首选通路或者是向一个特定传送地址强制发送一个SCTP分组。
返回结果:
偶联ID
SHUTDOWN
用来正常地关闭一个偶联,任何以在本地发送队列中的用户数据都将被递交到对端。
该偶联将在收到所有发送的SCTP分组的证实后停止。
返回结果用来指示是否成功关闭了该偶联。
如果成功关闭,则反馈一个成功关闭偶联编码;如果关闭失败,则返回一个差错编码。
ABORT
用来非正常关闭一个偶联,本地发送队列中的用户数据将被丢弃,并发送一个ABORT数据块到对端。
返回结果用来指示是否成功中止了该偶联。
如果中止成功,则返回一个已经中止的偶联编码。
如果中止失败,则返回一个差错编码。
SEND
SCTP用户使用该原语通知SCTP在指定流ID中向目的地发送地址发送数据。
返回结果用来指示是否成功发送了数据。
SETPRIMARY
高层协议使用该原语指示本地SCTP将指定的目的地传送地址作为发送分组的首选通路。
返回结果为结果编码,指示此操作是否成功执行。
如果规定的目的地传送地址没包含在ASSOCIATE请求原语或COMMUNCIATIONUP通知原语返回的“目的地传送地址列表”中,则返回一个差错。
RECEIVE
用来把在SCTP队列中的可用的用户消息读到由SCTP用户规定的缓冲区中。
所读消息的字节数将作为结果返回。
如果有可能根据特定的规定,也可以返回其他消息,如发送方的地址、收到消息的流ID、是否有消息可以进行恢复等。
对于顺序的消息,消息的流顺序号码(SSN)也可以被返回。
STATUS
用来要求SCTP返回一个包含以下信息的数据块:
偶联连接状态、目的地传送地址表、目的传送地址的可达性状态、当前的接收方窗口大小、当前的拥塞窗口大小、未确认的DATA数据块的数量、收到的DATA数据块的数量、首选通路、首选通路上最近收到的SRTT、首选通路的RTO。
返回结果为要求返回信息的状态。
CHANGEHEARTBEAT
高层协议用该原语指示本地端点允许或禁止向指定的目的地传送地址发送心跳消息。
返回结果用来指示该操作的执行情况。
当目的传送地址未空闲时,心跳程序也不执行。
REQUESTHERATBEAT
高层协议用该原语指示本地端点对指定偶联的特定目的地地址执行心跳程序。
返回结果用来指示传送给目的地址的HEARTBEART数据块是否成功。
GETSRTTREPORT
高层协议用该原语指示本地SCTP报告对给定偶联上规定的目的地传送地址的当前SRTT测量值。
返回结果是一个包含最近SRTT的毫秒值。
SETFRAILURETHRESHOLD
允许本地SCTP定制到给目的地传送地址的可达性故障检出的门限。
返回结果用来指示该操作是否成功。
SETPROTOCOLPARAMETERS
允许本地SCTP定制协议参数。
返回结果用来指示该操作是否成功。
RECEIVEUNSENTMESSAGE
高层协议用该原语指示本地SCTP将收到故障消息在高层协议缓存区储存。
返回结果为一个包含故障消息的字节数。
RECEIVEUNACKNOWLEDGEDMESSAGE
高层协议用该原语指示本地SCTP将收到的没有应答故障消息在高层协议缓存区储存。
返回结果为一个包含没有应答消息的字节数。
DESTROY
指示本地哪个SCTP事件号(实例)被破坏。
SCTP事件号由INITIALIZE原语生成的。
返回结果为是否成功。
4.4.2SCTP向SCTP用户发送的通知原语
SCTP向SCTP用户发送的通知原语共有8种,含义如表4-2所示。
表4-1SCTP通知原语
原语名
功能
DATAARRIVE
当一个用户消息被成功接收,并且准备向SCTP用户递交时,SCTP使用该原语通知高层用户。
如下信息会被传递:
-偶联ID:
本地处理的SCTP偶联
-流ID:
用来指示数据从哪个流上接收到的。
SENDFAILURE
当一个消息不能递交时,SCTP使用该原语通知SCTP用户。
如下信息会被传递:
-偶联ID:
本地处理的SCTP偶联
-数据恢复ID:
用来恢复未发送和未证实数据的标识。
-原语编码:
用来指示不能递交的原因,如长度过长、消息存活时间过期等。
NETWORKSTATUSCHANGE
当目的地传送地址被标为未激活(如SCTP检测出故障)或标记为激活时(SCTP检测出故障恢复),SCTP使用该原语通知SCTP用户。
如下信息会被传递:
-偶联:
本地处理的SCTP偶联
-目的地传送地址:
指示由于状态变化而影响的对端端点的目的地传送地址。
-新状态:
指示新的状态。
COMMUNCIATIONUP
SCTP用该原语通知SCTP用户,指示本地SCTP已经准备好发送或接收SCTP分组,或者时一个丢失通信的端点又已经恢复。
如下信息会被传递:
-偶联ID:
本地处理的SCTP偶联
-状态:
指示发生了哪种类型的事件
-目的地传送地址列表:
对端端点的传送地址列表
-出局流数量:
SCTP用户允许使用的最大的流数量
-入局流数量:
对端端点对该偶联所请求的流数量,此值可以与出局的流数量取值不同。
COMMUNICATIONLOST
当SCTP完全丢失了到某一个端点的通信时(用心跳消息),或者是检测出端点已经执行了操作,SCTP使用该原语通知SCTP用户。
如下信息会被传递:
-偶联ID:
本地处理的SCTP偶联
-状态:
指示发生了哪种类型的事件。
状态可以指示故障或者是响应SHUTDOWN或ABORT请求原语的中止事件。
-数据恢复ID:
用来指示恢复未发送或证实数据
-最后证实的TSN:
对对端端点最后证实的TSN
-最后发送的TSN:
发送到对端端点最后一个TSN
COMMUNICATIONERROR
当SCTP从对端端点收到了一个ERROR数据块,并且确定需要通知高层用户时,才使用该通知原语。
如下信息会被传递:
-偶联ID:
本地处理的SCTP偶联
-错误信息:
指示错误类型并且可以任选地包含一些从ERROR数据块中收到的附加信息。
RESTART
当SCTP检测出对端端点已经重新启动时,使用该原语通知SCTP用户。
偶联ID会被传递。
SHUTDOWNCOMPLETE
当本地SCTP已经完成了偶联关闭后,是使用此原语通知SCTP用户。
本地处理的SCTP偶联ID会被传递。
4.5SCTP协议消息
4.5.1消息结构
每个SCTP分组结构如所图4-4示。
图4-1SCTP分组结构
一个SCTP分组含了一个公共的分组头(CommonHeader)和若干数据块(Chunk),每个数据块中既可以包含控制信息,也可以包含用户数据。
除了INIT、INITACK和SHUTDOWNCOMPLETE数据块外,其他类型的多个数据块可以捆绑在一个SCTP分组中,以满足对MTU大小的要求。
当然,这些数据块也可以不与其他数据块捆绑在一个分组中。
如果一个用户消息不能放在一个SCTP分组中,这个消息可以被分成若干个数据块。
2.公共分组头的格式
SCTP公共分组头中包括了源端口号(SourcePortNumber)、目的端口号(DestinationPortNumber)、验证标签(VerificationTag)和校验码(Checksum)。
●源端口号(16bits)
源端口号识别SCTP发送端点的SCTP端口号。
接收方可以使用源端口号、源IP地址、目的端口号和目的IP地址标识该SCTP分组所属的偶联。
●目的端口号(16bits)
目的端口号为目的端点的SCTP端口号。
接收主机可以使用目的端口号将SCTP分组解复用到正确的端点或应用中。
●验证标签(32bits)
验证标签是偶联建立时,本端端点为这个偶联生成一个随机标识。
偶联建立过程中,双方会交换这个TAG,到了数据传递时,发送端必须在公共分组头中带上对端的这个TAG,以备校验。
●校验码(32bits)
SCTP通过对用户数据使用ADLER-32算法,计算出一个32位的校验码,带在数据报中,在接收端进行同样的运算,通过检查校验码是否相等来验证用户数据是否遭到破坏。
3.数据块字段的格式
数据块包括了块类型(ChunkType)、块标志位(ChunkFlags)、块长度(ChunkLength)和块值(ChunkValue)。
●块类型(8bits)
块类型定义在块值(ChunkValue)中消息所属的类型。
表4-3列出了主要的块类型。
表4-1SCTP数据块消息类型
ID
块类型
说明
0
DATA(净数据)
传输的用户数据块。
1
INIT
用于发起两个端点之间的SCTP偶联。
2
INITACK
用来确认SCTP偶联的发起消息(INIT)。
3
SACK
该数据块送至对端,以确认收到DATA块,并且通知对端DATA的接收顺序间隙。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 04 SCTP 协议