> 技术文档 > 以太网帧结构及IP数据报格式详解_以太网报文格式

以太网帧结构及IP数据报格式详解_以太网报文格式


目录

    • 1、以太网帧结构介绍
    • 2、IP(IPv4)数据报格式
      • 2.1、IP首部
      • 2.2、ICMP报文格式
      • 2.3、UDP报文格式
      • 2.4、TCP报文格式
    • 3、ARP报文格式

1、以太网帧结构介绍

以太网帧(Ethernet Frame)是数据链路层的基本传输单位,其结构遵循IEEE 802.3标准(或其他变种如Ethernet II).基于IEEE 802.3的帧结构如下:
以太网帧结构及IP数据报格式详解_以太网报文格式
以太网(IEEE802.3)帧格式包含一个源地址和目的地址、一个重载的长度/类型字段、一个数据字段和一个帧校验序列(CRC32)。
另外,基本帧格式提供了一个可选的标签项,其中包含一个VLAN ID和优先级信息(802.1p/q),以及一个最近出现的可扩展标签。前导和 SFD 被用于接收器同步。当以太网以半双工模式运行在100Mb/s或以上速率时,其他位可能被作为载体扩展添加到短帧中,以确保冲突检测电路的正常运行。

Ethernet II为使用最广泛的以太网帧格式:
以太网帧结构及IP数据报格式详解_以太网报文格式

  • 前导码(Preamble)7字节:交替的10101010,用于时钟同步。物理层功能,不计入帧头。

  • 帧开始符(SFD, Start Frame Delimiter)1字节:10101011,标志帧的开始。

  • 目标MAC地址(Destination MAC)6字节:接收方的物理地址。广播地址为FF:FF:FF:FF:FF:FF。

  • 源MAC地址(Source MAC)6字节:发送方的物理地址。

  • 类型/长度(EtherType/Length)2字节:Ethernet II:标识上层协议类型。IEEE 802.3:表示数据字段的长度(≤1500),通过该字段区分两种帧格式。

  • 数据(Payload)46~1500字节:上层协议数据(如IP包)。若数据<46字节,需填充至最小长度(保证帧≥64字节)。

  • 帧校验序列(FCS, Frame Check Sequence)4字节:CRC校验值,用于检测传输错误。

其中类型字段具体定义如下,Ethernet II类型字段范围>1500,1500及以下为802.3长度字段,因数据报文长度为46-1500。常用的类型字段有:

  • 0x0800:IPv4
  • 0x0806:ARP
  • 0x0835:RARP
  • 0x8100:802.1Q VLAN标签

以太网帧结构及IP数据报格式详解_以太网报文格式
更详细的以太网类型参考: IEEE 802 Numbers

2、IP(IPv4)数据报格式

IP(Internet Protocol)数据报是网络层的基本数据单元,其格式由固定长度的首部(Header)和可变长度的数据部分(Payload)组成。

以太网帧结构及IP数据报格式详解_以太网报文格式

2.1、IP首部

  • (1)固定首部(20字节,必选部分)
