本文内容全凭个人理解,如有错误请指出。

以太网帧,位于OSI七层模型中的数据链路层,是最基础的数据单位。常见的协议一共有两种:Ethernet II 和 IEEE 802.3。
OSI 七层模型
帧的收发过程可以参见下图,其中物理层可以理解为网卡,网卡将完成所有帧的收发操作
帧收发
由于帧在物理层将会被转换二进制格式(0、1格式的高低电压),为了便于区分出帧,使用了 Preamble(前导码)用来标记帧,同时每一帧发送的间隔最小为12Bytes。如下图:
frame

  • Preamble:前导码,共64 bits(8bytes),表示为一个以太网帧的开始。其还包含一个SFD(Start Frame Delimiter 起始帧定位符),共8bits(1byte),在前导码的最后一个字节,就如同它的名字一样,用于定位帧,以免因错位而导致的数据错了。
    其内容为(二进制):10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011
  • FCS:帧校验序列(frame check sequence),是一个4 bytes 的帧校验位,一般使用循环冗余校验(CRC: Cyclic Redundancy Check)。

注:前导码和FCS的添加、验证和帧的接受工作是由网卡完成,操作系统只会接受到帧。也就是说,我们是无法抓包到前导码和FCS的。

Ethernet II

Ethernet II协议,是现在最常见、使用频率最高的协议,例如IP、ARP协议都是基于此协议完成的,它是由 DEC、intel 和 Xerox这几个公司主要参与设计的。
其格式如下图:
Ethernet_II

  • DMAC:目的MAC地址,共6bytes
  • SMAC:源MAC地址,共6bytes
  • Type:Data段(网络层)的协议类型,共2 bytes,由于此位刚好与IEEE 802.3 协议的长度标志位相同,所以为了区分两个数据包,其值必须大于1536。常见的例如:

    • 0x0806: ARP
    • 0x0800:IPv4
    • 0x86DD:IPv6
  • Data:数据段,网络层数据。最小为46Bytes,最大为1500bytes。

整个Ethernet II 帧大小为:64~1518Bytes。

IEEE 802.3

由 IEEE 组织设计的网络协议,其最主要的特点就是传输数据的可靠性,所以常用于一些路由协议,例如STP协议等。
其主要格式如下:
IEEE 802

  • DMAC:目的MAC地址。共6bytes
  • SMAC:源MAC地址。共6bytes
  • Length:数据包长度,由于与 Ethernet II 的 type 标志位相同,为了区别两种类型,IEEE 数据包的长度不能超过1500 bytes。
  • LLC:逻辑访问控制(Logical Link Control)。共站3 bytes,其又可以分为 DSAP、SSAP和Control段。

    • DSAP:目的服务访问点(Destination Service Access Point),SAP 可以理解为服务类型,例如 STP协议在SAP 中的值为0x42。由于使用了DSAP和SSAP,所以可以更加细致的做到控制访问。
    • SSAP:源服务访问点(Source Service Access Point)。
    • Control:控制段,指定帧的架构类型,例如本文写的 IEEE 802.3 的值就是 0x03。
  • SNAP:子网接入协议(Subnetwork Access Protocol),只有当DSAP和SSAP的值都为 0xAA 才会生效,其又可以分为 Organization Code 和 PID 两个部分。

    • Organization Code:组织代码,例如思科的组织代码就是 00:00:0c,苹果的组织代码是 08:00:07 ,xerox 的组织代码是 00:00:00
    • PID:协议ID(Protocol ID),也可以称之为以太网类型(EtherType),与Ethernet II 的type段相同。

注:其实还有一个类型是 Netware-Ethernet,需要 DSAP 和 SSAP 的值都为 0xff时,这里就不过的赘述了。

以太网帧类型

类型编号(十六进制)协议
0000~05DCIEEE802.3 Length Field(1500)
0101~01FF保留
0800IPv4
0806Address Resolution Protocol(ARP)
8035Reverse Address Resolution Protocol(RAPR)
8037IPX(Novell NetWare)
805BVMTP(Versatile Message Transaction Protocol)
809DAppleTalk(EtherTalk)
80F3AppleTalk Address Resolution Protocol(AARP)
8100IEEE802.1 Q Custer VLAN
814CSNMP over Ethernet
8191NetBIOS/NetBEUI
817DXTP
86DDIPv6
8847~8848MPLS(Multi-protocol Label Switching)
8863PPPoE Discovery Stage
8864PPPoE Session Stage
9000Loopback(Configuration Test Protocol)

这里仅仅是一部分以太网类型,如果想要了解所有以太网类型,可以查阅 由IANA制定的以太网帧标准: ethernet-numbers


数据包样例参考:genbroad.snoop

参考文献:

本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【100K96TH】获取授权信息。

最后修改:2020 年 03 月 25 日 09 : 55 AM
如果觉得我的文章对你有用,请随意赞赏
或者点击网页中小广告,你的鼓励都将成为我写作的动力