SCTP 协议跟踪 简要介绍SCTP 协议(RFC2960)的跟踪, 分析其建立连接和断开连接的详细过程. SCTP 协议跟踪 参考文献: 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 - ...