以太网帧分析

OSI 模型的数据链路层(第 2 层)实际上由两个子层组成:媒体访问控制 (MAC) 子层和逻辑链路控制 (LLC) 子层。 MAC 子层控制设备交互。 LLC 子层处理寻址和复用。

网络连接的物理寻址存在于数据链路层。在数据链路层传输的协议单元称为帧(frame)。 数据链路层将数据位组合成称为帧的实体。 以太网等网络拓扑存在于数据链路层。 网络交换机是数据链路层最常见的网络设备。

以太网帧概述

在以太网中,设备使用数据包共享数据。 它们包含除其他外的以太网帧,该帧被分成多个数据集。 这些记录由提供重要信息的二进制代码组成,例如地址、控制信息、有效载荷数据和校验和。

根据以太网标准,以太网帧的结构不同,可能包含更多或更少的数据字段,具体取决于网络协议。

虽然IEEE 802.3标准号称要取代Ethernet II,但由于二者的相似以及Ethernet II作为IEEE 802.3的基础这一事实,通常将这两者均视为以太网。

以太网帧的类型有哪些

目前共有4种类型的以太网帧格式:

  • Ethernet II

即DIX 2.0,是Xerox与DEC、Intel在1982年制定的以太网标准帧格式,已成为事实上的以太网帧标准。

  • RAW 802.3

Novell在1983年公布的专用以太网标准帧格式。该格式以前当时尚未正式发布的 802.3标准为基础,与后来的IEEE正式发布的802.3标准并不兼容。它只支持IPX/SPX一种协议,只能用在IPX网络。

  • IEEE 802.3/802.2 LLC

这是1985年由IEEE正式发布的802.3标准,由Ethernet V2发展而来

  • IEEE 802.3/802.2 SNAP

这是1985年IEEE为了保证在802.2 LLC上支持更多的上层协议,同时更好地支持IP协议而发布的标准

以太网帧长度与MTU

最小的以太网帧长度为64字节。最大的以太网帧长度为1518字节。驱动程序要确保帧满足最小帧长度规范的要求,如果某个帧不能满足最小帧长度64字节要求,那么驱动程序必须填充相应的数据字段。

Ethernet II和IEEE 802.3/802.2 SNAP要传输的数据包长度都有一个限制,其最大值分别是1500和1492字节。

链路层的这个特性称作最大传输单元(Maximum Transmission Unit,MTU)。不同类型的网络大多数都有一个上限,如果IP层有一个数据报要传,而且数据长度比链路层的MTU还大,那么IP层就需要进行分片,将数据报分成若干片,让每一片都小于MTU。

通过以太网传输数据时,以太网帧主要负责正确制定规则和成功传输数据包。 本质上,通过以太网发送的数据由帧承载。 以太网帧的大小在 64 字节到 1,518 字节之间,具体取决于要传输的数据的大小。

Ethernet II帧格式

在 OSI 模型中,帧位于数据链路层,负责无错传输和将比特流分成块。

在这里插入图片描述
Ethernet II帧比较简单,由以下5个字段组成:

目的地址:长度为6字节,指定目的的主机的数据链路地址。
源地址:长度为6字节,指定发送方的硬件地址。该字段仅仅包含单播地址,不能包含广播或多播地址。
类型:长度为2字节,标识正在使用该帧类型协议。这是由IANA管理的已分配协议以太网类型(Ether Type)编号。