字段 长度bit 说明 版本(Version) 4 IP协议版本(如IPv4填4,IPv6填6) 首部长度(IHL) 4 首部长度,如果不带Option字段,则为5(20byte),最长为60,该值限制了记录路由选项。以4字节为一个单位。 服务类型(TOS) 8 只有在有QoS差分服务要求时这个字段才起作用,用于QoS(优先级、延迟、吞吐量等,现多用于DiffServ或ECN) 总长度(Total Length) 16 整个数据报的长度(头部+数据,最大65535字节)。必须不超过最大传输单元MTU 标识(Identification) 16 唯一标识数据报,用于分片重组,主机每发一个报文,加1 标志(Flags) 3 控制分片:- bit0:保留(0); -bit1(DF):禁止分片; - bit2(MF):更多分片(非最后一片 片偏移(Fragment Offset) 13 片偏移:分片重组时会用到该字段,分片在原数据报中的位置(以8字节为偏移单位)。 生存时间(Time to Live) 8 数据报经过的最大路由器跳数,每经过一跳减1,到0时丢弃 协议(Protocol) 8 下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理(如TCP=6,UDP=17,ICMP=1),(更多协议请参考参考文件) 头部校验和(Header Checksum) 16 仅校验头部,每经过一跳重新计算。 源IP地址(Source Address) 32 发送方的IP地址。 目的IP地址(Destination Address) 32 接收方的IP地址。
  • (2)可选首部字段(0~40字节,可选)

    • 选项(Options):用于扩展功能(如记录路由、时间戳等),实际很少使用。

    • 填充(Padding):确保头部长度是4字节的整数倍。

2.2、ICMP报文格式

ICMP(Internet Control Message Protocol)报文是网络层协议,主要用于在IP主机、路由器之间传递控制信息,如网络通断、主机可达性、路由状态等。ICMP为IP数据报的一种,ICMP报文在IP数据报数据段承载。
以太网帧结构及IP数据报格式详解_以太网报文格式
在IP首部,可以通过协议字段区分ICMP/TCP/UDP,ICMP/TCP/UDP报文均在IP数据报数据段承载,每个报文格式也包含头部和数据。
以太网帧结构及IP数据报格式详解_以太网报文格式

ICMP各字段详解:

  • Type(1字节):报文类型,决定ICMP的功能(如8为请求回显,0为回显应答)。

  • Code(1字节):细分类型,例如Type=3(目标不可达)时,Code=0表示网络不可达,Code=1表示主机不可达。

  • Checksum(2字节):校验和,覆盖整个ICMP报文。

  • 可变部分(4字节):内容随Type/Code变化(如标识符、序列号用于回显请求)。

  • 数据部分:通常包含触发该ICMP报文的原始IP头+前8字节数据(用于错误诊断)。

常见的ICMP报文类型和细分类型:

以太网帧结构及IP数据报格式详解_以太网报文格式

2.3、UDP报文格式

UDP(User Datagram Protocol)是一种无连接、不可靠但高效的传输层协议,其报文格式简单,固定首部仅 8字节。
以太网帧结构及IP数据报格式详解_以太网报文格式

UDP首部:

字段名 位数 说明 源端口(Source Port) 16 发送方的端口号(可选,不用时可置0) 目的端口(Destination Port) 16 接收方的端口号 长度(Length) 16 整个UDP报文的长度(首部+数据,最小为8字节,最大65535字节) 校验和(Checksum) 16 可选字段(IPv4中可置0),校验范围包括伪首部、UDP首部和数据部分

伪首部: 校验时临时添加(含源/目的IP、协议类型等),仅用于计算,不实际传输。伪首部字段来自于IP数据报首部内容。

校验和:
UDP 的校验和是可选的。由于 IP 包只对头部做校验和,无法对数据部分进行纠错,因此 UDP 自己实现校验和。

和IP数据报的检验和只检验IP数据报的首部不同,UDP的检验和是把首部(包含伪首部)和数据部分一起都检验,这就导致在实现过程中UDP使用校验和时需要缓存所有数据包。

2.4、TCP报文格式

TCP(Transmission Control Protocol)是一种面向连接、可靠的传输层协议,其报文格式比UDP复杂,包含固定首部(20字节)和可选字段。
以太网帧结构及IP数据报格式详解_以太网报文格式
TCP首部:
TCP包含20字节固定首部:

字段名 位数 说明 源端口(Source Port) 16 发送方的端口号 目的端口(Destination Port) 16 接收方的端口号。 序列号(Sequence Number) 32 数据字节流的编号(用于数据排序和可靠性)。TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号 确认号(Acknowledgment Number) 32 确认号,是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。 首部长度(Data Offset) 4 TCP头部长度(以4字节为单位),最小值为5(即20字节)。 保留(Reserved) 6 保留字段,必须置0 控制标志(Flags) 6 连接控制:
- URG:紧急指针有效
- ACK:确认号有效
- PSH:接收方应立即推送数据给应用层
- RST:重置连接
- SYN:同步序列号(建立连接)
- FIN:释放连接 窗口大小(Window Size) 16 接收方的可用缓冲区大小,TCP的流量控制,窗口起始于确认序号字段指明的值,这个值是接收端期望接收的字节数。窗口最大为65535字节 校验和(Checksum) 16 校验范围包括伪首部、TCP首部和数据部分(与UDP类似),是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部 紧急指针(Urgent Pointer) 16 仅当URG=1时有效,指向紧急数据的末尾。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)

TCP包含最大40字可变首部:

TCP协议最初只规定了一种选项,即最长报文段长度(只包含数据字段,不包括TCP首部),又称为MSS。MSS告诉对方TCP“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”。新的RFC规定有以下几种选型:选项表结束,空操作,最大报文段长度,窗口扩大因子,时间戳:

  • 选项表结束。
  • 空操作:没有特殊含义,一般用于将TCP选项的总长度填充为4字节的整数倍。
  • 最大报文段长度:又称为MSS,只包含数据字段,不包括TCP首部。
  • 窗口扩大因子:3字节,其中一个字节表示偏移值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。
  • 时间戳:10字节,其中最主要的字段是时间戳值(4字节)和时间戳回送应答字段(4字节)。

3、ARP报文格式

以太网中的 ARP(Address Resolution Protocol,地址解析协议)帧 用于通过 IP地址 查询对应的 MAC地址,是局域网通信的基础协议。

以太网帧格式和802.3帧格式ARP报文格式如下:在类型字段后,ARP和RARP均有46字节数据,其中28字节为有效数据,18字节为填充数据。

其中ARP和RARP的类型分别为0x0806和0x0835。
以太网帧结构及IP数据报格式详解_以太网报文格式

其中基于以太网帧的28字节具体报文如下:
以太网帧结构及IP数据报格式详解_以太网报文格式
各字段详解:

  • 硬件类型(HTYPE): 2字节 网络接口类型:0x0001 表示以太网(Ethernet)
  • 协议类型(PTYPE): 2字节 上层协议类型:0x0800 表示IPv4
  • 硬件地址长度(HLEN): 1字节 MAC地址长度:0x06(6字节)
  • 协议地址长度(PLEN): 1字节 IP地址长度:0x04(4字节)
  • 操作码(OPER): 2字节 ARP操作类型:
      1 = ARP请求(Request)
      2 = ARP响应(Reply)
  • 发送方MAC(SHA): 6字节 发送ARP的主机MAC地址
  • 发送方IP(SPA): 4字节 发送ARP的主机IP地址
  • 目标MAC(THA): 6字节 目标MAC地址(请求时填 00:00:00:00:00:00)
  • 目标IP(TPA): 4字节 要查询的目标IP地址

参考资料:
IP 报文格式大全
Ethernet Numbers
IEEE