目录

以太网在osi模型中的位置

以太网帧结构

关于帧类型和数据体

ethernet II与IEEE802.3的区别

为什么IEEE802.3需要标记有效字节数呢?

那么ethernet II如何标记数据体的长度呢?


来源How the Ethernet Protocol Works – A Complete Guide

https://www.youtube.com/watch?v=fRHkZPtsR5I

https://en.wikipedia.org/wiki/Network_layer 

https://en.wikipedia.org/wiki/IEEE_802.2

以太网在osi模型中的位置

根据7层osi模型,以太网负责最底层的物理层(osi的第一层)和数据链路层(osi的第二层)。

以太网帧结构 vlan tag 以太网帧结构分析_字节数

以太网帧结构

以太网帧的结构包括帧开始标志(这一部分通常被认为不算以太网帧的一部分)、目的MAC地址、源MAC地址、帧类型标志、数据体、校验。

以太网是异步通信。所以以太网帧开头有8字节的帧开始标志。对Ethernet II而言,这八个字节是10101010。对IEEE802.3来说,这8个字节是10101011。

以太网帧结构 vlan tag 以太网帧结构分析_网络层_02

随后是6个字节的目的MAC地址,再然后是6个字节的源MAC字节。随后是2字节的帧类型。这里的“帧类型”描述的是被以太网帧包裹的网络层的协议。网络层是osi模型的第三层。IP协议、IPX协议等都属于这一层。https://en.wikipedia.org/wiki/Network_layer 

数据体后面是校验,占4字节。

以太网帧结构 vlan tag 以太网帧结构分析_网络层_03

关于帧类型和数据体

ethernet II与IEEE802.3的区别

对于ethernet II来说,帧类型取值大于等于1536;对于IEEE802.3来说,帧类型这一项小于等于1500,但是这一项对于IEEE802.3来说不再表示网络层具体的协议类型,而是表示接下来的数据体中的有效字节数。

为什么IEEE802.3需要标记有效字节数呢?

假如网络中有多个终端同时发送以太网帧,那么将造成数据冲突。为了解决这个问题,网卡被设计成如下:当一个终端的网卡发出消息后,它立刻检查自己是否能接收到同样的消息。假如能接收到,则判定发送成功。假如两个冲突的终端距离较远,且各自发出的消息都较短,则在对方的消息到达自己这里之前,自己的消息已经发送完毕,并且已经被自己读取完毕,从而误判没有数据冲突。为避免这个情况,以太网标准要求以太网帧的数据体长度不能少于46字节。假如一个以太网帧的有效数据少于46字节,则多余字节填0。为了能把数据体中的有效字节和多余字节区别开,IEEE802.3使用帧类型项标记有效字节数。

但这样导致IEEE802.3不能使用帧类型项标记网络层的协议类型。于是在帧类型项后面,IEEE802.3增加了所谓的IEEE802.2LLC协议来标记数据体的类型。

根据https://en.wikipedia.org/wiki/IEEE_802.2的说法,LLC后面还可能增加SNAP字段:

以太网帧结构 vlan tag 以太网帧结构分析_以太网帧结构 vlan tag_04

 

那么ethernet II如何标记数据体的长度呢?

它不标记。解析时,有效长度从下一层,也就是网络层的协议头中读取