1. IP 协议
1.1 IPv4 固定字段
字段名称 | 位数(比特) | 描述 |
---|---|---|
Version | 4 | IP版本号,固定为 4 (表示IPv4)。 |
IHL | 4 | 头部长度(以32位字为单位),最小值为 5 (对应20字节无选项)。 |
Type of Service | 8 | 服务类型(优先级、延迟、吞吐量等,现用DSCP/ECN替代)。 |
Total Length | 16 | 整个IP包的总长度(头部+数据),最大为 65535字节 。 |
Identification | 16 | 数据包唯一标识符,用于分片重组。 |
Flags | 3 | 分片标志: - 第1位:保留; - 第2位: DF (禁止分片);- 第3位: MF (更多分片)。 |
Fragment Offset | 13 | 分片偏移量(以8字节为单位),用于重组原始数据包。 |
Time to Live | 8 | 生存时间(TTL),每经过一个路由器减1,归零时丢弃。 |
Protocol | 8 | 上层协议类型(如 6 =TCP,17 =UDP)。 |
Header Checksum | 16 | 头部校验和,仅校验IP头部完整性。 |
Source Address | 32 | 源IPv4地址(4字节,如 192.168.1.1 )。 |
Destination Address | 32 | 目标IPv4地址(4字节,如 192.168.1.2 )。 |
1.2 IPv6 固定字段
字段名称 | 位数(比特) | 描述 |
---|---|---|
Version | 4 | IP版本号,固定为 6 (表示IPv6)。 |
Traffic Class | 8 | 流量类别(用于QoS优先级,类似IPv4的TOS,支持DSCP/ECN)。 |
Flow Label | 20 | 流标签(标识同一数据流的包,用于QoS或实时流量管理)。 |
Payload Length | 16 | 有效载荷长度(扩展头部+数据部分的总字节数,最大 65535字节 )。 |
Next Header | 8 | 下一个头部类型(类似IPv4的协议字段,或指向扩展头部类型)。 |
Hop Limit | 8 | 跳数限制(类似IPv4的TTL,每经过一个路由器减1,归零时丢弃)。 |
Source Address | 128 | 源IPv6地址(16字节,如 2001:db8::1 )。 |
Destination Address | 128 | 目标IPv6地址(16字节,如 2001:db8::2 )。 |
2. TCP协议
字段名称 | 位数(比特) | 描述 |
---|---|---|
Source Port | 16 | 源端口号(范围:0-65535)。 |
Destination Port | 16 | 目标端口号(范围:0-65535)。 |
Sequence Number | 32 | 序列号(标识数据段的顺序,用于重组和可靠性传输)。 |
Acknowledgment Number | 32 | 确认号(期望接收的下一个序列号,仅在 ACK 标志为1时有效)。 |
Data Offset | 4 | TCP头部长度(以32位字为单位),最小值为 5 (对应20字节无选项)。 |
Reserved | 4 | 保留位(必须设为 0 )。 |
Control Flags | 6 | 控制标志(1位/标志): - URG (紧急指针有效);- ACK (确认号有效);- PSH (接收方应立即推送数据);- RST (重置连接);- SYN (同步建立连接);- FIN (终止连接)。 |
Window Size | 16 | 接收窗口大小(流量控制,表示可接收的数据量)。 |
Checksum | 16 | 校验和(覆盖TCP头部、数据和伪头部)。 |
Urgent Pointer | 16 | 紧急指针(仅在 URG=1 时有效,指向紧急数据的末尾偏移量)。 |
3. UDP协议
字段名称 | 位数(比特) | 描述 |
---|---|---|
Source Port | 16 | 源端口号(范围:0-65535),可选(若未使用则置为 0 )。 |
Destination Port | 16 | 目标端口号(范围:0-65535)。 |
Length | 16 | UDP数据报总长度(头部 + 数据),最小为 8字节 (仅头部无数据)。 |
Checksum | 16 | 校验和(覆盖UDP头部、数据和伪头部,若未使用则置为 0 )。 |
4. SCTP协议
公共头部
字段名称 | 位数(比特) | 描述 |
---|---|---|
Source Port | 16 | 源端口号(范围:0-65535)。 |
Destination Port | 16 | 目标端口号(范围:0-65535)。 |
Verification Tag | 32 | 验证标签(用于关联数据包与连接)。 |
Checksum | 32 | 校验和(覆盖整个SCTP数据包)。 |
(1)DATA Chunk(正常数据,类型 0x00)
字段名称 | 位数(比特) | 描述 |
---|---|---|
Chunk Type | 8 | 固定为 0x00 (标识为DATA Chunk)。 |
Chunk Flags | 8 | 控制标志: - U(Unordered,无序交付, 1 =启用);- B(Beginning,首分片, 1 =数据起始);- E(Ending,末分片, 1 =数据结束);- 其余位保留(设为 0 )。 |
Chunk Length | 16 | DATA Chunk总长度(单位:字节),包含头部、数据及可能的填充。 |
TSN | 32 | 传输序列号(Transmission Sequence Number),唯一标识数据块。 |
Stream Identifier | 16 | 流标识符(Stream ID),标识数据所属的流。 |
Stream Sequence Number | 16 | 流内序列号(Stream Sequence Number),标识流内数据的顺序。 |
Payload Protocol Identifier | 32 | 负载协议标识符(PPID),标识上层协议类型(如HTTP、SIP等)。 |
Payload Data | 可变 | 实际用户数据(长度由Chunk Length 计算得出)。 |
Padding | 可变(0-3B) | 填充字节(可选),确保整个Chunk长度为4字节对齐。 |
(2)INIT Chunk(初始化连接,类型 0x01)
字段名称 | 位数(比特) | 描述 |
---|---|---|
Initiate Tag | 32 | 发起方验证标签(用于后续数据包验证)。 |
Advertised Receiver Window Credit (a_rwnd) | 32 | 接收窗口大小(初始流量控制参数)。 |
Number of Outbound Streams | 16 | 发起方支持的最大出站流数量。 |
Number of Inbound Streams | 16 | 发起方支持的最大入站流数量。 |
Initial TSN | 32 | 初始传输序列号(TSN起始值)。 |
Optional Parameters | 可变 | 可选参数(如支持的地址列表、Cookie Preservative等)。 |
(3)INIT ACK Chunk(初始化确认,类型 0x02)
字段名称 | 位数(比特) | 描述 |
---|---|---|
Initiate Tag | 32 | 响应方生成的验证标签。 |
Advertised Receiver Window Credit (a_rwnd) | 32 | 响应方的接收窗口大小。 |
Number of Outbound Streams | 16 | 响应方支持的最大出站流数量。 |
Number of Inbound Streams | 16 | 响应方支持的最大入站流数量。 |
Initial TSN | 32 | 响应方初始传输序列号。 |
State Cookie | 可变 | 包含连接状态信息的Cookie(防攻击)。 |
Optional Parameters | 可变 | 可选参数(如地址列表扩展)。 |
(4)SACK Chunk(选择性确认,类型 0x03)
字段名称 | 位数(比特) | 描述 |
---|---|---|
Cumulative TSN Ack | 32 | 已确认的最高连续TSN。 |
Advertised Receiver Window Credit (a_rwnd) | 32 | 更新后的接收窗口大小。 |
Number of Gap Ack Blocks | 16 | 非连续确认块的数量(标识已接收的非连续TSN范围)。 |
Number of Duplicate TSNs | 16 | 重复接收的TSN数量(用于检测丢包或重复)。 |
Gap Ack Blocks | 可变 | 非连续确认块列表(每个块由起始和结束偏移量表示)。 |
Duplicate TSNs | 可变 | 重复接收的TSN列表。 |
(5)HEARTBEAT / HEARTBEAT ACK Chunk(心跳检测,类型 0x04/0x05)
字段名称 | 位数(比特) | 描述 |
---|---|---|
Cumulative TSN Ack | 32 | 已确认的最高连续TSN。 |
Advertised Receiver Window Credit (a_rwnd) | 32 | 更新后的接收窗口大小。 |
Number of Gap Ack Blocks | 16 | 非连续确认块的数量(标识已接收的非连续TSN范围)。 |
Number of Duplicate TSNs | 16 | 重复接收的TSN数量(用于检测丢包或重复)。 |
Gap Ack Blocks | 可变 | 非连续确认块列表(每个块由起始和结束偏移量表示)。 |
Duplicate TSNs | 可变 | 重复接收的TSN列表。 |
(6)ABORT Chunk(终止连接,类型 0x06)
字段名称 | 位数(比特) | 描述 |
---|---|---|
Error Causes | 可变 | 终止原因(如协议错误、资源不足等)。 |
(7)SHUTDOWN Chunk(优雅关闭,类型 0x07)
字段名称 | 位数(比特) | 描述 |
---|---|---|
Cumulative TSN Ack | 32 | 已确认的最高连续TSN(用于关闭前的数据确认)。 |
(8)ERROR Chunk(错误通知,类型 0x09)
字段名称 | 位数(比特) | 描述 |
---|---|---|
Error Causes | 可变 | 错误原因列表(如无效流ID、Cookie过期等)。 |
5. GTP-U协议
字段名称 | 位数(比特) | 描述 |
---|---|---|
Version | 3 | 版本号(GTPv1-U为 1 )。 |
Protocol Type | 1 | 协议类型(1 =GTP,0 =GTP’)。 |
REserved | 1 | 保留字段。 |
E | 1 | 扩展头标志(1 =存在扩展头,0 =无扩展头)。 |
S | 1 | 序列号标志(1 =包含序列号字段)。 |
PN | 1 | N-PDU号标志(1 =包含N-PDU号字段)。 |
Message Type | 8 | 消息类型(如 0xFF =G-PDU,0x01 =Echo Request)。 |
Length | 16 | 消息总长度(不包括前8字节)。 |
TEID | 32 | 隧道端点标识符(标识用户数据所属的隧道)。 |
Sequence Number | 16 | 序列号(可选,当 S=1 时存在)。 |
N-PDU Number | 8 | N-PDU编号(可选,当 PN=1 时存在)。 |
Extension Header | 8 | 扩展头数目(可选,仅当 Extension Flag=1 时存在,后接扩展头内容) |
Payload | 可变 | 封装的用户数据(如 IP 包) |
6. GPRS-NS 协议概述
公共头部
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | NS-PDU 的类型标识符(详见下方具体报文)。 |
Spare | 8 | 保留位,通常设为 0 。 |
PDU Length | 16 | NS-PDU 的总长度(单位:字节),包括头部和数据部分。 |
Variable Parameters/Data | 可变 | 根据不同的 PDU Type,此部分承载特定的参数或用户数据。 |
(1)NS-DATA(传输数据,类型 0x01)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x01 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | NS-PDU 的总长度。 |
N-PDU Number | 8 | 网络层 PDU 编号(用于网络服务管理,可能与 LLC 层交互)。 |
Spare | 8 | 保留位。 |
GTP-PDU | 可变 | 承载的完整 GTP 协议数据单元(GTP-C 信令或 GTP-U 用户数据)。 |
(2)NS-ALIVE(心跳请求,类型 0x02)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x02 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | 固定为 0x0004 (4字节),因为只有头部,无可变部分。 |
Destination Reference Number | 24 | 目标节点参考号,用于标识对端。 |
Source Reference Number | 24 | 源节点参考号,用于标识本端。 |
(3)NS-ALIVE-ACK(心跳确认,类型 0x03)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x03 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | 固定为 0x0004 。 |
Destination Reference Number | 24 | 对端在 NS-ALIVE 中提供的源参考号。 |
Source Reference Number | 24 | 本端的参考号。 |
(4)NS-UNITDATA(非可靠数据传输,类型 0x04)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x04 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | NS-PDU 的总长度。 |
N-PDU Number | 8 | 网络层 PDU 编号。 |
Spare | 8 | 保留位。 |
GTP-PDU | 可变 | 承载的 GTP 协议数据单元。 |
(5)NS-BLOCK(阻塞通知,类型 0x05)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x05 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | 固定为 0x0004 。 |
Destination Reference Number | 24 | 目标节点参考号。 |
Source Reference Number | 24 | 源节点参考号。 |
(6)NS-BLOCK-ACK(阻塞确认,类型 0x06)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x06 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | 固定为 0x0004 。 |
Destination Reference Number | 24 | 对端在 NS-BLOCK 中提供的源参考号。 |
Source Reference Number | 24 | 本端的参考号。 |
(7)NS-UNBLOCK(解阻塞通知,类型 0x07)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x07 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | 固定为 0x0004 。 |
Destination Reference Number | 24 | 目标节点参考号。 |
Source Reference Number | 24 | 源节点参考号。 |
(8)NS-UNBLOCK-ACK(解阻塞确认,类型 0x08)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x08 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | 固定为 0x0004 。 |
Destination Reference Number | 24 | 对端在 NS-UNBLOCK 中提供的源参考号。 |
Source Reference Number | 24 | 本端的参考号。 |
(9)NS-RESET(重置请求,类型 0x09)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x09 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | 固定为 0x0004 。 |
Destination Reference Number | 24 | 目标节点参考号。 |
Source Reference Number | 24 | 源节点参考号。 |
(10)NS-RESET-ACK(重置确认,类型 0x0A)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0x0A 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | 固定为 0x0004 。 |
Destination Reference Number | 24 | 对端在 NS-RESET 中提供的源参考号。 |
Source Reference Number | 24 | 本端的参考号。 |
(11)NS-STATUS(状态指示,类型 0xFE)
字段名称 | 位数(比特) | 描述 |
---|---|---|
PDU Type | 8 | 固定为 0xFE 。 |
Spare | 8 | 保留位。 |
PDU Length | 16 | NS-PDU 的总长度。 |
Cause | 8 | 指示错误原因(如:未知的 PDU 类型)。 |
Spare | 8 | 保留位。 |
Erroneous PDU | 可变 | (可选)引发错误的那部分 NS-PDU 内容。 |