const value_string etype_vals[] = {
	{ 0x0800,                   "IPv4" },
	{ 0x86DD,                 "IPv6" },
	{ 0x8100,                 "802.1Q Virtual LAN" },
	{ 0x0806,                  "ARP" },
	{ 0x872D,                "Cisco Wireless Lan Context Control Protocol" },
	{ 0x8783,                 "Motorola Media Independent Network Transport" },
	{ 0x2452,     "IEEE 802.11 (Centrino promiscuous)" },
	{ 0x0600,              "XNS Internet Datagram Protocol" },
	{ 0x0805,                "X.25 Layer 3" },
	{ 0x0842,                  "Wake on LAN" },
	{ 0x08F0,              "WiMax Mac-to-Mac" },
	{ 0x3E3F,               "EPL_V1" },
	{ 0x8035,               "RARP" },
	{ 0x8038,               "DEC LanBridge" },
	{ 0x809B,                "AppleTalk LLAP bridging" },
	{ 0x80D5,                  "SNA-over-Ethernet" },
	{ 0x80E1,                  "EtherNet/IP Device Level Ring" },
	{ 0x80F3,                 "AARP" },
	{ 0x8137,                  "Netware IPX/SPX" },
	{ 0x0BAD,             "Vines IP" },
	{ 0x0BAF,           "Vines Echo" },
	{ 0x1984,                "Netmon Train" },
	/* Ethernet Loopback */
	{ 0x9000,                 "Loopback" },
	{ 0x885A,              "Foundry proprietary" },
	{ 0x80FF,                  "Wellfleet Compression Protocol" },
	{ 0x8181,                  "Spanning Tree Protocol" },
	/* for ISMP, see RFC 2641, RFC 2642, RFC 2643 */
	{ 0x81FD,                 "Cabletron Interswitch Message Protocol" },
	{ 0x81FF,         "Cabletron SFVLAN 1.8 Tag-Based Flood" },
	/* In www.iana.org/assignments/ethernet-numbers, 8203-8205 description is
	 * Quantum Software.  Now the company is called QNX Software Systems. */
	{ 0x8204,            "QNX 6 QNET protocol" },
	{ 0x8863,               "PPPoE Discovery" },
	{ 0x8864,               "PPPoE Session" },
	{ 0x886C,             "HomePNA, wlan link local tunnel" },
	{ 0x886D,            "Intel ANS probe" },
	{ 0x886F,     "MS NLB heartbeat" },
	{ 0x8870,            "Jumbo LLC" },
	{ 0x8874,            "Broadcom tag" },
	{ 0x887B,             "Homeplug" },
	{ 0x88E1,          "Homeplug AV" },
	{ 0x88E3,                  "MRP" },
	{ 0x88A8,         "802.1ad Provider Bridge (Q-in-Q)" },
	{ 0x88E5,               "802.1AE (MACsec)" },
	{ 0x893A,            "1905.1a Convergent Digital Home Network for Heterogenous Technologies" },
	{ 0x88E7,         "802.1ah Provider Backbone Bridge (mac-in-mac)" },
	{ 0x893F,         "802.1br Bridge Port Extension E-Tag" },
	{ 0x888E,                "802.1X Authentication" },
	{ 0x88C7,          "802.11i Pre-Authentication" },
	{ 0x8847,                 "MPLS label switched packet" },
	{ 0x8848,           "MPLS multicast label switched packet" },
	{ 0x3C07,         "3Com NBP Datagram" },
	{ 0x6000,                  "DEC proto" },
	{ 0x6001,               "DEC DNA Dump/Load" },
	{ 0x6002,               "DEC DNA Remote Console" },
	{ 0x6003,               "DEC DNA Routing" },
	{ 0x6004,                  "DEC LAT" },
	{ 0x6005,             "DEC Diagnostics" },
	{ 0x6006,             "DEC Customer use" },
	{ 0x6007,              "DEC LAVC/SCA" },
	{ 0x8041,             "DEC LAST" },
	{ 0x6558,            "Transparent Ethernet bridging" },
	{ 0x2001,                 "Cisco Group Management Protocol" },
	{ 0x22E5,              "Gigamon Header" },
	{ 0x22EA,                 "802.1Qat Multiple Stream Reservation Protocol" },
	{ 0x88F6,                 "802.1ak Multiple Mac Registration Protocol" },
	{ 0x894F,                  "Network Service Header" },
	{ 0x8988,          "PA HB Backup" },
	{ 0x22F0,                "IEEE 1722 Audio Video Bridging Transport Protocol" },
	{ 0x22F1,                 "Robust Header Compression(RoHC)" },
	{ 0x22F3,                "Transparent Interconnection of Lots of Links" },
	{ 0x22F4,               "Intermediate System to Intermediate System" },
	{ 0x8808,          "MAC Control" },
	{ 0x8809,       "Slow Protocols" },
	{ 0x9021,                "Real-Time Media Access Control" },
	{ 0x9022,                "Real-Time Configuration Protocol" },
	{ 0x8881,     "CDMA2000 A10 Unstructured byte stream" },
	{ 0x8884,                "ATM over Ethernet" },
	{ 0x8892,             "PROFINET" },
	{ 0x8899,              "Realtek Layer 2 Protocols" },
	{ 0x88A2,                  "ATA over Ethernet" },
	{ 0x88A4,                "EtherCAT frame" },
	{ 0x88A1,             "Telkonet powerline" },
	{ 0x88AB,               "ETHERNET Powerlink v2" },
	{ 0x88AD,               "XiMeta Technology" },
	{ 0x889B,           "CSM_ENCAPS Protocol" },
	{ 0x88B5,    "Local Experimental Ethertype 1" },
	{ 0x88B6,    "Local Experimental Ethertype 2" },
	{ 0x88B7, "IEEE 802a OUI Extended Ethertype" },
	{ 0x88B8,       "IEC 61850/GOOSE" },
	{ 0x88B9,         "IEC 61850/GSE management services" },
	{ 0x88BA,          "IEC 61850/SV (Sampled Value Transmission" },
	{ 0x88CA,                 "Transparent Inter Process Communication" },
	{ 0x88CC,                 "802.1 Link Layer Discovery Protocol (LLDP)" },
	{ 0x88D2,                "CDMA2000 A10 3GPP2 Packet" },
	{ 0x891D,              "TTEthernet Protocol Control Frame" },
	{ 0x88D8,              "Circuit Emulation Services over Ethernet (MEF8)" },
	{ 0x88D9,                 "Link Layer Topology Discovery (LLTD)" },
	{ 0x88DC,                 "(WAVE) Short Message Protocol (WSM)" },
	{ 0x88DE,                "VMware Lab Manager" },
	{ 0x8819,             "Cirrus Cobranet Packet" },
	{ 0x8133,                 "Juniper Netscreen Redundant Protocol" },
	{ 0x9104,                 "EERO Broadcast Packet" },
	/*
	 * NDISWAN on Windows translates Ethernet frames from higher-level
	 * protocols into PPP frames to hand to the PPP driver, and translates
	 * PPP frames from the PPP driver to hand to the higher-level protocols.
	 *
	 * Apparently the PPP driver, on at least some versions of Windows,
	 * passes frames for internal-to-PPP protocols up through NDISWAN;
	 * the protocol type field appears to be passed through unchanged
	 * (unlike what's done with, for example, the protocol type field
	 * for IP, which is mapped from its PPP value to its Ethernet value).
	 *
	 * This means that we may see, on Ethernet captures, frames for
	 * protocols internal to PPP, so we list as "Ethernet" protocol
	 * types the PPP protocol types we've seen.
	 */
	{ 0x8021,                       "PPP IP Control Protocol" },
	{ 0xc021,                        "PPP Link Control Protocol" },
	{ 0xc023,                        "PPP Password Authentication Protocol" },
	{ 0x80fd,                        "PPP Compression Control Protocol" },
	{ 0xCAFE,                  "Veritas Low Latency Transport (not officially registered)" },
	{ 0x8902,                  "IEEE 802.1ag Connectivity Fault Management (CFM) protocol" },
	{ 0x8903,                  "Data Center Ethernet (DCE) protocol(Cisco)" },
	{ 0x8906,                 "Fibre Channel over Ethernet" },
	{ 0x890d, "IEEE 802.11 data encapsulation" },
	{ 0x8911,                 "LINX IPC Protocol" },
	{ 0x8914,                  "FCoE Initialization Protocol" },
	{ 0x8917,                  "Media Independent Handover Protocol" },
	{ 0x88EE,                 "Ethernet Local Management Interface (MEF16)" },
	{ 0x88F7,                  "PTPv2 over Ethernet (IEEE1588)" },
	{ 0x88F8,                 "Network Controller Sideband Interface" },
	{ 0x88FB,                  "Parallel Redundancy Protocol (PRP) and HSR Supervision (IEC62439 Part 3)" },
	{ 0x8901,                 "Flow Layer Internal Protocol" },
	{ 0x8915,                 "RDMA over Converged Ethernet" },
	{ 0xD00D,                "Digium TDM over Ethernet Protocol" },
	{ 0x88B4,                  "WAI Authentication Protocol" },
	{ 0x8926,                "VN-Tag" },
	{ 0x892B,               "Schweitzer Engineering Labs Layer 2 Protocol" },
	{ 0x892F,                  "High-availability Seamless Redundancy (IEC62439 Part 3)" },
	{ 0x08FF,                  "AX.25" },
	{ 0x8909,                  "CiscoMetaData" },
	{ 0x8947,        "GeoNetworking" },
	{ 0xC0DE,                  "eXpressive Internet Protocol" },
	{ 0xC0DF,                  "Neighborhood Watch Protocol" },
	{ 0x892D,              "bluecom Protocol" },
	{ 0x9100,             "QinQ: old non-standard 802.1ad" },
	{ 0x99FE,                "Technically Enhanced Capture Module Protocol (TECMP)" },
	{ 0xA0ED,              "6LoWPAN" },
	{ 0xD28B,                 "Arista Timestamp" },
	{ 0xAEFE,                "eCPRI" },
	{ 0xB4E3,            "CableLabs Layer-3 Protocol" },
	{ 0xFFF2,             "Cisco ACI ARP gleaning" },
	{ 0xF1C1,         "802.1CB Frame Replication and Elimination for Reliability" },
	{ 0, NULL }
};

