`

SCTP 套接字编程基础概念

阅读更多
    SCTP 套接字分为一到一套接字和一到多套接字。提供一到一形式的目的是为了方便将现有 TCP 应用程序移植到 SCTP 上,其交互方式类似于 TCP 套接字,只是其建立连接时需要经过四路握手。一到一式 SCTP 套接字是一个类型为 SOCK_STREAM,协议为 IPPROTO_SCTP 的网际网套接字(即协议族为 AF_INET 或 AF_INET6),而一到多式 SCTP 套接字是一个类型为 SOCK_SEQPACKET,协议为 IPPROTO_SCTP 的网际网套接字。
    一到多式 SCTP 套接字可使服务器程序无需管理大量的套接字描述符,单个套接字描述符将代表多个关联,就像一个 UDP 套接字能够从多个客户接收消息那样。在一到多式套接字上,用于标识单个关联的是一个类型为 sctp_assoc_t 的关联标识,它通常是一个不透明的整数值,应用进程不应该使用不是由内核先前给予的任何关联标识。一到多式套接字的用户应该注意以下几点。
    (1)当一个客户关闭其关联时,其服务器也将自动关闭同一个关联,服务器主机内核中不再有该关联的状态。
    (2)可用于在四路握手的第三个或第四个分组中捎带用户数据的唯一办法就是使用一到多形式。
    (3)对于一个与它还没有关联存在的 IP 地址,任何以它为目的地的 sendto、sendmsg 或 sctp_sendmsg 都将尝试主动打开,以建立一个与该地址的新关联。这种行为的发生与执行分组发送的这个应用进程是否曾调用过 listen 函数以请求被动打开无关。
    (4)用户必须使用 sendto、sendmsg 或 sctp_sendmsg 这三个分组发送函数,而不能使用 send 或 write,除非已经使用 sctp_peeloff 函数从一个一到多式套接字剥离出一个一到一式套接字。
    (5)任何时候调用其中任何一个分组发送函数时,所用的目的地址是由系统在关联建立阶段选定的主目的地址,除非调用者在所提供的 sctp_sndrcvinfo 结构中设置了 MSG_ADDR_OVER 标志。为了提供这个结构,调用者必须使用伴随辅助数据的 sendmsg 或 sctp_sendmsg 函数。
    (6)关联事件(即众多 SCTP 通知之一)可能被启用,因此要是不希望收到这些事件,就得使用 SCTP_EVENTS 套接字选项显示禁止它们。默认情况下启用的唯一事件是 sctp_data_io_event,它给 recvmsg 和 sctp_recvmsg 调用提供辅助数据。该默认设置同时适用于一到一形式和一到多形式。
    下图是一到多套接字典型用法的时间线图:服务器启动后打开一个套接字,bind 一个地址,调用 listen 监听关联,然后就调用 sctp_recvmsg 阻塞等待第一个消息的到达。客户启动后也打开一个套接字,并调用 sctp_sendto,它导致隐式建立关联,而数据请求由四路握手的第三个分组捎带给服务器。服务器收到该请求后进行处理并向客户发回一个应答,客户收到应答后关闭其套接字,从而终止其上的关联,服务器循环回去接收下一个消息。

    本例子展示的是一个迭代服务器。在 SCTP 中,一个一到多套接字也能够结合使用 sctp_peeloff 函数以允许组合迭代服务器模型和并发服务器模型,它们的关系如下。
    (1)sctp_peeloff 函数用于从一个一到多套接字剥离出某个特定的关联(例如一个长期持续的会话),独自构成一个一到一式套接字。
    (2)剥离出的关联所在的一到一套接字随后就可以派送给它自己的线程或进程。
    (3)主线程继续在原来的套接字上以迭代方式处理来自任何剩余关联的消息。
  • 大小: 31.2 KB
分享到:
评论

相关推荐

    Elementary-SCTP-Sockets.zip_Elementary

    从压缩包中的文件名"Elementary SCTP Sockets.pptx"来看,这可能是一个PowerPoint演示文稿,详细讲解了SCTP套接字的基本概念、工作原理、编程接口以及如何在实际项目中应用。该文稿可能包含了以下内容: 1. **SCTP...

    UNIX网络编程卷1,套接字联网API(第3版)(中文版)(Stun[总结].pdf

    在第二部分,读者将深入学习套接字编程的核心概念,包括套接字地址结构、值-后果参数、字节排序和字节控制函数。这部分还详细解释了TCP套接字编程的关键函数,如socket、connect、bind和listen,以及如何使用它们来...

    UNIX网络编程卷1:套接字联网API(第3版)1

    与前一版相比,新版书做了重要更新,特别是删除了已不适用的事务TCP协议(T/TCP)内容,并增加介绍了IPv6、SCTP协议和密钥管理套接字等前沿网络技术,这使得内容更加贴近当前网络编程的实践需求。 在章节安排上,...

    UNIX网络编程(第一卷)套接口API和XOpen传输接口

    流式套接字提供可靠的数据传输服务,而数据报套接字则适用于对速度有更高要求的应用场景。 #### 2. 套接口API函数介绍 - **socket()**:创建一个新的套接字。 - **bind()**:将套接字与本地地址绑定。 - **listen()...

    unix网络编程 第一卷

    这一部分是网络编程的基石,涉及到了套接字编程中必须掌握的一些基本知识,比如套接字地址结构、值-结果参数、字节排序函数等。这些基础知识点为后续更深入的网络编程打下坚实的基础,也为网络编程的初学者构建了...

    Unix网络编程 3rd vol1 读书笔记.docx

    总结来说,Unix网络编程中,TCP协议允许服务器通过socket pair并发处理多个客户端连接,缓存管理对性能有直接影响,而套接字地址结构是实现网络通信的基础。理解这些核心概念对于编写高效的网络应用至关重要。

    Unix网络编程英文版PDF

    对于初学者来说,书中从一个简单的daytime客户端和服务器的例子出发,逐步讲解了如何使用各种套接字接口进行网络编程。通过这些实例,读者可以了解到协议独立性的重要性,以及编写网络程序时应当如何处理错误。 ...

    leve6网络编程学习笔记.pdf

    ### 网络编程基础知识详解 #### 一、网络采用分层的思想 网络通信通过将复杂的通信过程划分为多个层次来实现,每层专注于解决特定的功能,并为上一层提供服务,同时也依赖下一层的服务。 1. **每一层实现不同的...

    unix网络编程 江西师范大学课件

    在Unix环境下进行网络编程,主要涉及的是套接字(Socket)接口API,这是网络通信的基础。本课件可能涵盖从基础的TCP/IP概念到高级的SCTP协议的使用。 首先,TCP连接的TIME_WAIT状态是非常重要的。它确保了TCP全双工...

    UNIX网络编程卷1

    - **socket函数**:创建套接字的接口,是所有网络编程的基础。 - **connect函数**:客户端用于发起连接请求。 - **bind函数**:绑定套接字到特定端口。 - **listen函数**:服务器端监听客户端连接请求。 - **accept...

    C++ Network Programming(ACE)

    网络编程主要涉及套接字编程,包括TCP/IP套接字和UDP套接字,以及相关的数据打包和解包、错误处理和连接管理。C++的模板、类和面向对象特性使得代码更易于组织和重用,同时也能够实现更复杂的数据结构和算法。 然后...

    简单rtsp服务端实现

    - 网络编程,包括套接字编程、TCP/IP协议族的理解。 - RTSP、RTP/RTCP协议规范,这是核心内容,需要深入理解其工作原理。 - 多线程或多进程编程,以应对并发连接。 - 可能需要一些媒体编码知识,比如H.264视频编码和...

    网络安全试题及答案新版.pdf

    8. 套接字(Socket):套接字是网络编程中连接两个应用程序的接口,它由IP地址和端口号的组合构成,唯一标识一个进程。 9. 面向连接的并发服务器通常使用公认端口号进行服务,这些端口号在0-1023之间,由IANA...

Global site tag (gtag.js) - Google Analytics