兰州交通大学博文学院毕业设计(论文)
SCTP用户,而不需要保证其发送时的顺序。一条SCTP偶联所能支持的流的数量不得低于17个。
用户数据分段
在需要的时候,SCTP在发送用户消息时可以对消息进行分段,以确保发送到低层的SCTP分组长度符合通路MTU的要求。在接收方,需要把各分段重组成完整的消息后,再把消息递交给SCTP用户。
证实和避免拥塞
SCTP为每个用户数据分段或未分段的消息都分配一个传送顺序号码(TSN),TSN的分配是独立于流一级分配的流顺序号码。接收方对所有收到的TSN进行证实,尽管此时在接收序列中可能存在接收到的TSN不连续。采用这种方式,可以使可靠的递交功能可以与流的顺序递交相分离。
证实和拥塞避免功能可以在规定时间内没有收到证实的时候负责对分组的重发。分组的重发功能可以通过与TCP协议类似的拥塞避免程序来调节的。
数据块捆绑
SCTP分组在发送到低层时要包含一个公共的分组头,其后跟着一个或多个数据块。每个数据块中既可以包含用户数据,也可以包含SCTP控制信息。SCTP用户具有一个选项,可以请求是否把多于一个的用户消息捆绑在一个SCTP分组中进行发送。SCTP的这种数据块捆绑的功能可以在发送端生成一个完整的SCTP分组,在接收端负责分解该SCTP分组。
当拥塞出现的时候,尽管用户可能请求SCTP不必进行捆绑,但SCTP的实施仍旧可以执行捆绑功能。用户禁止进行捆绑只会影响到SCTP实施,即在传送SCTP分组之前产生一个较小的时延。 分组的有效性验证
每个SCTP公共分组头中都包含一个必备的验证标签字段和一个32比特长的校验字段。验证标签的值由偶联的端点在偶联启动时选择,如果收到的分组中未包含期望的验证标签值,则舍弃该分组。校验码则由SCTP分组的发送方设置,以提供附加的保护,用来避免由网络造成的数据差错。接收方对包含无效校验码的SCTP分组予以丢弃。
通路管理
发送方的SCTP用户能够使用一组传送地址作为SCTP分组的目的地。SCTP通路管理功能可以根据SCTP用户的指令和当前合格的目的地集合的可达性状态,为每个发送的SCTP分组选择一个目的地传送地址。当用分组业务量不能完全表明可达性时,通
12
兰州交通大学博文学院毕业设计(论文)
路管理功能可以通过心跳消息来监视到某个目的地地址的可达性,并当任何远端传送地址的可达性发生变化时向SCTP用户提供指示。通路管理功能也用来在偶联建立时,向远端报告合格的本地传送地址集合,并且把从远端返回的传送地址报告给本地的SCTP用户。在偶联建立后,需要为每个SCTP端点都定义一个首选通路,用来在正常情况下发送SCTP分组。在接收端,通路管理功能在处理SCTP分组前,用来验证入局的SCTP分组属于的偶联的是否存在。 3.SCTP分组的格式
SCTP分组由公共的分组头和若干数据块组成,每个数据块中既可以包含控制信息,也可以包含用户数据。除了个别数据块外,其他类型的多个数据块可以捆绑在一个SCTP分组中,当然必须要满足偶联对MTU的要求。当然这些数据块也可以不与其它数据块捆绑在一个分组中。如果一个用户消息不能放在一个SCTP分组中,则这个消息可以被分成若干个数据块。
SCTP分组的格式如图所示:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 公共的分组头 数据块#1 .... 数据块#11 图4一3 SCTP分组的格式 图3-3 SCTP分组的格式 SCTP公共分组头字段的格式如图所示: 2 3 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 起源端口号 目的地端口号 分组有效性端口号
校验码 图3-4 SCTP公共分组头字段的格式
13
兰州交通大学博文学院毕业设计(论文)
SCTP公共分组头的各字段含义如下所述:
起源端口号(16比特的无符号整数):该端口号用来识别SCTP发送方的端口号码,接收方使用起源端口号和起源IP地址,以及目的地端口号和可能的目的地IP地址来识别属于某个偶联的分组。
目的端口号(16比特的无符号整数):该SCTP端口号用来确定分组的去向。接收方主机将利用该端口号把SCTP分组解复用到正确的接收端点或应用。验证标签(32比特的无符号整数):接收到分组的接收方使用验证标签来判别发送方的这个SCTP分组的有效性。在发送方该验证标签需要设置为在偶联启动阶段中从对端点收到的启动标签中的值。
4.SCTP的程序
SCTP的程序括一些各节描述的内容:偶联的建立、数据的传递、拥塞控制、故障管理偶联关闭等5个部分的内容。此外在SCTP的程序中规定了一些安全性的内容。
偶联的建立程序
为了简化程序描述,对于以下偶联的建立程序,使用SCTP端点A和SCTP端点Z来进行描述,其中假定SCTP端点A试图与SCTP端点Z建立偶联。
从SCTP端点A向SCTP端点Z能传送第一个用户数据块之前,两个端点必须完成启动程序,以建立它们之间的SCTP偶联。
端点的SCTP用户应使用连接(ASSOCIATE)原语来请求来启动到另一个SCTP端点的偶联。
从SCTP用户的观点来看,可以在没有发起的ASSOCIATE原语的情况下,SCTP偶联可以隐含地打开,通过启动端点发送第一个用户数据到目的地端点的方式来实现。启动SCTP将使用初始确认字符(INIT ACK)中所有必备和任选参数的缺省值。一旦偶联建立起来,在两端就打开了用于数据传送的单向流。
偶联的正常建立
启动程序包括以下步骤(假定SCTP端点A试图与SCTP端点Z建立偶联,且Z接受了新的偶联):
1)“A”首先向“Z”发送一个初始(INIT)数据块。在INIT数据块中,“A”必须在启动标签字段里提供它的验证标签(Tag_A)。Tag_A应当是1到4294967295的中的一个随机数。A在发送了INIT后,启动Tl一init定时器并进入识别等待(COOKIE一WAIT)状态。
2)“Z”在收到INIT数据块后应立即用初始确认字符( INITACK)数据块响应。
14
兰州交通大学博文学院毕业设计(论文)
INITACK数据块中的目的地IP地址必须设置成 INITACK数据块响应的那个INIT数据块的起源IP地址。在这个响应数据块中,除了填写其它参数外,“Z”必须将验证标签字段置成Tag_A,将它自己的启动标签字段置成Tag_Z。
注:在发出带有状态鉴定(COOKIE)参数的INIT ACK后,Z不分配任何资源,也不为新偶联保持任何状态。
3)根据从“Z”收到的 INIT ACK,“A”需要停止T1一init定时器并离开COOKIE一WAIT状态。然后“A”会把从 INIT ACK数据块收到的状态COOKIE在识别回应(COOKIE ECHOED)数据块中发送,A启动T1一COOKIE定时器并进入COOKIE一ECHOED状态。
注:COOKIE ECHO数据块能够被与任何出局未决的数据(DATA)数据块捆绑在一个分组中,但 COOKIE ECHO必须是分组里的第一个数据块。除非收到返回 COOKIE ACK,否则发送者不能给对端发送其它分组。
4)根据收到的 COOKIE ECHO数据块,端点“Z”创建任务控制程序段(TCB)后,转移至确立(ESTABLISH)状态,然后用一个 COOKIEACK数据块响应。一个 COOKIE ACK数据块可以与任何未决的DATA数据块(和/或SACK数据块)捆绑在一起,但是 COOKIE ACK数据块必须是分组中的第一个数据块。在接收到的有效 COOKIE ECHO数据块,“Z”可以向SCTP用户发送开始通讯(COMMUNICATION UP)通知。
5)根据收到的 COOKIEACK,端点“A”会从COOKIE一ECHOED状态转移至ESTABLISHED状态,并停止Tl一Cookie定时器。“A”也可以用 COMMUNICATION UP通知ULP偶联建立成功。
INIT或 INIT ACK数据块不能与其它任何数据块捆绑在一起。它们必须是在携带它们的SCTP分组中出现的唯一的数据块。端点必须向给它发送INIT数据块的IP地址发送 INITACK。
如果端点收到INIT,INITA ACK或 COOKIE ECHO数据块,但由于在收到的INIT和 INITACK中缺少必备参数或者有无效的参数值,或缺少本地资源,端点必须用终止(ABORT)数据块响应。端点应在ABORT数据块中包括错误原因参数来说明中止的原因,例如丢失必备参数的类型等。在发出的包含ABORT数据块的SCTP分组里,验证标签字段必须被置为对端的启动标签值。
对重复的或不期望的INIT、INITACK、 COOKIEECHO和 COOKIEACK的处理 在偶联的存活期间(可以处于任何可能的状态),端点有可能从其对端点收到以下用于建立偶联的数据块(INIT、 INITACK、 COOKIEECHO和 COOKIEACK),接收方应
15
兰州交通大学博文学院毕业设计(论文)
当把这些用于建立的数据块当作重复数据块来处理,并按照本节规定的内容进行处理。
注:端点收到数据块只能是发自或来源于与这个端点有偶联的SCTP传送地址,因此端点把这类数据块当作当前偶联的一部分。以下的情况可能导致重复或不期望的数据块:
l) 对等端的宕机而没有被检测出,或自身重新启动,并发出了一个新的INIT数据块试图用来恢复偶联;
2) 两端同时尝试启动偶联;
3) 一个过期分组中的数据块,用于建立当前偶联或建立已不存在的偶联的; 4) 由攻击者生成的错误分组;
5)对端从未收到 COOKIEACK并且在重复发送 COOKIEECHO。 数据的传递程序
数据的传送只有在进入建立(ESTABLISHED),等待关闭(SHUTDOWN一PENDING),收到关闭(SHUTDOWN一RECEIVED)这三个状态下才会出现,唯一的例外就是在COOKIE一WAIT状态下,DATA数据块允许同一个出局的 COOKIEECHO数据块捆绑在一起发送。根据以下原则,DATA数据块只能在ESTABLISHEO,SHUTDOWN一PENDING,SHUTDOWN一SENT状态下被接收。其他状态下收到的DATA数据块都应当被丢弃。在ESTABLISHED,SHUTDOWN一PENOING,SHUTDOWN一RECEZVEN状态下必须要处理数据包,一个入局方向上的数据包可以在 COOKIE--ECHOED状态下处理。其他状态下收到的数据包都应当被丢弃。SCTP的接收方必须能够接收长度最小为 1500字节的SCTP分组,即SCTPINIT或 INITACK数据块中初始屯不应小于1500字节。为了提高传送效率,SCTP定义了一种机制对较小的用户消息进行捆绑,对于较大的用户消息进行分段。下图中描绘了用户消息通过SCTP的处理流程。数据的发送方是指发送DATA数据块的端点,而数据的接收方则是指接收DATA数据块,发送数据包的端点。
16