- 浏览: 131390 次
文章分类
最新评论
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 672在Unix 域套接字概述一节中介绍了什么是 U ... -
Unix 域套接字概述
2019-03-12 22:48 920Unix 域协议并不是一个实际的协议族,而是在 ... -
kqueue 接口
2019-03-06 00:47 632kqueue 接口是 ... -
辅助数据
2019-02-28 00:40 624辅助数据(a ... -
recv/send 和 recvmsg/sendmsg 函数
2019-01-22 00:40 1399recv 和 send ... -
inetd 守护进程介绍
2019-01-09 21:51 996在 4.3 BSD 系统之前,很多网络服务都是 ... -
主机名与 IP 地址的转换(续)
2018-12-25 00:37 908在主机名与 IP 地址的转换一节中提到的 ge ... -
主机名与 IP 地址的转换
2018-11-14 00:20 2193在网络编程中,尽管大部分情况下操作的都是 IP ... -
SCTP 事件通知
2018-02-08 03:49 865SCTP 提供了多种可用的通知,用户可经由这些通知追踪 ... -
SCTP 套接字选项
2018-02-04 09:35 1583在获取和设置套接 ... -
SCTP 套接字编程基础函数
2018-02-04 10:08 995SCTP 服务器可以使 ... -
UDP套接字编程基础
2018-01-14 10:37 519下图显示了使用 UDP 套接字编写客户/服务器程序时的 ... -
通用套接字选项
2018-01-02 00:46 504在获取和设置套接 ... -
获取和设置套接字选项
2017-12-29 08:21 406下面几种方法可用 ... -
I/O 复用之 poll 函数
2017-12-27 00:20 376poll 函数提供的功能与 select 类似,不过在 ... -
I/O 复用之select 函数
2017-12-12 00:32 476select 函数允许进 ... -
Unix 5 种 IO 模型概述
2017-11-19 01:44 272Unix 下有 5 种可用 ... -
套接字创建、连接和关闭函数
2017-08-13 17:16 603下图是一对 TCP 客户与服务器进程之间发生的一些典型 ... -
字节转换和填充函数
2017-08-06 01:09 394网络编程中,为保证发送协议栈和接收协议栈就如 32 位 ... -
IPv4 和 IPv6 的套接字地址结构
2017-08-01 21:03 696大多数套接字函数 ...
相关推荐
第9章 基本SCTP套接字编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第三部分 高级套接字编程 第12章 IPv4与IPv6的互操作性 第13章 守护进程和inetd超级服务器 第14章 高级I/O函数 第15...
第9章 基本SCTP套接字编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第三部分 第12章 IPv4与IPv6的互操作性 第13章 守护进程和inetd超级服务器 第14章 高级I/O函数 第15章 Unix域协议 第16章 ...
书中吸纳了近几年网络技术的发展,增添了ipv6、sctp协议和密钥管理套接字等内容,深入讨论了最新的关键标准、实现和技术。 书中的所有示例都是在unix系统上测试通过的真实的、可运行的代码,继承了stevens一直强调...
讨论了当今最关键的标准、实现和技术 讨论的新主题包括: POSIX Single UNIX Specification Version 3 IPv6 APIs(包括更新了的对IPv6/IPv4互操作性的指南) 新的SCTP传输协议 基于IPsec的密钥管理套接字 ...
讨论了当今最关键的标准、实现和技术 讨论的新主题包括: POSIX Single UNIX Specification Version 3 IPv6 APIs(包括更新了的对IPv6/IPv4互操作性的指南) 新的SCTP传输协议 基于IPsec的密钥管理套接字 ...
书中吸纳了近几年网络技术的发展,增添了ipv6、sctp协议和密钥管理套接字等内容,深入讨论了最新的关键标准、实现和技术。 书中的所有示例都是在unix系统上测试通过的真实的、可运行的代码,继承了stevens一直强调...
书中吸纳了近几年网络技术的发展,增添了IPv6、SCTP协议和密钥管理套接字等内容,深入讨论了最新的关键标准、实现和技术。 书中的所有示例都是在UNIX系统上测试通过的真实的、可运行的代码,继承了Stevens一直强调...
书中吸纳了近几年网络技术的发展,增添了ipv6、sctp协议和密钥管理套接字等内容,深入讨论了最新的关键标准、实现和技术。 书中的所有示例都是在unix系统上测试通过的真实的、可运行的代码,继承了stevens一直强调...
UNIX网络编程卷1:套接字联网API(第3版),含TCP,UDP,SCTP,IPv6,Unix域协议,广播,多播,密钥管理
UNIX网络编程卷1:套接字联网API(第3版),含TCP,UDP,SCTP,IPv6,Unix域协议,广播,多播,密钥管理
书中吸纳了近几年网络技术的发展,增添了IPv6、SCTP协议和密钥管理套接字等内容,深入讨论了最新的关键标准、实现和技术。 书中的所有示例都是在UNIX系统上测试通过的真实的、可运行的代码,继承了Stevens一直强调...
流控制传输协议(SCTP) 例子 参见example/sctp.go $ cd example $ go build $ # run example SCTP server $ . / example - server - port 1000 - ip 10.10 . 0.1 , 10.20 . 0.1 $ # run example SCTP client $ . /...
Rudoff执笔,根据近几年网络技术的发展,对上一版进行全面修订,增添了IPv6的更新过的信息、SCTP协议和密钥管理套接口的内容,删除了X/Open传输接口的内容。 本书全面深入地介绍了如何使用套接口API进行网络编程。...
SCTP和SCTP池的介绍和发展,PPT的介绍文档,中文介绍
SCTP_tutorial.ppt SCTP_tutorial.ppt SCTP_tutorial.ppt
sctp介绍,并附有代码 SCTP(STREAM CONTROL TRANSMISSION PROTOCOL 流控制传输协议)是IETF新定义的一个传输层transport layer协议(2000年)。是提供基于不可靠传输业务的协议之上的可靠的数据报传输协议。SCTP...
高可移植的C系统库:线程和同步原语,套接字(TCP,UDP,SCTP),IPv4和IPv6,IPC,散列函数(MD5,SHA-1,SHA-2,SHA-3,GOST),二进制树 ,AVL)等等。 本地代码性能。
SCTP 优化网络SCTP 优化网络SCTP 优化网络SCTP 优化网络SCTP 优化网络
SCTP协议实现.pdf
第9章 基本SCTP套接口编程 第10章 SCTP客户/服务器程序例子 第11章 名字与地址转换 第3部分 高级套接口编程? 第12章 IPv4与IPv6的互操作性 第13章 守护进程和inetd超级服务器? 第14章 高级I/O函数 第15章 Unix域协议...