以太网(Ether Type)是以太网帧中的一个重要字段,用来指明应用于帧数据段的协议,即要封装的上层协议类型。
数据(Data):存储被封装的上层数据,长度在46字节到1500字节之间。
帧校验序列(Frame Check Sequence):简称FCS,长度为4字节,包含了CRC计算的结果。

Ethernet 802.3 raw 帧格式

Ethernet 802.3 raw又称 Novell Ethernet,它将Ethernet II帧首部中的类型字段变成了长度字段,紧接着用来个内容为十六进制数0xFFFF字段标识Novell以太网类型,数据字段缩小为44~1498个字节。

在这里插入图片描述
这个 802.3 数据包的粗略版本,被命名为“以太网 802.3”,是在 IEEE 802.3 标准和流行的 IPX/SPX 协议广泛建立之前由 Novell 提出的,不幸的是,它经常与 IEEE 标准混淆。因此,Novell 在名称中添加了“raw”。

Ethernet IEEE 802.3

以太网 IEEE 802.3 是目前最流行和最广泛使用的 LAN 帧结构。 但是,某些网络和协议需要更多空间来存储特定信息。 因此,存在 IEEE 802.3 帧的变体,为特定信息提供附加数据块,其中包括 SNAP 扩展和 VLAN 标记。
在这里插入图片描述
目的服务访问点(Destination Service Access Point):简称DSAP,用于标识目的协议。如十六进制数0x06代表IP协议数据,十六进制数0xE0代表Novell类型协议数据。
源服务访问点(Source Service Access Point):简称SSAP,用于指定源协议(通常与目的协议相同)
控制(Control):指明该帧是无编号格式还是信息/监督格式,一般设为0x03。指明采用无连接服务802.2无编号数据格式。

Ethernet IEEE 802.3 SNAP

在这里插入图片描述Ethernet IEEE 802.3 SNAP帧格式与上述的802.3帧最大的区别是增加了一个5字节SNAP标识。另外,这两个字节DSAP和SSAP字段内容被固定下来,其值为0xAA。控制字段内容也被固定保存下来,其值为十六进制0x03

总结

对于目前存在的4种以太网帧格式,网络设备就是根据上述规定进行识别的,首先识别出Ethernet II帧,如果帧首部源地址后面的两字节(长度、类型字段)的值大于1500,则此帧格式为Ethernet II格式。否则为其他格式。

接着我们在区分其他3种格式,长度字段和类型字段为值0xFFFF,则为Novell Ether(Ethernet 802.3 raw )帧,如果值为0xAAAA,则为Ethernet IEEE 802.3 SNAP,剩下就是IEEE 802.3格式的帧。

欢迎关注微信公众号【程序猿编码】,欢迎添加本人微信号(c17865354792)交流学习。

参考:RFC 894、RFC 1042

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值