流控制传输协议(SCTP)
SCTP(Steam Control Transmission Protocol,流控制传输协议)是在 2007 年发布的 RFC4906 中定义的,但它首次被定义是在 2000 年。SCTP 设计用于通过 IP 网络传输公共交换电话网络(Public Switched Telephone Network)信令。
SCTP 初始化操作,方法 sctp_init() 可为各种结构分配内存,并在 IPv4 和 IPv6 中注册 SCTP,内核源码如下:
SCTP 数据包和数据块
每个 SCTP 数据包都有一个通用的 SCTP 报头,后面紧跟一个或多个块。块包含数据或 SCTP 控制信息。SCTP 报头和 SCTP 块头及块内核源码如下:
SCTP 关联
SCTP 关联而不是连接,连接指的是两个 IP 地址之间的通信,而关联是指的两个端点之间的通信,端点可能有多个 IP 地址,内核源码将 SCTP 关联由结构 sctp_association 表示如下:
建立 SCTP 关联,初始化操作是一个四次握手过程。
接收 SCTP 数据包
负责接收 SCTP 数据包主要处理程序的方法为 sctp_rcv(),源码处理如下:
发送 SCTP 数据包
写入用户空间 SCTP 套接字方法为 sctp_sendmsg(),源码处理如下:
数据报拥塞控制协议(DCCP)
DCCP 是一种不可靠的拥塞控制传输协议,他借鉴 UDP 和 TCP,并添加新功能,与 UDP 一样,他是面向消息且不可靠的,与 TCP 一样,他是面向连接的,且将使用三次握手来建立连接。每个 DCCP 数据包开头都是一个 DCCP 报头。DCCP 报头最短 12 字节。DCCP 使用 12-2020 字节的变长报头,具体长度取决于使用是否是短序列以及包含哪些 TLV 数据包选项。
评论