网络报文格式表(64位数据宽度)
本文档按照8字节(64位)数据宽度排列网络报文格式,适用于AXI-Stream 64位数据通路。
字节序约定:大端序(网络序),data[63:56]为第一个字节,keep[7]对应第一个字节有效。
长度:14字节
| 行 | Byte 0 [63:56] | Byte 1 [55:48] | Byte 2 [47:40] | Byte 3 [39:32] | Byte 4 [31:24] | Byte 5 [23:16] | Byte 6 [15:8] | Byte 7 [7:0] |
|---|
| 0 | DST MAC [47:40] | DST MAC [39:32] | DST MAC [31:24] | DST MAC [23:16] | DST MAC [15:8] | DST MAC [7:0] | SRC MAC [47:40] | SRC MAC [39:32] |
| 1 | SRC MAC [31:24] | SRC MAC [23:16] | SRC MAC [15:8] | SRC MAC [7:0] | EtherType [15:8] | EtherType [7:0] | Payload… | |
字段说明
| 字段 | 长度 | 说明 |
|---|
| DST MAC | 6字节 | 目的MAC地址,广播地址为 FF:FF:FF:FF:FF:FF |
| SRC MAC | 6字节 | 源MAC地址 |
| EtherType | 2字节 | 协议类型标识 |
EtherType 常用值
| 值 | 协议 |
|---|
| 0x0800 | IPv4 |
| 0x0806 | ARP |
| 0x8100 | VLAN Tagged |
| 0x86DD | IPv6 |
2. ARP报文
长度:28字节(不含以太网头),完整帧42字节
| 行 | Byte 0 [63:56] | Byte 1 [55:48] | Byte 2 [47:40] | Byte 3 [39:32] | Byte 4 [31:24] | Byte 5 [23:16] | Byte 6 [15:8] | Byte 7 [7:0] |
|---|
| 0 | DST MAC [47:40] | DST MAC [39:32] | DST MAC [31:24] | DST MAC [23:16] | DST MAC [15:8] | DST MAC [7:0] | SRC MAC [47:40] | SRC MAC [39:32] |
| 1 | SRC MAC [31:24] | SRC MAC [23:16] | SRC MAC [15:8] | SRC MAC [7:0] | 0x08 | 0x06 | HW Type [15:8] | HW Type [7:0] |
| 2 | Proto Type [15:8] | Proto Type [7:0] | HW Len | Proto Len | Opcode [15:8] | Opcode [7:0] | Sender MAC [47:40] | Sender MAC [39:32] |
| 3 | Sender MAC [31:24] | Sender MAC [23:16] | Sender MAC [15:8] | Sender MAC [7:0] | Sender IP [31:24] | Sender IP [23:16] | Sender IP [15:8] | Sender IP [7:0] |
| 4 | Target MAC [47:40] | Target MAC [39:32] | Target MAC [31:24] | Target MAC [23:16] | Target MAC [15:8] | Target MAC [7:0] | Target IP [31:24] | Target IP [23:16] |
| 5 | Target IP [15:8] | Target IP [7:0] | Padding… | | | | | |
字段说明
| 字段 | 长度 | 说明 |
|---|
| HW Type | 2字节 | 硬件类型,以太网固定为 0x0001 |
| Proto Type | 2字节 | 协议类型,IPv4固定为 0x0800 |
| HW Len | 1字节 | 硬件地址长度,以太网固定为 6 |
| Proto Len | 1字节 | 协议地址长度,IPv4固定为 4 |
| Opcode | 2字节 | 操作码 |
| Sender MAC | 6字节 | 发送方MAC地址 |
| Sender IP | 4字节 | 发送方IP地址 |
| Target MAC | 6字节 | 目标MAC地址,Request时填全0 |
| Target IP | 4字节 | 目标IP地址 |
Opcode 值
| 值 | 说明 |
|---|
| 0x0001 | ARP Request(请求) |
| 0x0002 | ARP Reply(应答) |
3. IPv4头
长度:20字节(无选项),最大60字节(含选项)
| 行 | Byte 0 [63:56] | Byte 1 [55:48] | Byte 2 [47:40] | Byte 3 [39:32] | Byte 4 [31:24] | Byte 5 [23:16] | Byte 6 [15:8] | Byte 7 [7:0] |
|---|
| 0 | Ver + IHL | TOS | Total Len [15:8] | Total Len [7:0] | Identification [15:8] | Identification [7:0] | Flags + FragOff[12:8] | FragOff [7:0] |
| 1 | TTL | Protocol | Header Cksum [15:8] | Header Cksum [7:0] | Src IP [31:24] | Src IP [23:16] | Src IP [15:8] | Src IP [7:0] |
| 2 | Dst IP [31:24] | Dst IP [23:16] | Dst IP [15:8] | Dst IP [7:0] | Payload… | | | |
字段说明
| 字段 | 长度 | 位域 | 说明 |
|---|
| Version | 4bit | [7:4] | IP版本号,IPv4固定为 4 |
| IHL | 4bit | [3:0] | 头部长度(以4字节为单位),无选项时为 5 |
| TOS | 1字节 | - | 服务类型/DSCP,通常为 0x00 |
| Total Length | 2字节 | - | IP报文总长度(字节),含头部 |
| Identification | 2字节 | - | 分片标识,同一报文的所有分片相同 |
| Flags | 3bit | [15:13] | 分片标志位 |
| Fragment Offset | 13bit | [12:0] | 分片偏移(以8字节为单位) |
| TTL | 1字节 | - | 生存时间,每跳减1,常用值64/128 |
| Protocol | 1字节 | - | 上层协议号 |
| Header Checksum | 2字节 | - | 头部校验和(反码求和) |
| Source IP | 4字节 | - | 源IP地址 |
| Destination IP | 4字节 | - | 目的IP地址 |
Flags 位定义
| 位 | 名称 | 说明 |
|---|
| [15] | Reserved | 保留,必须为0 |
| [14] | DF | Don’t Fragment,禁止分片 |
| [13] | MF | More Fragments,后续还有分片 |
Protocol 常用值
4. ICMP报文(Echo Request/Reply)
长度:8字节头部 + 可变数据
从IPv4 Payload起始位置(偏移20字节)开始:
| 行 | Byte 0 [63:56] | Byte 1 [55:48] | Byte 2 [47:40] | Byte 3 [39:32] | Byte 4 [31:24] | Byte 5 [23:16] | Byte 6 [15:8] | Byte 7 [7:0] |
|---|
| 0 | Type | Code | Checksum [15:8] | Checksum [7:0] | Identifier [15:8] | Identifier [7:0] | Seq Num [15:8] | Seq Num [7:0] |
| 1 | Data… | | | | | | | |
字段说明
| 字段 | 长度 | 说明 |
|---|
| Type | 1字节 | 消息类型 |
| Code | 1字节 | 消息代码,Echo通常为 0 |
| Checksum | 2字节 | 校验和(整个ICMP报文的反码求和) |
| Identifier | 2字节 | 标识符,用于匹配请求与应答 |
| Sequence Number | 2字节 | 序列号,每次请求递增 |
| Data | 可变 | 可选数据,Reply原样返回 |
Type 常用值
| 值 | 说明 |
|---|
| 0 | Echo Reply(回显应答) |
| 3 | Destination Unreachable(目的不可达) |
| 8 | Echo Request(回显请求) |
| 11 | Time Exceeded(超时) |
5. UDP报文
长度:8字节头部 + 可变数据
从IPv4 Payload起始位置(偏移20字节)开始:
| 行 | Byte 0 [63:56] | Byte 1 [55:48] | Byte 2 [47:40] | Byte 3 [39:32] | Byte 4 [31:24] | Byte 5 [23:16] | Byte 6 [15:8] | Byte 7 [7:0] |
|---|
| 0 | Src Port [15:8] | Src Port [7:0] | Dst Port [15:8] | Dst Port [7:0] | Length [15:8] | Length [7:0] | Checksum [15:8] | Checksum [7:0] |
| 1 | Data… | | | | | | | |
字段说明
| 字段 | 长度 | 说明 |
|---|
| Source Port | 2字节 | 源端口号(0-65535) |
| Destination Port | 2字节 | 目的端口号(0-65535) |
| Length | 2字节 | UDP报文总长度(头部+数据),最小为8 |
| Checksum | 2字节 | 校验和(含伪头部),可选(填0表示不校验) |
UDP伪头部(用于校验和计算)
| 字段 | 长度 |
|---|
| Source IP | 4字节 |
| Destination IP | 4字节 |
| Zero | 1字节 |
| Protocol (17) | 1字节 |
| UDP Length | 2字节 |
6. TCP报文
长度:20字节头部(无选项),最大60字节(含选项)
从IPv4 Payload起始位置(偏移20字节)开始:
| 行 | Byte 0 [63:56] | Byte 1 [55:48] | Byte 2 [47:40] | Byte 3 [39:32] | Byte 4 [31:24] | Byte 5 [23:16] | Byte 6 [15:8] | Byte 7 [7:0] |
|---|
| 0 | Src Port [15:8] | Src Port [7:0] | Dst Port [15:8] | Dst Port [7:0] | Seq Num [31:24] | Seq Num [23:16] | Seq Num [15:8] | Seq Num [7:0] |
| 1 | Ack Num [31:24] | Ack Num [23:16] | Ack Num [15:8] | Ack Num [7:0] | Data Offset + Rsv | Flags | Window [15:8] | Window [7:0] |
| 2 | Checksum [15:8] | Checksum [7:0] | Urgent Ptr [15:8] | Urgent Ptr [7:0] | Options/Data… | | | |
字段说明
| 字段 | 长度 | 说明 |
|---|
| Source Port | 2字节 | 源端口号 |
| Destination Port | 2字节 | 目的端口号 |
| Sequence Number | 4字节 | 序列号,数据流中第一个字节的编号 |
| Acknowledgment Number | 4字节 | 确认号,期望收到的下一个字节编号(ACK=1时有效) |
| Data Offset | 4bit | 头部长度(以4字节为单位),无选项时为 5 |
| Reserved | 4bit | 保留位,必须为0 |
| Flags | 8bit | 控制标志位 |
| Window Size | 2字节 | 接收窗口大小(字节) |
| Checksum | 2字节 | 校验和(含伪头部) |
| Urgent Pointer | 2字节 | 紧急指针(URG=1时有效) |
Flags 位定义
| 位 | 名称 | 说明 |
|---|
| [7] | CWR | Congestion Window Reduced |
| [6] | ECE | ECN-Echo |
| [5] | URG | 紧急指针有效 |
| [4] | ACK | 确认号有效 |
| [3] | PSH | 推送数据,立即交付应用层 |
| [2] | RST | 重置连接 |
| [1] | SYN | 同步序列号,建立连接 |
| [0] | FIN | 发送方数据发送完毕,关闭连接 |
TCP伪头部(用于校验和计算)
| 字段 | 长度 |
|---|
| Source IP | 4字节 |
| Destination IP | 4字节 |
| Zero | 1字节 |
| Protocol (6) | 1字节 |
| TCP Length | 2字节 |
7. 完整报文视图(以太网 + IPv4 + UDP)
以最小UDP报文为例(无数据),总长度 = 14 + 20 + 8 = 42字节
| 行 | 偏移 | Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 |
|---|
| 0 | 0-7 | DST MAC[5] | DST MAC[4] | DST MAC[3] | DST MAC[2] | DST MAC[1] | DST MAC[0] | SRC MAC[5] | SRC MAC[4] |
| 1 | 8-15 | SRC MAC[3] | SRC MAC[2] | SRC MAC[1] | SRC MAC[0] | 0x08 | 0x00 | 0x45 | TOS |
| 2 | 16-23 | IP Len[1] | IP Len[0] | IP ID[1] | IP ID[0] | Flags+Frag | FragOff | TTL | Protocol |
| 3 | 24-31 | IP Cksum[1] | IP Cksum[0] | SrcIP[3] | SrcIP[2] | SrcIP[1] | SrcIP[0] | DstIP[3] | DstIP[2] |
| 4 | 32-39 | DstIP[1] | DstIP[0] | SrcPort[1] | SrcPort[0] | DstPort[1] | DstPort[0] | UDP Len[1] | UDP Len[0] |
| 5 | 40-47 | UDP Cksum[1] | UDP Cksum[0] | Data… | | | | | |
8. 完整报文视图(以太网 + IPv4 + TCP)
以TCP SYN报文为例(20字节头部,无选项/数据),总长度 = 14 + 20 + 20 = 54字节
| 行 | 偏移 | Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 |
|---|
| 0 | 0-7 | DST MAC[5] | DST MAC[4] | DST MAC[3] | DST MAC[2] | DST MAC[1] | DST MAC[0] | SRC MAC[5] | SRC MAC[4] |
| 1 | 8-15 | SRC MAC[3] | SRC MAC[2] | SRC MAC[1] | SRC MAC[0] | 0x08 | 0x00 | 0x45 | TOS |
| 2 | 16-23 | IP Len[1] | IP Len[0] | IP ID[1] | IP ID[0] | Flags+Frag | FragOff | TTL | 0x06 |
| 3 | 24-31 | IP Cksum[1] | IP Cksum[0] | SrcIP[3] | SrcIP[2] | SrcIP[1] | SrcIP[0] | DstIP[3] | DstIP[2] |
| 4 | 32-39 | DstIP[1] | DstIP[0] | SrcPort[1] | SrcPort[0] | DstPort[1] | DstPort[0] | SeqNum[3] | SeqNum[2] |
| 5 | 40-47 | SeqNum[1] | SeqNum[0] | AckNum[3] | AckNum[2] | AckNum[1] | AckNum[0] | 0x50 | Flags |
| 6 | 48-55 | Window[1] | Window[0] | TCP Cksum[1] | TCP Cksum[0] | UrgPtr[1] | UrgPtr[0] | Data… | |
附录:keep信号对应关系
64位AXI-Stream中,keep信号指示每个字节的有效性:
| keep位 | 对应数据位 | 字节位置 |
|---|
| keep[7] | data[63:56] | Byte 0(第1个字节) |
| keep[6] | data[55:48] | Byte 1 |
| keep[5] | data[47:40] | Byte 2 |
| keep[4] | data[39:32] | Byte 3 |
| keep[3] | data[31:24] | Byte 4 |
| keep[2] | data[23:16] | Byte 5 |
| keep[1] | data[15:8] | Byte 6 |
| keep[0] | data[7:0] | Byte 7(第8个字节) |
示例:
- 8字节全有效:
keep = 8'b1111_1111 - 仅前6字节有效:
keep = 8'b1111_1100 - 仅前2字节有效:
keep = 8'b1100_0000