LwIP应用开发实战指南:基于STM32
上QQ阅读APP看书,第一时间看更新

3.1 以太网概述

以太网(Ethernet)是互联网技术的一种,由于它在组网技术中所占比例最高,很多人直接把以太网理解为互联网。但实际上以太网是指遵守IEEE 802.3标准组成的局域网,由IEEE 802.3标准规定的主要是位于参考模型的物理层(PHY层)和数据链路层中的介质访问控制子层(MAC子层)。家庭、企业和学校中所组建的PC局域网一般也是以太网,其标志是使用水晶头网线来连接(当然还有其他形式)。IEEE还有其他局域网标准,如IEEE 802.11是为无线局域网(Wi-Fi)制定的;IEEE 802.15是个人域网,即蓝牙技术,其中的802.15.4标准则是ZigBee技术。

现阶段,工业控制、环境监测、智能家居的嵌入式设备产生了接入互联网的需求,利用以太网技术,嵌入式设备可以非常容易地接入现有的计算机网络中。

3.1.1 PHY层

在PHY层,由IEEE 802.3标准规定了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制。物理层一般是通过一个PHY芯片实现功能的,我们使用的是野火STM32F429挑战者开发板,板载的PHY芯片是LAN8720A。

1.传输介质

传输介质包括同轴电缆、双绞线(水晶头网线是一种双绞线)、光纤。根据不同的传输速度和距离要求,基于这3类介质又衍生出很多不同种类的信号线。最常用的是“五类线”,适用于100BASE-T和10BASE-T网络,它们的网络速率分别为100Mbit/s和10Mbit/s。

2.编码

为了让接收方在没有外部时钟参考的情况下也能确定每一位的起始、结束和中间位置,在传输信号时不直接采用二进制编码。在10BASE-T的传输方式中采用曼彻斯特编码,在100BASE-T中则采用4B/5B编码。

曼彻斯特编码把每一个二进制位的周期分为两个间隔,在表示1时,以前半个周期为高电平,后半个周期为低电平,表示0时则相反,具体如图3-1所示。

图3-1 曼彻斯特编码

采用曼彻斯特编码在每个位周期都有电压变化,便于同步,但这样的编码方式效率太低,只有50%。

在100BASE-T中采用的4B/5B编码是把待发送数据位流的每4位分为一组,以特定的5位编码来表示,这些特定的5位编码能使数据流有足够多的跳变,从而方便达成同步的目的,而且效率也从曼彻斯特编码的50%提高到了80%。

3. CSMA/CD冲突检测

早期的以太网大多是多个节点连接到同一条网络总线上(总线型网络),存在信道竞争问题,因而每个连接到以太网上的节点都必须具备冲突检测功能。以太网具备CSMA/CD冲突检测机制,如果多个节点同时利用同一条总线发送数据,则会产生冲突,总线上的节点可通过将接收到的信号与原始发送的信号进行比较来检测是否存在冲突,若存在冲突,则停止发送数据,随机等待一段时间再重新发送。

现在组建大多数局域网时,很少采用总线型网络,更多的是将一个设备接入一个独立的路由或交换机接口,组成星形网络,不会产生冲突。但为了兼容,新出的产品还是带有冲突检测机制。

3.1.2 MAC子层

1. MAC子层的功能

MAC子层属于数据链路层的下半部分,主要负责与物理层进行数据交接,如是否可以发送数据、发送的数据是否正确、对数据流进行控制等。它自动对来自上层的数据包加上一些控制信号,交给物理层。接收方得到正常数据后,自动去除MAC控制信号,把该数据包交给上层。

2. MAC数据包

IEEE对以太网上传输的数据包格式也进行了统一规定,如图3-2所示,该数据包称为MAC数据包。

图3-2 MAC数据包格式

①发送FCS时,首先发送位31,最后发送位0。

MAC数据包由前导字段、帧起始定界符(SFD)、目标地址(DA)、源地址(SA)、数据包的类型/长度、数据域、填充域、校验和域(FCS)组成。

● 前导字段:也称报头,这是一段方波,用于使收发节点的时钟同步,内容为连续7个字节的0x55。字段和帧起始定界符在MAC收到数据包后会自动过滤掉。

● 帧起始定界符:用于区分前导字段与数据域,内容为0xD5。

● MAC地址:由48位数字组成,是网卡的物理地址。在以太网传输的最底层,就是根据MAC地址来收发数据的。部分MAC地址用于广播和多播,在同一个网络里不能有两个相同的MAC地址。PC的网卡在出厂时已经设置好了MAC地址,但也可以通过一些软件来进行修改,在嵌入式的以太网控制器中可由程序进行配置。数据包中的DA是目标地址,SA是源地址。

● 数据包的类型/长度:本区域可以用来描述本MAC数据包是属于TCP/IP层的IP包、ARP包还是SNMP包,也可以用来描述本MAC数据包数据段的长度。如果该值大于0x0600,则不用于长度描述,而是用于描述类型,表示与以太网帧相关的MAC客户端协议的种类。

● 数据域:数据域是MAC包的核心内容,包含的数据来自MAC的上层。其长度可以在0~1500字节间变化。

● 填充域:由于协议要求整个MAC数据包的长度至少为64字节(接收到的数据包如果少于64字节,会被认为发生冲突,数据包被自动丢弃),当数据域的字节少于46字节时,在填充域会自动填上无效数据,以使数据包符合长度要求。

● 校验和域:MAC数据包的尾部是校验和域,它保存了CRC校验序列,用于检错。

以上是标准的MAC数据包,IEEE 802.3同时还规定了扩展的MAC数据包,它是在标准的MAC数据包的SA和数据包类型之间添加4个字节的QTag前缀字段,用于获取标志的MAC帧。前2个字节固定为0x8100,用于识别QTag前缀的存在,后两个字节分别为3个位的用户优先级、1个位的标准格式指示符(CFI)和一个12位的VLAN标识符。