- 浏览: 315052 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
JQ_AK47:
...
Linux下直接发送以太包 -
winsen2009:
谢谢分享,如果能再来一个列子就更好了,刚接触看完还是不懂的用
UNPv1_r3读书笔记: SCTP编程
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
参考文献: RFC2960, 3309
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn
参考文献: RFC2960, 3309
1. SCTP(Stream Control Transmission Protocol)位于IP层与应用层之间,和TCP/UDP等并列,IP协议号:132,SCTP协议设计中考虑到了TCP协议SYN Flood攻击的问题,并进行相应的改进,目前在Linux2.6内核中已经有了SCTP的实现。 2. SCTP数据包包括通用数据头和一个到多个CHUNK,CHUNK可为数据CHUNK和控制CHUNK 3. 和TCP/UDP一样,SCTP也使用16位的端口以进行不同的应用 4. SCTP通用头 SCTP Common Header Format 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port Number | Destination Port Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Verification Tag | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 注意: SCTP的checksum是32位的,不象TCP/UDP是16位的,范围包括全部SCTP包,但不包括IP头,因此不会象TCP和UDP那样在 IPv4下和IPv6下不同.checksum计算方法在RFC2960中是用alder32算法,但发现有问题,在3309中进行了修改,使用和以太网校验类似的CRC32算法 5. CHUNK通用头 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Chunk Type | Chunk Flags | Chunk Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Chunk Value / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ID Value Chunk Type ----- ---------- 0 - Payload Data (DATA) 1 - Initiation (INIT) 2 - Initiation Acknowledgement (INIT ACK) 3 - Selective Acknowledgement (SACK) 4 - Heartbeat Request (HEARTBEAT) 5 - Heartbeat Acknowledgement (HEARTBEAT ACK) 6 - Abort (ABORT) 7 - Shutdown (SHUTDOWN) 8 - Shutdown Acknowledgement (SHUTDOWN ACK) 9 - Operation Error (ERROR) 10 - State Cookie (COOKIE ECHO) 11 - Cookie Acknowledgement (COOKIE ACK) 12 - Reserved for Explicit Congestion Notification Echo (ECNE) 13 - Reserved for Congestion Window Reduced (CWR) 14 - Shutdown Complete (SHUTDOWN COMPLETE) 15 to 62 - reserved by IETF 63 - IETF-defined Chunk Extensions 64 to 126 - reserved by IETF 127 - IETF-defined Chunk Extensions 128 to 190 - reserved by IETF 191 - IETF-defined Chunk Extensions 192 to 254 - reserved by IETF 255 - IETF-defined Chunk Extensions CHUNK是描述SCTP的数据结构,分控制CHUNK和数据CHUNK,控制CHUNK一般用于连接的建立和断开,数据CHUNK用于描述数据,因此数据CHUNK就类似于TCP包中的TCP标志位,除了INIT,INIT_ACK和SHUTDOWN_COMPLETE三种CHUNK必须单独发送外,其他类型的CHUNK可以捆绑在同一个包中发送以提高效率 6. 状态机 ----- -------- (frm any state) / / rcv ABORT [ABORT] rcv INIT | | | ---------- or ---------- --------------- | v v delete TCB snd ABORT generate Cookie +---------+ delete TCB snd INIT ACK ---| CLOSED | +---------+ / [ASSOCIATE] / --------------- | | create TCB | | snd INIT | | strt init timer rcv valid | | COOKIE ECHO | v (1) ---------------- | +------------+ create TCB | | COOKIE-WAIT| (2) snd COOKIE ACK | +------------+ | | | | rcv INIT ACK | | ----------------- | | snd COOKIE ECHO | | stop init timer | | strt cookie timer | v | +--------------+ | | COOKIE-ECHOED| (3) | +--------------+ | | | | rcv COOKIE ACK | | ----------------- | | stop cookie timer v v +---------------+ | ESTABLISHED | +---------------+ (from the ESTABLISHED state only) | | /--------+-------- [SHUTDOWN] / -------------------| | check outstanding | | DATA chunks | | v | +---------+ | |SHUTDOWN-| | rcv SHUTDOWN/check |PENDING | | outstanding DATA +---------+ | chunks | |------------------ No more outstanding | | ---------------------| | snd SHUTDOWN | | strt shutdown timer | | v v +---------+ +-----------+ (4) |SHUTDOWN-| | SHUTDOWN- | (5,6) |SENT | | RECEIVED | +---------+ +-----------+ | | (A) rcv SHUTDOWN ACK | | ----------------------| | stop shutdown timer | cv:SHUTDOWN | send SHUTDOWN COMPLETE| (B) | delete TCB | | | | No more outstanding | |----------------- | | send SHUTDOWN ACK (B)rcv SHUTDOWN | | strt shutdown timer ----------------------| | send SHUTDOWN ACK | | start shutdown timer | | move to SHUTDOWN- | | ACK-SENT | | | | v | | +-----------+ | | SHUTDOWN- | (7) | | ACK-SENT | | +----------+- | | (C)rcv SHUTDOWN COMPLETE | |----------------- | | stop shutdown timer | | delete TCB | | | | (D)rcv SHUTDOWN ACK | |-------------- | | stop shutdown timer | | send SHUTDOWN COMPLETE | | delete TCB | | +---------+ / -->| CLOSED |<--/ +---------+ Figure 3: State Transition Diagram of SCTP 7. 建立连接 发起方 接收方 ------------------------------------------------------------------------- 发送INIT----------------------------------> (状态变为COOKIE_WAIT) <---------------接收INIT,发送INIT_ACK,附带COOKIE (状态仍为CLOSED) 接收INIT_ACK,发送COOKIE_ECHO-----> (状态变为COOKIE_ECHOED) <---------------接收COOKIE_ECHO,发送COOKIE_ACK (状态转为ESTABLISHED) 接收COOKIE_ACK,状态转为ESTABLISHED 由于接收端是收到COOKIE_ECHO包后才认为连接合法,所以某种程度上可以避免类似SYN FLOOD的攻击 8. 正常断开连接 发起方 接收方 ----------------------------------------------------------------------------------------------- 发送SHUTDOWN---------------------> (状态变为SHUTDOWN_SENT) <---------------接收SHUTDOWN (状态变为SHUTDOWN_RECEIVED) <---------------发送SHUTDOWN_ACK (状态变为SHUTDOWN_ACK_SENT) 接收SHUTDOWN_ACK,发送SHUTDOWN_COMPLETE-----> (状态变为CLOSED) <---------------接收SHUTDOWN_COMPLETE (状态转为CLOSED) 同时断开,两边同时发SHUTDOWN,则都发SHUTDOWN_ACK,都转为SHUTDOWN_ACK_SENT状态,发送SHUTDOWN_COMPLETE断开连接 9. 异常断开 接收或发送了ABORT类型的CHUNK,立即断开 10. 控制CHUNK和TCP标志位的类比 CHUNK TCP FLAG ------------------------------------------------- INIT SYN INIT_ACK SYN ACK SACK ACK SHUTDOWN FIN ABORT RST DATA PSH 11. 状态跟踪 主要跟踪INIT,INIT_ACK, COOKIE_ECHO, COOKIE_ACK, SHUTDOWN, SHUTDOWN_ACK, SHUTDOWN_COMPLETE和ABORT这些控制CHUNK来改变连接状态 12. NAT 主要就是修改SCTP的端口,然后计算校验和,和TCP、UDP类似 13. 总结 SCTP的协议跟踪和NAT的实现可以参考TCP协议跟踪的处理,比较麻烦的一点就是各类CHUNK的识别,不象TCP标志那样简单明显,其他处理都比较类似。
发表评论
-
Linux内核中流量控制(24)
2011-01-10 16:33 2210本文档的Copyleft归yfydz所 ... -
Linux内核中流量控制(23)
2011-01-10 16:30 1492本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(22)
2011-01-10 16:29 1939本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(21)
2011-01-10 16:28 1357本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(20)
2011-01-10 16:27 1525本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(19)
2011-01-10 16:27 1979本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(18)
2011-01-10 16:26 1572Linux内核中流量控制(18) ... -
Linux内核中流量控制(17)
2011-01-10 16:25 1951本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(16)
2011-01-10 16:25 1807本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(15)
2011-01-10 16:24 1892本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(14)
2011-01-10 16:23 1961本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(13)
2011-01-10 16:22 2638本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(12)
2011-01-10 16:21 2110本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(11)
2011-01-10 16:21 3236本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(10)
2011-01-10 16:20 2007本文档的Copyleft归yfydz所 ... -
Linux内核中流量控制(9)
2011-01-10 16:19 1833本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(8)
2011-01-10 16:18 1498本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(7)
2011-01-10 16:18 2926本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(6)
2011-01-10 16:17 1495本文档的Copyleft归yfydz所有,使用GPL发布,可以 ... -
Linux内核中流量控制(5)
2011-01-10 16:16 1730本文档的Copyleft归yfydz所有,使用GPL发布,可以 ...
相关推荐
SCTP(STREAM CONTROL TRANSMISSION PROTOCOL 流控制传输协议)是IETF新定义的一个传输层transport layer协议(2000年)。是提供基于不可靠传输业务的协议之上的可靠的数据报传输协议。SCTP的设计用于通过IP网传输...
SCTP协议实现.pdf
在流控制传输协议 SCTP(Stream Control Transmission Protocol)制定以前,在 IP 网上传输七号信令使用的是 UDP 和 TCP 协议。UDP 是一种无连接的传输协议,无法满足七号信令对传输质量的要求。TCP 协议是一种有...
在传输层除了TCP和UDP的另外一个常用协议SCTP的协议文档。。。。。。。。。。。。。。。。。。。。。。。
SCTP协议分析与仿真研究
SCTP协议pcap数据包下载,支持抓包软件(如:wireshark)打开并学习SCTP协议报文解析。需要其他协议,请查看我发布的其他资源。
文档中简要的描述了linux内核中SCTP实现的基础以及相关代码流程,欢迎大家互相交流
RFC4960,官方原版pdf,方便阅读,真实可靠,实惠
SCTP....................................................................................................................................4-1 4.1 ..........................................................
详细描述了移动的SCTP协议标准以及相关的协议细节
sctp协议以太网报文,传输的http协议,可以用wireshark软件打开,适用于学习sctp报文解析,学习各种工业以太网协议可参考本人其他下载文件
华为写的SCTP协议的pdf格式文档,文档有目录,讲解的一目了然。对于新手很快就能理解。
非常有用的,里面详细介绍sctp协议的有关概念,有利于学习。
基于SCTP 协议的偶联管理系统设计。适合毕业论文设计
本标准是根据RFC 2960(2000)建议制定的,它规定了流控制传送协议(SCTP)所使用的消息格式编码和程序。SCTP协议主要用于在IP网中传送PSTN的信令消息,同时SCTP协议还可以用于其他的信息在IP网内传送。
SCTP Linux下的性能测试程序,服务器为Windows,脚本驱动,测试吞吐量,反应时间,用来进行SCTP协议栈的测试。
sctp是比tcp,udp,更安全的协议
向量网支持的SCTP协议实现方法,左振勇,梁满贵,随着网络技术和用户需求的发展,对于网络QoS、延时、丢包等网络性能提出了更高的要求,目前应用程序主要采用UDP和TCP协议,然而有些
SCTP协议的C#版本,SCTP协议是一种新的协议
流控制传送协议(SCTP)中文标准 流控制传送协议(SCTP)中文标准