以太网帧结构及IP数据报格式详解_以太网报文格式
目录
1、以太网帧结构介绍
以太网帧(Ethernet Frame)是数据链路层的基本传输单位,其结构遵循IEEE 802.3标准(或其他变种如Ethernet II).基于IEEE 802.3的帧结构如下:
以太网(IEEE802.3)帧格式包含一个源地址和目的地址、一个重载的长度/类型字段、一个数据字段和一个帧校验序列(CRC32)。
另外,基本帧格式提供了一个可选的标签项,其中包含一个VLAN ID和优先级信息(802.1p/q),以及一个最近出现的可扩展标签。前导和 SFD 被用于接收器同步。当以太网以半双工模式运行在100Mb/s或以上速率时,其他位可能被作为载体扩展添加到短帧中,以确保冲突检测电路的正常运行。
Ethernet II为使用最广泛的以太网帧格式:
-
前导码(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标签
更详细的以太网类型参考: IEEE 802 Numbers
2、IP(IPv4)数据报格式
IP(Internet Protocol)数据报是网络层的基本数据单元,其格式由固定长度的首部(Header)和可变长度的数据部分(Payload)组成。
2.1、IP首部
- (1)固定首部(20字节,必选部分)
-
(2)可选首部字段(0~40字节,可选)
-
选项(Options):用于扩展功能(如记录路由、时间戳等),实际很少使用。
-
填充(Padding):确保头部长度是4字节的整数倍。
-
2.2、ICMP报文格式
ICMP(Internet Control Message Protocol)报文是网络层协议,主要用于在IP主机、路由器之间传递控制信息,如网络通断、主机可达性、路由状态等。ICMP为IP数据报的一种,ICMP报文在IP数据报数据段承载。
在IP首部,可以通过协议字段区分ICMP/TCP/UDP,ICMP/TCP/UDP报文均在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报文类型和细分类型:
2.3、UDP报文格式
UDP(User Datagram Protocol)是一种无连接、不可靠但高效的传输层协议,其报文格式简单,固定首部仅 8字节。
UDP首部:
伪首部: 校验时临时添加(含源/目的IP、协议类型等),仅用于计算,不实际传输。伪首部字段来自于IP数据报首部内容。
校验和:
UDP 的校验和是可选的。由于 IP 包只对头部做校验和,无法对数据部分进行纠错,因此 UDP 自己实现校验和。
和IP数据报的检验和只检验IP数据报的首部不同,UDP的检验和是把首部(包含伪首部)和数据部分一起都检验,这就导致在实现过程中UDP使用校验和时需要缓存所有数据包。
2.4、TCP报文格式
TCP(Transmission Control Protocol)是一种面向连接、可靠的传输层协议,其报文格式比UDP复杂,包含固定首部(20字节)和可选字段。
TCP首部:
TCP包含20字节固定首部:
- URG:紧急指针有效
- ACK:确认号有效
- PSH:接收方应立即推送数据给应用层
- RST:重置连接
- SYN:同步序列号(建立连接)
- FIN:释放连接
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。
其中基于以太网帧的28字节具体报文如下:
各字段详解:
- 硬件类型(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