`

SCTP的建立和终止以及状态转换图

阅读更多
    与 TCP 一样,SCTP 也是面向连接的,因而也有关联的建立和终止的握手过程。
    建立一个 SCTP 连接时发生的情形如下:
    1、服务器必须准备好接受外来的连接。这通常通过调用 socket、bind 和 listen 这 3 个函数来完成,称为被动打开。
    2、客户通过调用 connect 或者发送一个隐式打开该连接的消息进行主动打开。这使得客户 SCTP 发送一个 INIT 消息,用以告诉服务器客户的 IP 地址清单、初始序列号、用于标识本关联中所有分组的起始标记、客户请求的外出流的数目以及能够支持的外来流的数目。
    3、服务器以一个 INIT ACK 消息确认客户的 INIT 消息,其中含有服务器的 IP 地址清单、初始序列号、起始标记、服务器请求的外出流的数目、服务器能够支持的外来流的数目以及一个数字签名过的状态 cookie。,其中包含了服务器用于确信本关联有效所需的所有状态,这样服务器的 SCTP 栈就不必保存所关联客户的有关信息。
    4、客户以一个 COOKIE ECHO 消息回射服务器的状态 cookie。该消息也可能在同一个分组中捆绑了用户数据。
    5、服务器以一个 COOKIE ACK 消息确认客户回射的 cookie 是正确的,连接建立成功。同样,该消息也可能捆绑了用户数据。
    本过程至少需要 4 个分组,故称为 SCTP 的四路握手(four-way handshake)。下图展示了这个过程:

    SCTP 的四路握手与 TCP 的三路握手的差别主要在于作为 SCTP 整体一部分的 cookie 的生成。INIT 承载一个验证标记 Ta 和一个初始序列号 J。在之后关联的有效期内,另一方发送的每个分组中必须出现该 Ta 标记。同样,对端发送的 INIT ACK 中承载的 Tz 标记之后也必须出现在本端发送的每个分组中。
    四路握手过程结束时,两端各自选择一个主目的地址,作为无网络故障发生时数据要发送到的默认目的地。
    在SCTP 中使用四路握手是为了避免某种形式的拒绝服务攻击。SCTP 使用 cookie 的四路握手定形了一种防护这种攻击的方法。TCP 的许多实现也使用类似的方法,但 TCP 中 cookie 状态必须编码到只有 32 位长的初始序列号中,而 SCTP 为此提供了一个任意长度的字段,并且要求实施基于加密的安全性以防护攻击。
    对于 SCTP 连接的终止,SCTP 不像 TCP 那样允许“半关闭”的关联。当一端关闭某个连接时,另一端必须停止发送新的数据。连接关闭请求的接收端发送完已经排队的数据(如果有的话)后,完成关联的关闭。下图展示了这一交换过程:

    SCTP 没有类似于 TCP 的 TIME_WAIT 状态,因为 SCTP 使用了验证标记。所有后续块都在捆绑它们的 SCTP 分组的公共首部标记了初始的 INIT 块和 INIT ACK 块中作为起始标记交换的验证标记。由来自旧连接的块通过所在的 SCTP 分组的公共首部间接携带的验证标记对于新连接来说是不正确的。因此,SCTP 通过放置验证标记值就避免了 TCP 在 TIME_WAIT 状态保持整个连接的做法。
    同 TCP 一样,SCTP 的连接和终止过程也可用状态转换图来说明。

    从一个状态转换到另一个状态是由 SCTP 规则基于当前状态及在该状态下所接收的块来规定的。举例来说,当某个应用进程在 CLOSED 状态下执行主动打开时,SCTP 将发送一个 INIT,且新的状态是 COOKIE-WAIT。如果该 SCTP 接着接收到一个 INIT ACK,它将发送一个 COOKIE ECHO,且新的状态是 COOKIE-ECHOED。若其随后又接收到一个 COOKIE ACK,它将转换成 ESTABLISHED 状态。该最终状态是绝大多数数据传送发生点的状态,尽管 DATA 块也可以由 COOKIE ECHO 块或 COOKIE ACK 块所在消息捆绑捎带。从 ESTABLISHED 状态引出的两个箭头处理连接的终止。如果某个应用进程在接收到一个 SHUTDOWN 之前调用 close(主动关闭),那就转换到 SHUTDOWN-PENDING 状态;否则,如果接收到一个 SHUTDOWN(被动关闭)
,那就切换到 SHUTDOWN-RECEIVED 状态。
    下图展示了 SCTP 连接建立、数据传输和连接终止 3 个阶段所发生的实际分组交换情况,以及每个端点所历经的 SCTP 状态。

    图中,客户在 COOKIE ECHO 块所在分组中捎带了它的第一个 DATA 块,服务器则在作为应答的 COOKIE ACK 块分组中捎带了数据。一般而言,当网络应用采用一到多接口式样时,COOKIE ECHO 通常都会捎带一个或多个 DATA 块。
    SCTP 分组中消息的单位称为块(chunk)。块是自描述的,包含一个块类型、若干个块标记和一个块长度。这样做方便了多个块的绑缚,只需要把它们简单地组合到一个 SCTP 外出消息即可。
  • 大小: 21.1 KB
  • 大小: 14.2 KB
  • 大小: 30.4 KB
  • 大小: 75.4 KB
分享到:
评论

相关推荐

    SCTP和SCTP池的发展

    ### SCTP和SCTP池的发展 #### 一、引言 随着互联网技术的不断进步和发展,对于网络传输协议的需求也在日益增长。流控制传输协议(SCTP)和可信服务器池(RSerPool)作为下一代互联网架构的重要组成部分,不仅在...

    SCTP协议.pdf

    数据块是SCTP协议消息的基本组成单位,端点通过维护参数来管理偶联和流的状态,这些参数影响SCTP协议的行为。 6. SCTP基本信令流程 基本信令流程涵盖偶联的建立和发送流程、偶联关闭流程等内容。偶联建立流程描述了...

    linux内核协议栈SCTP协议处理简析

    2. 协议状态机的转换:SCTP 协议状态机的转换是根据协议的状态和事件来确定的,例如从 CLOSED 状态到 COOKIE-WAIT 状态的转换。 3. 关联的建立和关闭:SCTP 协议的关联建立和关闭是通过 Chunk 的交换来实现的,例如...

    linux环境下sctp开源代码

    1. SCTP协议栈:这是核心部分,负责处理SCTP连接的建立、维护和关闭,以及数据的发送和接收。 2. 用户空间API:供应用程序调用的接口,如socket函数,用于创建、绑定、连接SCTP套接字。 3. 内核模块:这部分代码将...

    华为SCTP协议

    SCTP的功能涵盖了偶联的建立和关闭、流内消息顺序递交、用户数据分段、证实和避免拥塞、消息块绑定以及分组的有效性和通路管理等。特别是在偶联建立和关闭方面,SCTP提供了比TCP更为灵活的管理机制。比如,SCTP支持...

    SCTP协议介绍与应用

    流控制传输协议(SCTP)是互联网工程...总之,SCTP协议通过其独特的多宿主、多流特性,以及增强的安全性和可靠性,为传输层通信提供了新的解决方案,尤其是在需要高度稳定性和安全性的应用中,SCTP展现出了显著的优势。

    SCTP链路测试工具源码(lksctp-tools)

    2. SCTP的四次握手和拆链过程:与TCP的三次握手相比,SCTP的建立和关闭过程更为复杂。 3. 多宿主和多路径支持:SCTP允许一个关联有多个地址,可以在多个路径之间负载均衡和故障恢复。 4. SCTP的流控制和拥塞控制机制...

    SCTP协议官方原版

    - **关联的启动和关闭**:SCTP通过三次握手来建立连接,并通过四次挥手来终止连接,确保连接的建立和断开过程的安全可靠。 - **流内的有序数据传输**:允许用户指定消息在流中的传输顺序。 - **用户数据分片**:当...

    华为SCTP协议--高清发行版.pdf

    SCTP,全称为Stream Control Transmission Protocol,是互联网工程任务组(IETF)为了解决UDP的不可靠性和TCP的实时性不足以及多归属支持困难等问题而设计的一种面向连接的、可靠的传输协议。它在IP网络上特别适用于七...

    sctp.rar_SCTP ns2_ns2 example_sctp tcl_sctp tcl codes_sctp wire

    用户可以通过阅读和分析此脚本来学习SCTP在NS2中的实现细节,如建立和维护关联(association)、数据包的发送与接收、错误恢复机制(如部分确认PMTUD、Selective Acknowledgments SACK)以及多宿主和多路径传输等...

    linux 下sctp的开源代码

    6. **应用开发**:在掌握SCTP内核模块的基础上,开发者可以编写用户空间的应用程序,利用SCTP提供的服务,如建立和管理SCTP连接,处理数据传输等。 7. **性能优化**:通过分析SCTP协议栈的实现,开发者可以优化传输...

    Linux SCTP Overview

    本篇文章主要介绍了 Linux 下 SCTP(Stream Control Transmission Protocol)协议的基本概念、数据传输机制以及关联状态机等重要内容。 #### 基本概念 在介绍 SCTP 协议之前,首先需要了解一些基本概念。一个 SCTP...

    SCTP 优化网络

    通过使用验证标签和密钥,SCTP能够在建立连接时确认双方的身份,从而增强了安全性和可靠性。 ##### 4. 消息分帧(Message framing) 与TCP将数据视为连续的字节流不同,SCTP采用消息分帧机制,将数据封装成单独的...

    SCTP协议实现.pdf

    SCTP的实现主要分为八个部分:操作系统抽象层部分、分发层部分、数据包和事件处理部分、状态机部分、数据结构部分、应用程序接口部分、除错和错误处理部分、主函数部分。 SCTP的主要特点是支持多宿(multi-home)和...

    sctp源码(freebsd7.0)

    通过分析这些源文件,我们可以了解SCTP如何与IP层交互,如何处理数据包的接收和发送,以及如何维护内部状态机以确保协议的正确执行。这对于理解网络协议设计原理、优化性能或开发基于SCTP的应用程序都至关重要。 ...

    sctp.rar_Transmission_sctp_sctp programming

    5. 监听和处理SCTP事件,例如连接建立、关闭、错误和数据传递事件。 6. 关闭连接或清理资源,确保无内存泄漏和资源浪费。 在"传输_sctp_sctp编程"这个主题中,你需要深入理解SCTP协议的原理,熟悉Linux网络编程接口...

    sctp.rar_NS2 SCTP_sctp

    源代码可以用来理解和分析SCTP的工作机制,以及进行协议的改进和性能评估。 在NS-2中,SCTP仿真通常涉及创建仿真场景,配置不同的网络条件,如延迟、丢包率等,然后观察SCTP如何处理这些情况。"sctp有停等现象(近...

    SCTP协议分析与仿真研究.pdf

    SCTP通过“偶联”(Association)机制来建立和维护两端之间的连接。每个SCTP连接都包含一对或多对偶联,这些偶联负责数据的可靠传输。为了验证SCTP在多址主机环境下相较于TCP的优越性能,研究者使用NS2(Network ...

    sctp-transport.zip_sctp

    SCTP是TCP和UDP的补充,它结合了两者的优点,如TCP的可靠性、顺序传递和流量控制,以及UDP的灵活性和低开销。 在"transport.c"这个文件中,我们可以预期找到与SCTP传输相关的C语言实现。C语言是一种底层编程语言,...

Global site tag (gtag.js) - Google Analytics