返回

常见网络IP报文格式

常见网络IP报文格式, 如以太网帧头、ARP报文、IPv4头、ICMP报文等。

网络报文格式表(64位数据宽度)

本文档按照8字节(64位)数据宽度排列网络报文格式,适用于AXI-Stream 64位数据通路。

字节序约定:大端序(网络序),data[63:56]为第一个字节,keep[7]对应第一个字节有效。


1. 以太网帧头 (Ethernet Header)

长度: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]
0DST 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]
1SRC MAC [31:24]SRC MAC [23:16]SRC MAC [15:8]SRC MAC [7:0]EtherType [15:8]EtherType [7:0]Payload…

字段说明

字段长度说明
DST MAC6字节目的MAC地址,广播地址为 FF:FF:FF:FF:FF:FF
SRC MAC6字节源MAC地址
EtherType2字节协议类型标识

EtherType 常用值

协议
0x0800IPv4
0x0806ARP
0x8100VLAN Tagged
0x86DDIPv6

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]
0DST 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]
1SRC MAC [31:24]SRC MAC [23:16]SRC MAC [15:8]SRC MAC [7:0]0x080x06HW Type [15:8]HW Type [7:0]
2Proto Type [15:8]Proto Type [7:0]HW LenProto LenOpcode [15:8]Opcode [7:0]Sender MAC [47:40]Sender MAC [39:32]
3Sender 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]
4Target 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]
5Target IP [15:8]Target IP [7:0]Padding…

字段说明

字段长度说明
HW Type2字节硬件类型,以太网固定为 0x0001
Proto Type2字节协议类型,IPv4固定为 0x0800
HW Len1字节硬件地址长度,以太网固定为 6
Proto Len1字节协议地址长度,IPv4固定为 4
Opcode2字节操作码
Sender MAC6字节发送方MAC地址
Sender IP4字节发送方IP地址
Target MAC6字节目标MAC地址,Request时填全0
Target IP4字节目标IP地址

Opcode 值

说明
0x0001ARP Request(请求)
0x0002ARP 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]
0Ver + IHLTOSTotal Len [15:8]Total Len [7:0]Identification [15:8]Identification [7:0]Flags + FragOff[12:8]FragOff [7:0]
1TTLProtocolHeader Cksum [15:8]Header Cksum [7:0]Src IP [31:24]Src IP [23:16]Src IP [15:8]Src IP [7:0]
2Dst IP [31:24]Dst IP [23:16]Dst IP [15:8]Dst IP [7:0]Payload…

字段说明

字段长度位域说明
Version4bit[7:4]IP版本号,IPv4固定为 4
IHL4bit[3:0]头部长度(以4字节为单位),无选项时为 5
TOS1字节-服务类型/DSCP,通常为 0x00
Total Length2字节-IP报文总长度(字节),含头部
Identification2字节-分片标识,同一报文的所有分片相同
Flags3bit[15:13]分片标志位
Fragment Offset13bit[12:0]分片偏移(以8字节为单位)
TTL1字节-生存时间,每跳减1,常用值64/128
Protocol1字节-上层协议号
Header Checksum2字节-头部校验和(反码求和)
Source IP4字节-源IP地址
Destination IP4字节-目的IP地址

Flags 位定义

名称说明
[15]Reserved保留,必须为0
[14]DFDon’t Fragment,禁止分片
[13]MFMore Fragments,后续还有分片

Protocol 常用值

协议
1ICMP
6TCP
17UDP

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]
0TypeCodeChecksum [15:8]Checksum [7:0]Identifier [15:8]Identifier [7:0]Seq Num [15:8]Seq Num [7:0]
1Data…

字段说明

字段长度说明
Type1字节消息类型
Code1字节消息代码,Echo通常为 0
Checksum2字节校验和(整个ICMP报文的反码求和)
Identifier2字节标识符,用于匹配请求与应答
Sequence Number2字节序列号,每次请求递增
Data可变可选数据,Reply原样返回

Type 常用值

说明
0Echo Reply(回显应答)
3Destination Unreachable(目的不可达)
8Echo Request(回显请求)
11Time 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]
0Src 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]
1Data…

字段说明

