- 浏览: 142405 次
文章分类
最新评论
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)主线程继续在原来的套接字上以迭代方式处理来自任何剩余关联的消息。
一到多式 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)主线程继续在原来的套接字上以迭代方式处理来自任何剩余关联的消息。
发表评论
-
Unix 域套接字与描述符的传递
2019-03-27 23:59 717在Unix 域套接字概述一节中介绍了什么是 U ... -
Unix 域套接字概述
2019-03-12 22:48 982Unix 域协议并不是一个实际的协议族,而是在 ... -
kqueue 接口
2019-03-06 00:47 699kqueue 接口是 ... -
辅助数据
2019-02-28 00:40 693辅助数据(a ... -
recv/send 和 recvmsg/sendmsg 函数
2019-01-22 00:40 1585recv 和 send ... -
inetd 守护进程介绍
2019-01-09 21:51 1061在 4.3 BSD 系统之前,很多网络服务都是 ... -
主机名与 IP 地址的转换(续)
2018-12-25 00:37 960在主机名与 IP 地址的转换一节中提到的 ge ... -
主机名与 IP 地址的转换
2018-11-14 00:20 2335在网络编程中,尽管大部分情况下操作的都是 IP ... -
SCTP 事件通知
2018-02-08 03:49 996SCTP 提供了多种可用的通知,用户可经由这些通知追踪 ... -
SCTP 套接字选项
2018-02-04 09:35 1704在获取和设置套接 ... -
SCTP 套接字编程基础函数
2018-02-04 10:08 1062SCTP 服务器可以使 ... -
UDP套接字编程基础
2018-01-14 10:37 576下图显示了使用 UDP 套接字编写客户/服务器程序时的 ... -
通用套接字选项
2018-01-02 00:46 555在获取和设置套接 ... -
获取和设置套接字选项
2017-12-29 08:21 445下面几种方法可用 ... -
I/O 复用之 poll 函数
2017-12-27 00:20 429poll 函数提供的功能与 select 类似,不过在 ... -
I/O 复用之select 函数
2017-12-12 00:32 519select 函数允许进 ... -
Unix 5 种 IO 模型概述
2017-11-19 01:44 308Unix 下有 5 种可用 ... -
套接字创建、连接和关闭函数
2017-08-13 17:16 671下图是一对 TCP 客户与服务器进程之间发生的一些典型 ... -
字节转换和填充函数
2017-08-06 01:09 433网络编程中,为保证发送协议栈和接收协议栈就如 32 位 ... -
IPv4 和 IPv6 的套接字地址结构
2017-08-01 21:03 742大多数套接字函数 ...
相关推荐
从压缩包中的文件名"Elementary SCTP Sockets.pptx"来看,这可能是一个PowerPoint演示文稿,详细讲解了SCTP套接字的基本概念、工作原理、编程接口以及如何在实际项目中应用。该文稿可能包含了以下内容: 1. **SCTP...
在第二部分,读者将深入学习套接字编程的核心概念,包括套接字地址结构、值-后果参数、字节排序和字节控制函数。这部分还详细解释了TCP套接字编程的关键函数,如socket、connect、bind和listen,以及如何使用它们来...
与前一版相比,新版书做了重要更新,特别是删除了已不适用的事务TCP协议(T/TCP)内容,并增加介绍了IPv6、SCTP协议和密钥管理套接字等前沿网络技术,这使得内容更加贴近当前网络编程的实践需求。 在章节安排上,...
流式套接字提供可靠的数据传输服务,而数据报套接字则适用于对速度有更高要求的应用场景。 #### 2. 套接口API函数介绍 - **socket()**:创建一个新的套接字。 - **bind()**:将套接字与本地地址绑定。 - **listen()...
这一部分是网络编程的基石,涉及到了套接字编程中必须掌握的一些基本知识,比如套接字地址结构、值-结果参数、字节排序函数等。这些基础知识点为后续更深入的网络编程打下坚实的基础,也为网络编程的初学者构建了...
总结来说,Unix网络编程中,TCP协议允许服务器通过socket pair并发处理多个客户端连接,缓存管理对性能有直接影响,而套接字地址结构是实现网络通信的基础。理解这些核心概念对于编写高效的网络应用至关重要。
对于初学者来说,书中从一个简单的daytime客户端和服务器的例子出发,逐步讲解了如何使用各种套接字接口进行网络编程。通过这些实例,读者可以了解到协议独立性的重要性,以及编写网络程序时应当如何处理错误。 ...
### 网络编程基础知识详解 #### 一、网络采用分层的思想 网络通信通过将复杂的通信过程划分为多个层次来实现,每层专注于解决特定的功能,并为上一层提供服务,同时也依赖下一层的服务。 1. **每一层实现不同的...
在Unix环境下进行网络编程,主要涉及的是套接字(Socket)接口API,这是网络通信的基础。本课件可能涵盖从基础的TCP/IP概念到高级的SCTP协议的使用。 首先,TCP连接的TIME_WAIT状态是非常重要的。它确保了TCP全双工...
- **socket函数**:创建套接字的接口,是所有网络编程的基础。 - **connect函数**:客户端用于发起连接请求。 - **bind函数**:绑定套接字到特定端口。 - **listen函数**:服务器端监听客户端连接请求。 - **accept...
网络编程主要涉及套接字编程,包括TCP/IP套接字和UDP套接字,以及相关的数据打包和解包、错误处理和连接管理。C++的模板、类和面向对象特性使得代码更易于组织和重用,同时也能够实现更复杂的数据结构和算法。 然后...
- 网络编程,包括套接字编程、TCP/IP协议族的理解。 - RTSP、RTP/RTCP协议规范,这是核心内容,需要深入理解其工作原理。 - 多线程或多进程编程,以应对并发连接。 - 可能需要一些媒体编码知识,比如H.264视频编码和...
8. 套接字(Socket):套接字是网络编程中连接两个应用程序的接口,它由IP地址和端口号的组合构成,唯一标识一个进程。 9. 面向连接的并发服务器通常使用公认端口号进行服务,这些端口号在0-1023之间,由IANA...