`

UNPv1_r3读书笔记: SCTP编程

阅读更多
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
SCTP协议在UNP第2版中还未提及,是在第3版中新增加的,在第9、10、23章介绍SCTP。

SCTP就好象是TCP和UDP的综合体,既可以单播也能多播,而且连接建立过程使用4次握手而不是TCP的3次握手,在相当程度上防止了类似TCP中的syn flood的攻击方法。

SCTP是面向消息而不是面向连接的,而且是用关联(associate)代替连接的概念,关联即可以是一对一的,也可以是一对多的。 SCTP提供可靠性,排序和流量控制等功能,但不是象TCP那样严格防止数据丢失情况,而是允许丢失消息而不阻塞,这个特性使得SCTP更适合于多媒体数据的传输,本来SCTP最初就是为IP电话设计的。目前linux 2.6内核中已经增加了对SCTP协议的支持。

SCTP的套接口两类:一对一(类似TCP)和一对多(类似UDP)。

一对一方式的SCTP的编程基本和TCP类似,只是打开的socket是SCTP协议的流接口:
 socket(AF_INET, SOCK_SREAM, IPPROTO_SCTP)

然后客户端可以用connect()连接服务器, write(), read()读写,close()关闭套接口
服务器端用 bind()绑定端口,listen()监听,accept()接受连接,write()/read()读写,close()关闭,这和普通TCP程序是相同的。由于SCTP是面向消息的,因此这种情况下仍和UDP一样,一方发几个消息,对方就会收几个消息,而不是象TCP那样可能会进行数据合并。
注意SCTP不提供TCP那样的半关闭,每一方调用shutdown()后都会关闭SCTP关联而不是象TCP那样半连接。

一对多方式的SCTP编程和UDP类似,打开的是SCTP的有序分组接口:
 socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)
用的socket(), bin(), listen(), close()等函数和原来一样,但发送接收数据是用sctp_sendto(),sctp_sendmsg()和sctp_recvmsg()这些SCTP专用函数。

SCTP可用sctp_bindx()绑定到一组地址而不是单个或全部地址;用sctp_connectx()连接多个地址。

SCTP使用通知(notification)来跟踪关联的状态,通知也是通过recvmsg()或sctp_recvmsg()函数得到的,和网络数据混杂,函数返回的标志msg_flags中有标志表示是数据还是通知,这是和TCP、UDP编程不同的。

SCTP支持自动关闭功能,相当于TCP中的超时断开,当关联在任何方向都没有数据超过一定时间后自动关闭,这通过setsockopt()函数设置SCTP_AUTOCLOSE属性来实现。

SCTP在传输大数据时可能因为资源不够而采取部分抵送方式发送数据,接收方相应要检查相应接收标志以保证能正确完整接收。

SCTP可以无序发送数据, 在sctp_sendmsg()函数中设置MSG_UNORDERED标志即可,这时SCTP数据中不带序列号。

SCTP和TCP一样支持心跳保活机制,也有很多定时器检测关联是否失效。

SCTP最大的特点就是同时处理多个地址的通信的能力,TCP就只能是一对一,UDP虽然可以实现多播和广播,但那也是对某些地址赋予了多播或广播的属性,本质还是处理一个地址。
分享到:
评论
1 楼 winsen2009 2011-07-28  
谢谢分享,如果能再来一个列子就更好了,刚接触看完还是不懂的用

相关推荐

    unpv12e_dev:UNIX 网络编程,第 1 卷 2e 源

    《UNIX网络编程,第1卷 2e源》是一本深度探讨UNIX系统下网络编程的经典著作,由W. Richard Stevens撰写。这本书的核心内容是讲解如何使用C语言进行网络通信,涵盖了套接字API、TCP/IP协议族以及相关系统调用等关键...

    UNIX网络编程源码unpv13e

    《UNIX网络编程源码unpv13e》是学习UNIX系统下网络编程的重要参考资料,它包含了一整套的源代码示例,旨在帮助开发者深入理解socket编程、C/S(客户端/服务器)架构以及B/S(浏览器/服务器)架构。这份源码集由著名...

    unpv 网络编程.pdf+源码 linux unix

    《unpv网络编程.pdf》和配套源码是深入学习Linux/Unix系统下网络编程的宝贵资源。unpv,全称为“UNIX Network Programming Version”,是由著名软件工程师W. Richard Stevens编写的,旨在帮助开发者理解网络协议栈的...

    unix网络编程源代码:卷1:套接字联网API;unpv13e

    《Unix网络编程:卷1——套接字联网API》是著名计算机科学家W. Richard Stevens的经典之作,这本书深入浅出地讲解了Unix环境下的网络编程,是广大程序员和系统管理员学习网络编程的重要参考资料。源代码unpv13e的...

    unpv13e:UNIX网络编程卷1:通用联网API(第3版)源代码

    《UNIX网络编程卷1:通用联网API(第3版)》是网络编程领域的经典之作,由著名计算机科学家W. Richard Stevens撰写。这本书深入浅出地介绍了UNIX系统下的网络编程技术,包括TCP/IP协议栈、套接字接口以及相关API的...

    unpv13e:UNIX网络编程第三版

    unpv13e:UNIX网络编程第三版源码

    unpv13e.rar

    该压缩包中的"unpv13e"很可能代表《UNIX网络编程》第13版(Volume 1)的源代码和补充材料。这本书由W. Richard Stevens撰写,是UNIX系统编程的权威参考书之一,特别是关于网络编程的部分。书中涵盖了网络套接字API、...

    UNIX网络编程 第1卷(第3版):套接字联网API + 代码 中文 PDF

    《UNIX网络编程 第1卷(第3版):套接字联网API》是网络编程领域的一本经典之作,由W. Richard Stevens撰写。这本书详细介绍了如何在UNIX系统中使用套接字API进行网络通信,是学习和理解网络编程的基础。 本书主要...

    unpv22e:UNIX网络编程卷(2)源码-源码网

    源码包"unpv22e-master"包含了书中各个章节的示例程序,这些程序涵盖了广泛的网络编程技术。通过对这些源码的研究,我们可以深入了解以下几个核心知识点: 1. **套接字API**:UNIX系统中的网络通信主要通过套接字...

    unpv13e.tar.gz2

    《UNIX网络编程详解——unpv13e.tar.gz2资源解析》 在计算机科学领域,尤其是在网络编程中,UNIX系统以其稳定性和强大的网络支持而备受赞誉。本文将深入探讨一个名为"unpv13e.tar.gz2"的压缩包文件,它包含了与UNIX...

    unpv13e.tar.gz

    这两个工具是UNIX Network Programming Volume 1 (UNPv1)的实验程序集,由著名的网络编程书籍作者W. Richard Stevens提供。它们主要用于帮助读者实践书中的网络编程概念,包括套接字编程、多线程、TCP/IP协议栈等。...

    unpv13e.zip

    "unpv13e"通常代表一个软件版本号或项目标识符,可能是一个网络编程相关的库,因为后缀"unp"在IT领域常用于“Unix Network Programming”或类似的网络编程资源。这个压缩包中包含了"error.c"文件,这是一个C语言源...

    UNIX网络编程_卷1_套接字联网API第3版源代码

    《UNIX网络编程_卷1_套接字联网API第3版源代码》是网络编程领域的一本经典之作,由著名计算机科学家W. Richard Stevens撰写。这本书深入浅出地讲解了如何在UNIX系统中使用套接字(Sockets)进行网络通信,涵盖了从...

    unpv22e-代码-unpv22e

    "unpv22e"是一个特定的编程代码库或项目的标识符,可能指的是一个开源软件项目或者课程的版本。在IT行业中,这种命名通常遵循一定的规范,比如将项目名和版本号结合在一起。"unpv22e"可能是该项目的第22个更新版本,...

    UNIX网络编程 卷1:套接字联网API源代码

    《UNIX网络编程 卷1:套接字联网API源代码》是网络编程领域的一本经典著作,主要关注于UNIX系统中的网络通信,特别是基于套接字的编程接口。这本书深入探讨了如何使用套接字API来实现跨网络的通信,为开发者提供了...

    unpv13e-master.zip

    1. **UNIX网络编程基础** UNIX网络编程主要涉及socket API,这是在UNIX系统中进行网络通信的标准接口。它提供了创建、连接、监听、接受和发送数据的一系列函数,如socket()、bind()、listen()、connect()、accept()...

    unix网络编程卷1和卷2源代码

    卷1主要涵盖套接字网络编程,卷2则深入探讨多线程、并发服务器、TCP/IP协议族等内容。提供的源代码是这两本书的重要补充,帮助读者理解和实践书中所讲述的概念。 在卷1中,读者会学习到以下核心知识点: 1. **套接...

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

    《UNIX网络编程卷1:套接字联网API(第3版)》是网络编程领域的一本经典著作,由W. Richard Stevens撰写。这本书深入浅出地介绍了如何在UNIX环境中使用套接字API进行网络通信。源代码是学习本书理论知识的重要实践...

Global site tag (gtag.js) - Google Analytics