SCTP原理与参数设置.docx
《SCTP原理与参数设置.docx》由会员分享,可在线阅读,更多相关《SCTP原理与参数设置.docx(43页珍藏版)》请在冰豆网上搜索。
![SCTP原理与参数设置.docx](https://file1.bdocx.com/fileroot1/2023-2/7/3d82cdde-758f-478a-86dc-99597e0d0f1a/3d82cdde-758f-478a-86dc-99597e0d0f1a1.gif)
SCTP原理与参数设置
SCTP原理与参数设置
专题研究
一、简言
1.SCTP协议简介
流操纵传输协议(SCTP)是一种靠得住的传输协议,位于无连接的包互换网络(如IP)之上,是作用在通信终端之间的提供面向连接的靠得住消息流传输效劳的一种协议。
SCTP是SIGTRAN协议族中的一员。
SIGTRAN(SignalingTransport,信令传输协议)支持通过IP网络传输传统电路互换网信令。
它支持电路互换网信令协议分层模型概念中的层间标准原语接口,从而保证已有的电路互换网信令应用能够未经修改地利用,同时,利用标准的IP传输协议作为传输底层,通过增加自身的功能来知足电路互换网信令的特殊传输要求。
SIGTRAN协议族负责信令网关和媒体网关操纵器间的通信,它有两个要紧功能:
适配和传输。
与之相对应,SIGTRAN协议族包括两层协议:
传输协议和适配协议。
由于TCP协议无法提供无序的靠得住传输、易收到拒绝效劳解决等局限性,传输层的另一协议UDP只能提供无连接不靠得住的连接效劳,这显然不能知足信令传输的要求,在那个基础上SCTP作为新的传输协议被提出。
它在协议栈的位置如以下图所示:
图1软互换协议栈架构
2.SCTP与其他传输协议的比较
SCTP作为传输层的协议,在必然程度上弥补了过于简单的UDP及过于刻板的TCP之间的缺点,这三个传输层协议的特性可归纳如下:
特性/服务
SCTP
TCP
UDP
全双工传输
是
是
是
面向连接
是
是
否
可靠数据传输
是
是
否
部分可靠性数据传输
可选
否
否
有序数据传输
是
是
否
无序数据传输
是
否
是
流和拥塞控制
是
是
否
明确阻塞通知
是
是
否
选择确认
是
可选
否
保存信息边界
是
否
是
最大路径传输单元(mtu)发现
是
是
否
应用数据分段
是
是
否
多流
是
否
否
多宿主
是
否
否
抵御泛洪和伪装攻击
是
否
无
半关闭的连接
否
是
无
表1SCTP、TCP及UDP的比较
二、SCTP术语
1.SCTP偶联
SCTP偶联事实上是在两个SCTP端点间的一个对应关系,它包括了两个SCTP端点、和包括验证标签和传送顺序号码等信息在内的协议状态信息,一个偶联能够由利用该偶联的SCTP端点用传送地址来唯一识别,在任何时候两个SCTP端点间都可不能有多于一个的偶联。
2.SCTP端点
SCTP端点是SCTP分组中逻辑的接收方或发送方,在一个多归属的主机上,一个SCTP端点能够由对端主机表示为SCTP分组能够发送到的一组合格的目的地传送地址,或是能够收到SCTP分组的一组合格的起始源传送地址。
一个SCTP端点利用的所有传送地址必需利用相同的端口号。
但能够利用多个IP地址。
SCTP端点利用的传送地址必需是唯一的。
3.流
流是从两个SCTP端点成立的一个单向逻辑通道,关于顺序递交业务,在那个通道中所有的用户消息都必需依照顺序进行递交。
4.传送地址
传送地址是指用网络层地址、传送层协议和传送层端口号概念的,当SCTP在IP上运行时,传送地址确实是由IP地址和SCTP端口号的组合来概念的,那个地址SCTP充当传送协议。
三、SCTP特性
SCTP源于Multi-NetworkDategramTransmissionProtocol(MDTP),它针对TCP的一些缺点和不足进行了改良,其特点要紧表此刻以下几个方面:
能够在耦联的一端或两头采纳multi-homing技术;
利用multi-streaming顺序传递或无序传递消息;
四次握手,抵御SYNflooding或masquerade解决;
提供选择确认方式;
能够为上层应用提供丰硕的操纵接口;
PartialReliablity部份靠得住性;
1.Multi-Homing
图2Multi-homing
如图2所示,主机A和主机B都拥有两个网络适配器的多宿主主机,能够通过量个地址进行访问,若是其中一个IP地址失效——可能由于接口或链路失效、或路由汇聚到了一条通路致使阻塞——目的主机仍然能通过另外一个接口来收到数据。
一个TCP连接在每一端利用一个IP地址,因此在图2中可能需要有4个TCP连接(A1,B1),(A1,B2),(A2,B1),(A2,B2)。
在SCTP中每两个端节点之间只有一个连接,可是能够包括多个地址,如此的连接称为偶联。
图中的主机A和B之间只需成立一个SCTP偶联({A1,A2},{B1,B2})。
这是SCTP与TCP相较更靠得住的地址。
目前SCTP的多宿主技术仅用来实现冗余,并无效来进行负载均衡。
2.Multi-streaming
Multi-Streaming是另一项SCTP的新特性,Stream(流)是包括在SCTP偶联中的单向逻辑数据流。
在偶联启动时,SCTP端节点协商需要成立的流数,在偶联的生命周期内还能够通过协商改变数量。
图3Multi-homing
Multi-streaming特性为SCTP提供了许多的灵活性,能够为上层应用提供丰硕的效劳。
四、SCTP功能
在软互换中,SCTP要紧用来在无连接的网络上传送信令消息,该协议用来在IP网上提供靠得住的数据传送协议。
SCTP具有以下功能:
在确认方式下,无过失、无重复地传送用户数据;
依照通路的MTU的限制,进行用户数据的分段;
在多个流上,保证用户消息的顺序递交;
将多个用户的消息复用到一个SCTP的数据块中。
利用SCTP偶联的机制(在偶联的一端或两头提供多归属的机制)来提供网络级的保证。
SCTP的设计中还包括了幸免拥塞的功能和幸免泛播和匿名解决的功能。
1.SCTP的结构
SCTP位于SCTP用户应用和无连接网络业务层之间,这种无连接的网络能够是IP网络或其他的网络。
SCTP是一个面向连接的协议,提供了在两个SCTP端点间的一组传送地址之间成立偶联的方式,通过成立好的偶联,SCTP端点能够发送SCTP分组。
一个SCTP偶联能够包括用多个可能的起源或目的地址的组合,这些组合包括在每一个端点的地址列表中。
SCTP用户
应用
SCTP层
IP层
SCTP用户
应用
SCTP层
IP层
一个或多个IP地址
SCTP端点A
SCTP端点B
网络传送
图4:
SCTP偶联的示意
2.SCTP的功能
SCTP的功能图如下:
SCTP用户应用
流内消息的顺序递交
用户数据分段
数据块捆绑
偶联的建立
和释放
证实和避免拥塞
分组有效性验证
通路管理
图5:
SCTP传送业务的功能图
SCTP通过接收高层协议(SCTP用户)发送的原语请求,为SCTP的用户提供效劳,而且依照不同事件由SCTP向SCTP用户发送通知。
五、SCTP原语
SCTP通过接收高层协议(SCTP用户)发送的原语请求,为SCTP的用户提供效劳,而且应当能够依照不同事件由SCTP向SCTP用户发送通知。
不同的SCTP实施能够具有不同的ULP(高层协议UpLevelProtocol保证所有的SCTP实施都能够支持相同的协议。
ULP原语规定了在SCTP必需支持的用于相互通信的大体功能。
原语描述大体魄式:
原语名(必备属性,[任选属性])
返回结果:
必备属性,[任选属性]
1.高层协议(ULP)向SCTP发送的请求原语
1.1INITIALIZE原语
原语格式:
INITIALIZE([本端端口],[本地合格的地址列表])
返回结果:
本地SCTP实例名
那个原语许诺SCTP启动其内部的数据结构,并为成立操作环境分派所需的资源,一旦SCTP启动后,那么高层协议在与其它SCTP端点直接通信时就不需要再挪用该原语。
SCTP将向高层协议返回一个本地SCTP实例名
必备属性:
无
任选属性:
以下属性类型能够通过原语进行传递。
-本地端口:
SCTP端口号,若是高层协议(ULP)希望规定;
-本地合格的地址列表:
本地SCTP端点应当绑定的地址列表。
若是未包括地址列表,缺省的,所有分派给主机的所有IP地址应当是作为本地端点(注)。
注:
若是实施支持那个任选属性,那么实施应当保证本端点发送的任何SCTP分组中应当包括一个在本地合格的地址列表中规定的IP地址。
1.2Associate原语
原语格式:
ASSOCIATE(本地SCTP实例名,目的地传送地址,出局的流数量)
返回结果:
偶联ID[,目的地传送地址列表][,出局的流数量]
该原语用来由高层启动一个到特定端点的偶联。
对端点依照在该端点概念的传送地址进行规定,若是本地SCTP实例未启动,那么以为该原语是一个过失。
用来进行本地处置SCTP偶联的偶联ID,作为返回结果用来返回偶联是不是成功成立。
若是偶联成立不成功,那么返回一个过失。
若是偶联成功成立,那么返回结果中还应包括到对端的完整的传送地址列表和本端点的出局的流数量,同时还应从返回的目的地地址当选择一个传送地址作为本地端点向对端发送SCTP分组的首选通路。
返回的“目的地传送地址列表”能够由高层协议用来改变首选通路,或是向一个特定传送地址强制发送一个分组。
注:
若是ASSOCIATE原语用作模块化的功能挪用,那么偶联成功成立后,ASSOCIATE原语还能够返回除偶联ID之外的其他偶联参数;若是ASSOCIATE原语是作为一个非模块化的功能挪用,那么应当只返回偶联ID,其他偶联参数应当用COMMUNICATIONUP进行通知。
必备属性:
-本地SCTP实例名:
从INITIALIZE操作中取得;
-目的地传送地址:
规定了成立的偶联的对端点的一个传送地址;
-出局的流数量:
高层协议希望向对端点开放的出局的流的数量。
任选属性:
无
1.3Shutdown原语
原语格式:
SHUTDOWN(偶联ID)
返回结果:
结果编码
该原语用来正常地关闭一个偶联,任何已在本地发送队列中的用户数据都将被递交到对端。
该偶联将在收到所有发送的SCTP分组的证明后停止。
返回结果用来指示是不是成功的关闭了该偶联,若是成功那么返回一个成功关闭偶联编码;若是试图关闭偶联失败,那么返回一个过失编码。
必备属性:
-偶联ID:
本地处置的SCTP偶联。
任选属性:
无
1.4ABORT原语
原语格式:
ABORT(偶联ID[,缘故编码])
返回结果:
结果编码
该原语用来非正常地关闭(中止)一个偶联,本地发送队列中的用户数据将被抛弃,并发送一个ABORT数据块到对端。
返回结果用来指示是不是成功的中止了该偶联,若是偶联中止成功,那么返回一个成功编码,若是试图中止偶联失败,那么返回一个过失编码。
必备属性:
-偶联ID:
本地处置的SCTP偶联。
任选属性:
-缘故编码:
传递给对端的中止缘故。
1.5Send原语
原语格式:
SEND(偶联ID,缓冲区地址,字节计数[,上下文][,流ID][,存活时刻]
[,目的地传送地址][,无序标志][,无绑定标志][,净荷协议ID])
返回结果:
结果编码
SCTP用户利用该原语通知SCTP发送数据,返回结果用来指示是不是成功的发送了数据。
这是通过SCTP发送用户数据的要紧方式
必备属性:
-偶联ID:
本地处置的SCTP偶联;
-缓冲区地址:
需要发送的用户消息存储的位置;
-字节计数:
用户数据的字节数。
任选属性:
-上下文:
一个任选的32比特整数,若是那个用户消息传送失败,那么在向高层协议通知发送失败时携带;
-流ID:
用来指示数据需要在哪个流上发送,若是未规定,那么缺省以为流ID为0;
-存活时刻:
规定用户数据的存活时刻,用户数据不该在存活时刻以后由SCTP发送。
那个参数能够幸免传送一个过时的用户消息,若是用户数据不能在存活时刻内启动传送(即通过SCTP的SEND原语发送到目的地),那么SCTP应当通知高层用户。
若是SCTP已经尝试在存活时刻超时前传送数据块,那么用户数据就能够够以为是被发送了。
注:
为了更好的支持数据块的存活时刻选项,发送方能够暂停给一个出局的DATA数据块分派TSN号码。
为了简化实施,一旦TSN号码由发送方分派,那么以为那个DATA数据块已经被发送,而且不受那个DATA数据块的存活时刻选项的限制了。
-目的地传送地址:
规定了分组要传送到已成立的偶联的对端点的一个传送地址,只要可能,SCTP将利用那个目的地传送地址来发送分组,而不利用当前的首选通路;
-无序的标志:
若是那个标志存在,那么指示用户许诺把数据依照无序的方式递交给对端(即:
携带那个那个消息的所有DATA数据块的U标志位设置为1);
-无绑定标志:
指示SCTP不要把那个用户数据同其他出局的DATA数据块捆绑在一个SCTP分组中。
当网络拥塞时,SCTP能够不考虑那个标志位是不是存在而直接进行捆绑;
-净荷协议ID:
一个32比特的无符号整数,它用来指示被传送到对端的净荷协议数据的类型,那个值由SCTP作为透明的数据进行传递。
1.6SetPrimary原语
原语格式:
SETPRIMARY(偶联ID,目的地传送地址,[起源传送地址])
返回结果:
结果编码
高层协议用该原语指示本地SCTP把给定的目的地传送地址作为发送分组的首选通路。
该操作的返回结果用来指示那个操作是不是成功执行。
若是规定的目的地传送地址没包括在先前在associate原语或communicationup通知返回的“目的地传送地址列表”中,那么返回一个过失。
必备属性:
-偶联ID:
本地处置的SCTP偶联;
-目的地传送地址:
规定了分组要传送到已成立的偶联的对端点的一个传送地址,那个地址将作为尔后发送分组的首选地址,那个地址将修改本地SCTP地址保护的当前首选地址信息。
任选属性:
-起源传送地址:
一些实施能够许诺任选的把放在所有的出局IP数据报中的地址设置为缺省起源地址。
1.7Receive原语
原语格式:
RECEIVE(偶联ID,缓冲区地址,缓冲区容量[,流ID])
返回结果:
字节计数[,传送地址][,流ID][,流顺序号码][,部份标志位][,递交号码]
[,净荷协议ID]
该原语用来把在SCTP队列中的可用的用户消息读到由高层协议规定的缓冲区中。
所读消息的字节数将作为结果返回,若是有可能依照特定的实施,也能够返回其他信息,如发送方的地址、收到的消息的流ID,和是不是有消息能够进行恢复等,关于顺序的消息,他们的流顺序号码也能够被返回。
依如实施,若是在挪用那个原语时,队列中没有消息可用,那么能够返回一个这种情形的指示,或是先禁止执行该挪用进程,直到队列中有新消息可用为止。
必备属性:
-偶联ID:
本地处置的SCTP偶联;
-缓冲区地址:
高层协议指示的接收的用户消息存储的内存位置;
-缓冲区容量:
将要收到的数据的最大长度,以字节为单位。
任选属性:
-流ID:
用来指示接收到的数据所在的流;
-流顺序号码:
:
由对端SCTP发送方分派的流顺序号码;
-部份标志位:
若是返回的那个标志位设置为1,那么那个Receive原语中只包括了整个消息的一部份,若是那个标志位被设置,那么流ID和流顺序号码必需也包括在那个Receive原语中,若是那个标志位设置为0,那么表示对那个流顺序号码而言已经没有更多需要递交的内容;
-净荷协议ID:
一个32比特的无符号整数,它用来指示收到的对端的净荷协议数据的类型,那个值由SCTP作为透明的数据进行传递。
1.8Status原语
原语格式:
STATUS(偶联ID)
返回结果:
状态数据
该原语用来要求SCTP返回一个包括以下信息的数据块:
-偶联连接状态;
-目的地传送地址表;
-目的传送地址的可达性状态;
-当前的接收方窗口大小;
-当前的拥塞窗口大小;
-未确认的DATA数据块的数量;
-收到的DATA数据块的数量;
-首选通路;
-首选通路上最近收到的SRTT;
-首选通路的RTO;
其它目的地地址的SRTT和RTO等。
必备属性:
-偶联ID:
本地处置的SCTP偶联。
任选属性:
无
1.9ChangeHeartbeat原语
原语格式:
CHANGEHEARTBEAT(偶联ID,目的地传送地址,新状态[,周期])
返回结果:
结果编码
高层协议用该原语指示本地端点许诺或禁止向指定的目的地传送地址发送心跳消息。
返回缘故用来指示该操作的执行情形。
若是可能,当目的传送地址未空闲时,心跳程序也不执行。
必备属性:
-偶联ID:
本地处置的SCTP偶联;
-目的地传送地址:
规定了到偶联的对端点的一个传送地址;
-新状态:
用来指示对该目的地传送地址的心跳状态(许诺或禁止)。
任选属性:
-周期:
若是该参数存在,且许诺对端目的地传送地址进行心跳测试,那么用来指示心跳测试的频率,该参数的缺省值为设置值加上到目的地地址的RTO,那个参数对所有目的地起作用。
1.10RequestHeartBeat原语
原语格式:
REQUESTHEARTBEAT(偶联ID,目的地传送地址)
返回结果:
结果编码
高层协议用该原语指示本地端点对给定偶联的特定目的地传送地址执行心跳程序,返回结果用来指示传送给目的地地址的HEARTBEAT数据块是不是成功。
必备属性:
-偶联ID:
本地处置的SCTP偶联;
-目的地传送地址:
heartbeat消息需要发送去的偶联传送地址。
1.11GetSRTTReport原语
原语格式:
GETSRTTREPORT(偶联ID,目的地传送地址)
返回结果:
srtt的取值
高层协议用该原语指示本地SCTP报告对给定偶联上规定的目的地传送地址的当前SRTT测量值,返回结果应当是一个包括最近SRTT的毫秒值(整数)。
必备属性:
-偶联ID:
本地处置的SCTP偶联;
-目的地传送地址:
需要报告的SRTT测量的偶联传送地址。
1.12SetFailureThreshold原语
原语格式:
SETFAILURETHRESHOLD(偶联ID,目的地传送地址,故障门限)
返回结果:
结果编码
该原语许诺本地SCTP定制到给定目的地地址的可达性故障检出的门限“,返回结果用来指示该操作是不是成功。
必备属性:
-偶联ID:
本地处置的SCTP偶联;
-目的地传送地址:
设置故障检出门限的的偶联传送地址。
-故障门限:
对该目的地地址的参数的新取值。
1.13SetProtocolParameters原语
原语格式:
SETPROTOCOLPARAMETERS(偶联ID[,目的地传送地址,]协议参数列表)
返回结果:
结果编码
该原语许诺本地SCTP定制协议参数,返回结果用来指示该操作是不是成功
必备属性:
-偶联ID:
本地处置的SCTP偶联;
-协议参数列表:
SCTP用户希望定制的协议参数的名称和取值(如:
等)。
任选属性:
-目的地传送地址:
针对每一个目的地传送地址能够对相关的协议参数进行设置。
1.14Receiveunsentmessage原语
原语格式:
RECEIVE_UNSENT(数据恢复ID,缓冲区地址,缓冲区容量[,流ID][,流顺序号码][,部份标志位][,净荷协议ID]
必备属性:
-数据恢复ID:
在故障(failure)通知中传递给高层的标识;
-缓冲区地址:
高层协议指示的接收的消息存储的内存位置;
-缓冲区容量:
将要收到的数据的最大长度,以字节为单位。
任选属性:
-流ID:
那个返回值它被设置用来指示数据需要发送到哪个流;
-流顺序号码:
那个值返回用来指示与该消息相关的流顺序号码;
-部份标志位:
若是返回的那个标志位设置为1,那么那个Receive原语中只包括了整个消息的一部份,若是那个标志位被设置,那么流ID和流顺序号码必需也包括在那个Receive原语中,若是那个标志位设置为0,那么表示对那个流顺序号码而言已经没有更多需要递交的内容;
-净荷协议ID:
一个32比特的无符号整数,它用来指示收到的对端的净荷协议数据的类型,那个值由SCTP作为透明的数据进行传递。
1.15Receiveunacknowledgedmessage原语
原语格式:
RECEIVE_UNACKED(数据恢复ID,缓冲区地址,缓冲区容量[,流ID][,流顺序号码][,部份标志位][,净荷协议ID])
必备属性:
-数据恢复ID:
在故障(failure)通知中传递给高层的标识;
-缓冲区地址:
高层协议指示的接收的消息存储的内存位置;
-缓冲区容量:
将要收到的数据的最大长度,以字节为单位。
任选属性:
-流ID:
那个返回值它被设置用来指示数据需要发送到哪个流;
-流顺序号码:
那个值返回用来指示与该消息相关的流顺序号码;
-部份标志位:
若是返回的那个标志位设置为1,那么那个Receive原语中只包括了整个消息的一部份,若是那个标志位被设置,那么流ID和流顺序号码必需也包括在那个Receive原语中,若是那个标志位设置为0,那么表示对那个流顺序号码而言已经没有更多需要递交的内容;
-净荷协议ID:
一个32比特的无符号整数,它用来指示收到的对端的净荷协议数据的类型,那个值由SCTP作为透明的数据进行传递。
1.16Destroy原语
原语格式:
DESTROY(本地SCTP实例名)
必备属性:
-本地SCTP实例名:
那个值是在initialize原语中传递给应用的,它用来指示哪个SCTP实例要进行破坏。
2.SCTP向高层协议发送的通知原语
SCTP提供了一种由ULP异步处置信号的方式,当SCTP发一个信号给ULP处置时,也需要把特定的信息传递给ULP。
2.1DATAARRIVE通知
当一个用户消息被成功的接收,而且预备向高层递交时,SCTP将用该原语通知高层协议。
原语格式:
DATAARRIVE([,偶联ID][,流ID])
返回结果:
无
在该通知原语中能够包括以下任选属性:
-偶联ID:
本地处置的SCTP偶联;
-流ID:
用来指示数据是从哪个流上收到的。
2.2SENDFAILURE通知原语
当一个消息不能被递交时,SCTP将发送该原语通知高层协议。
原语格式:
SENDFAILURE([,偶联ID][,数据恢复ID][,缘故编码][,上下文])
返回结果:
无
在该通知原语中能够包括以下任选属性:
-偶联ID:
本地处置的SCTP偶联;
-数据恢复ID:
用来恢复未发送和未证明数据的标识;
-缘故编码:
用来指示故障的缘故,例如:
长度太长,消息存活时刻过时等;
-上下文-与该消息相关的任选信息。
2.3NETWORKSTATUSCHANGE通知原语
当目的地传送地址被标记为未激活时(例如,当SCTP检测出故障),或标记为激活时(当SCTP检出故障恢复),SCTP将用该原语通知高层协议。
原语格式:
NETWORKSTATUSCHANGE(偶联ID,目的地传送地址,新状态)
返回结果:
无
在该通