字段长度说明
Source Port2字节源端口号(0-65535)
Destination Port2字节目的端口号(0-65535)
Length2字节UDP报文总长度(头部+数据),最小为8
Checksum2字节校验和(含伪头部),可选(填0表示不校验)

UDP伪头部(用于校验和计算)

字段长度
Source IP4字节
Destination IP4字节
Zero1字节
Protocol (17)1字节
UDP Length2字节

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]
0Src 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]
1Ack Num [31:24]Ack Num [23:16]Ack Num [15:8]Ack Num [7:0]Data Offset + RsvFlagsWindow [15:8]Window [7:0]
2Checksum [15:8]Checksum [7:0]Urgent Ptr [15:8]Urgent Ptr [7:0]Options/Data…

字段说明

字段长度说明
Source Port2字节源端口号
Destination Port2字节目的端口号
Sequence Number4字节序列号,数据流中第一个字节的编号
Acknowledgment Number4字节确认号,期望收到的下一个字节编号(ACK=1时有效)
Data Offset4bit头部长度(以4字节为单位),无选项时为 5
Reserved4bit保留位,必须为0
Flags8bit控制标志位
Window Size2字节接收窗口大小(字节)
Checksum2字节校验和(含伪头部)
Urgent Pointer2字节紧急指针(URG=1时有效)

Flags 位定义

名称说明
[7]CWRCongestion Window Reduced
[6]ECEECN-Echo
[5]URG紧急指针有效
[4]ACK确认号有效
[3]PSH推送数据,立即交付应用层
[2]RST重置连接
[1]SYN同步序列号,建立连接
[0]FIN发送方数据发送完毕,关闭连接

TCP伪头部(用于校验和计算)

字段长度
Source IP4字节
Destination IP4字节
Zero1字节
Protocol (6)1字节
TCP Length2字节

7. 完整报文视图(以太网 + IPv4 + UDP)

以最小UDP报文为例(无数据),总长度 = 14 + 20 + 8 = 42字节

偏移Byte 0Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6Byte 7
00-7DST MAC[5]DST MAC[4]DST MAC[3]DST MAC[2]DST MAC[1]DST MAC[0]SRC MAC[5]SRC MAC[4]
18-15SRC MAC[3]SRC MAC[2]SRC MAC[1]SRC MAC[0]0x080x000x45TOS
216-23IP Len[1]IP Len[0]IP ID[1]IP ID[0]Flags+FragFragOffTTLProtocol
324-31IP Cksum[1]IP Cksum[0]SrcIP[3]SrcIP[2]SrcIP[1]SrcIP[0]DstIP[3]DstIP[2]
432-39DstIP[1]DstIP[0]SrcPort[1]SrcPort[0]DstPort[1]DstPort[0]UDP Len[1]UDP Len[0]
540-47UDP Cksum[1]UDP Cksum[0]Data…

8. 完整报文视图(以太网 + IPv4 + TCP)

以TCP SYN报文为例(20字节头部,无选项/数据),总长度 = 14 + 20 + 20 = 54字节

偏移Byte 0Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6Byte 7
00-7DST MAC[5]DST MAC[4]DST MAC[3]DST MAC[2]DST MAC[1]DST MAC[0]SRC MAC[5]SRC MAC[4]
18-15SRC MAC[3]SRC MAC[2]SRC MAC[1]SRC MAC[0]0x080x000x45TOS
216-23IP Len[1]IP Len[0]IP ID[1]IP ID[0]Flags+FragFragOffTTL0x06
324-31IP Cksum[1]IP Cksum[0]SrcIP[3]SrcIP[2]SrcIP[1]SrcIP[0]DstIP[3]DstIP[2]
432-39DstIP[1]DstIP[0]SrcPort[1]SrcPort[0]DstPort[1]DstPort[0]SeqNum[3]SeqNum[2]
540-47SeqNum[1]SeqNum[0]AckNum[3]AckNum[2]AckNum[1]AckNum[0]0x50Flags
648-55Window[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
🄯 2025 - 2026 DeerMiya的博客· 0Days
共书写了35.2k字·共 17篇文章
本站总访问量 · 访客数

DeerMiya的一些笔记
使用 Hugo 构建
主题 Stack ModIce Year 设计
🄯 Licensed Under CC BY-NC-SA 4.0