MAC(Media Access Control)即媒体访问控制子层协议。网络
该部分有两个概念:MAC能够是一个硬件控制器 及 MAC通讯以协议。该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与链接物理层的物理介质。数据结构
MAC硬件大约就是下面的样子:ide
在发送数据的时候,MAC协议能够事先判断是否能够发送数据,若是能够发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,若是没有错误,则去掉控制信息发送至LLC(逻辑链路控制)层。该层协议是以太网MAC由IEEE-802. 3以太网标准定义。spa
以太网数据链路层其实包含MAC(介质访问控制)子层和LLC(逻辑链路控制)子层。一块以太网卡MAC芯片的做用不但要实现MAC子层和LLC子层的功能,还要提供符合规范的PCI界面以实现和主机的数据交换。操作系统
MAC从PCI总线收到IP数据包(或者其余网络层协议的数据包)后,将之拆分并从新打包成最大1518Byte、最小64Byte的帧。这个帧里面包括了目标MAC地址、本身的源MAC地址和数据包里面的协议类型(好比IP数据包的类型用80表示,最后还有一个DWORD(4Byte)的CRC码。设计
但是目标的MAC地址是哪里来的呢?这牵扯到一个ARP协议(介乎于网络层和数据链路层的一个协议)。第一次传送某个目的IP地址的数据的时候,先会发出一个ARP包,其MAC的目标地址是广播地址,里面说到:“谁是xxx.xxx.xxx.xxx这个IP地址的主人?”由于是广播包,全部这个局域网的主机都收到了这个ARP请求。收到请求的主机将这个IP地址和本身的相比较,若是不相同就不予理会,若是相同就发出ARP响应包。这个IP地址的主机收到这个ARP请求包后回复的ARP响应里说到:“我是这个IP地址的主人”。这个包里面就包括了他的MAC地址。之后的给这个IP地址的帧的目标MAC地址就被肯定了。(其它的协议如IPX/SPX也有相应的协议完成这些操做)。3d
IP地址和MAC地址之间的关联关系保存在主机系统里面,叫作ARP表。由驱动程序和操做系统完成。在Microsoft的系统里面能够用arp-a 的命令查看ARP表。收到数据帧的时候也是同样,作完CRC校验之后,若是没有CRC效验错误,就把帧头去掉,把数据包拿出来经过标准的接口传递给驱动和上层的协议栈。最终正确的达到咱们的应用程序。blog
还有一些控制帧,例如流控帧也须要MAC直接识别并执行相应的行为。接口
以太网MAC芯片的一端接计算机PCI总线,另一端就接到PHY芯片上,它们之间是经过MII接口连接的。ci
一个MAC的结构图以下图所示:
第二部分、什么是MII
MII(Media Independent Interface)即媒体独立接口,MII接口是MAC与PHY链接的标准接口。它是IEEE-802.3定义的以太网行业标准。MII接口提供了MAC与PHY之间、PHY与STA(Station Management)之间的互联技术,该接口支持10Mb/s与100Mb/s的数据传输速率,数据传输的位宽为4位。"媒体独立"代表在不对MAC硬件从新设计或替换的状况下,任何类型的PHY设备均可以正常工做。802.3协议最多支持32个PHY,但有必定的限制:要符合协议要求的connector特性。MII接口以下图所示:
后来还有GMII(1Gbps)、10GMII、25GMII、200GMII和500GMII等。
提到MII,就有可能涉及到RS,PLS,STA等名词术语,下面讲一下他们之间对应的关系。
所谓RS即Reconciliation sublayer,它的主要功能主要是提供一种MII和MAC/PLS之间的信号映射机制。它们(RS与MII)之间的关系以下图:
MII的Management Interface是与STA(Station Management)相连的。
注:关于本节,具体可参考IEEE以太网标准802.3的22.3 Signal timing characteristics节,其中包含时钟信号等更详细内容。
MII接口主要包括四个部分:
一是从MAC层到PHY层的发送数据接口;
二是从PHY层到MAC层的接收数据接口;
三是从PHY层到MAC层的状态指示信号;
四是MAC层和PHY层之间传送控制和状态信息的MDIO接口。
MII包括一个数据接口,以及一个MAC和PHY之间的管理接口:
※数据接口: 包括分别用于发送器和接收器的两条独立信道。每条信道都有本身的数据、时钟和控制信号。MII数据接口总共须要16个信号,包括
※TX_ER(transmit coding error): TX_ER同步于TX_CLK,在数据传输过程当中,若是TX_ER有效超过一个时钟周期,而且此时TX_EN是有效的,则数据通道中传输的数据是无效的,没用的。注:当TX_ER有效并不影响工做在10Mb/s的PHY或者TX_EN无效时的数据传输。在MII接口的连线中,若是TX_ER信号线没有用到,必须将它下拉接地。
※TXD<3:0>(transmit data): TXD由RS驱动,同步于TX_CLK,在TX_CLK的时钟周期内,而且TX_EN有效,TXD上的数据被PHY接收,不然TXD的数据对PHY没有任何影响。
※TX_EN: 发送使能。TX_EN由Reconciliation子层根据TX_CLK上升沿同步进行转换。
※TX_CLK(transmit clock): TX_CLK (Transmit Clock)是一个连续的时钟信号(即系统启动,该信号就一直存在),它是TX_EN, TXD, and TX_ER(信号方向为从RS到PHY)的参考时钟,TX_CLK由PHY驱动TX_CLK的时钟频率是数据传输速率的25%,误差±100ppm。例如,100Mb/s模式下,TX_CLK时钟频率为25MHz,占空比在35%至65%之间。
※COL(collision detected): COL不须要同步于参考时钟。The behavior of the COL signal is unspecified when the duplex mode bit0.8 inthe control register is set to a logic one(自动协商禁止,人工设为全双工模式), or when the Auto-Negotiation process selects a full duplex mode of operation。即半双工模式信号有效,全双工模式信号无效。
※RXD<3:0>(receive data): RXD由RS驱动,同步于RX_CLK,在RX_CLK的时钟周期内,而且RX_DV有效,RXD上的数据被RS接收,不然RXD的数据对RS没有任何影响。While RX_DV is de-asserted, the PHY may provide a False Carrier indication by asserting the RX_ER signal while driving the value <1110> onto RXD<3:0>。
※RX_ER(receive error): RX_ER同步于RX_CLK,其在RX通道中的做用相似于TX_ER对于TX通道数据传输的影响。
※RX_CLK: 它与TX_CLK具备相同的要求,所不一样的是它是RX_DV, RXD, and RX_ER(信号方向是从PHY到RS)的参考时钟。RX_CLK一样是由PHY驱动,PHY可能从接收到的数据中提取时钟RX_CLK,也有可能从一个名义上的参考时钟(e.g., the TX_CLK reference)来驱动RX_CLK。
※CRS(carrier sense): CRS不须要同步于参考时钟,只要通道存在发送或者接收过程,CRS就须要有效。The behavior of the CRS signal is unspecified when the duplex mode bit0.8 inthe control register is set to a logic one(自动协商禁止,人工设为全双工模式), or when the Auto-Negotiation process selects a full duplex mode of operation,即半双工模式信号有效,全双工模式信号无效。
※RX_DV(Receive Data Valid): RXD_DV同步于RX_CLK,被PHY驱动,它的做用如同于发送通道中的TX_EN,不一样的是在时序上稍有一点差异:为了让数据可以成功被RS接收,要求RXD_DV有效的时间必须覆盖整个FRAME的过程,即starting no later than the Start Frame Delimiter (SFD) and excluding any End-of-Frame delimiter。
※MII以4位半字节方式传送数据双向传输,时钟速率25MHz。其工做速率可达100Mb/s。
※MII管理接口: 是个双信号接口,经过管理接口,MAC就能监视和控制PHY。其管理是使用SMI(Serial Management Interface) 总线经过读写PHY的寄存器来完成的。一个是时钟信号(***MDC (management data clock)***)。另外一个是数据信号(***MDIO (management data input/output)***)。
※MDC: 由站管理实体向PHY提供,做为在MDIO信号上传送信息的定时参考。 MDC是一种非周期性的信号,没有最高或最低时间。 不管TX_CLK和RX_CLK的标称周期如何,MDC的最小高低时间应为160 ns,MDC的最小周期为400 ns。
※MDIO: 是PHY和STA之间的双向信号。 它用于在PHY和STA之间传输控制信息和状态。 控制信息由STA同步地针对MDC驱动而且由PHY同步地采样。 状态信息由PHY针对MDC同步驱动并由STA同步采样。
PHY 里面的部分寄存器是IEEE定义的,这样PHY把本身的目前的状态反映到寄存器里面,MAC 经过SMI 总线不断读取PHY 的状态寄存器以得知目前PHY 的状态。例如链接速度、双工的能力等。固然也能够经过SMI设置PHY的寄存器达到控制的目的。例如流控的打开关闭、自协商模式仍是强制模式等。不管是物理链接的MII总线和SMI总线仍是PHY的状态寄存器和控制寄存器都是由IEEE的规范的。所以不一样公司的MAC和PHY同样能够协调工做。固然为了配合不一样公司的PHY的本身特有的一些功能,驱动须要作相应的修改。
MII支持10Mbps和100Mbps的操做,一个接口由14根线组成,它的支持仍是比较灵活的。可是有一个缺点是由于它一个端口用的信号线太多,若是一个8端口的交换机要用到112根线,16端口就要用到224根线,到32端口的话就要用到448根线。通常按照这个接口作交换机是不太现实的。因此现代的交换机的制做都会用到其它的一些从MII简化出来的标准,好比RMII、SMII、GMII等。
RMII(Reduced Media Independant Interface,简化媒体独立接口)是标准的以太网接口之一,比MII有更少的I/O传输。RMII口是用两根线来传输数据的,MII口是用4根线来传输数据的,GMII是用8根线来传输数据的。MII/RMII只是一种接口,对于10Mbps线速,MII的时钟速率是2.5MHz就能够了,RMII则须要5MHz;对于100Mbps线速,MII须要的时钟速率是25MHz,RMII则是50MHz。
MII/RMII用于传输以太网包,在MII/RMII接口是4/2bit的,在以太网的PHY里须要作串并转换,编解码等才能在双绞线和光纤上进行传输,其帧格式遵循IEEE 802.3(10M)/IEEE 802.3u(100M)/IEEE 802.1q(VLAN)。
以太网帧的格式为:前导符+开始位+目的mac地址+源mac地址+类型/长度+数据+padding(optional)+32bitCRC。
若是有vlan,则要在类型/长度后面加上2个字节的vlan tag,其中12bit来表示vlan id,另外4bit表示数据的优先级。
GMII是千兆网的MII接口,这个也有相应的RGMII接口,表示简化了的GMII接口。
GMII采用8位接口数据,工做时钟125MHz,所以传输速率可达1000Mbps。同时兼容MII所规定的10/100 Mbps工做方式。GMII接口数据结构符合IEEE以太网标准,该接口定义见IEEE 802.3。
发送器:
在千兆速率下,向PHY提供GTXCLK信号、TXD、TXEN、TXER信号与此时钟信号同步。不然在10/100Mbps速率下,PHY提供TXCLK时钟信号,其它信号与此信号同步。其工做频率为25MHz(100M网络)或2.5MHz(10M网络)。
※GTXCLK——吉比特TX…信号的时钟信号(125MHz)
※TXCLK——10/100Mbps信号时钟
※TXD[7…0]——被发送数据
※TXEN——发送器使能信号
※TXER——发送器错误(用于破坏一个数据包)
接收器:
※RXCLK——接收时钟信号(从收到的数据中提取,所以与GTXCLK无关联)
※RXD[7…0]——接收数据
※RXDV——接收数据有效指示
※RXER——接收数据出错指示
※COL——冲突检测(仅用于半双工状态)
管理配置: 管理配置接口控制PHY的特性。该接口有32个寄存器地址,每一个地址16位。其中前16个已经在“IEEE 802.3,2000-22.2.4 Management Functions”中规定了用途,其他的则由各器件本身指定。
※MDC——配置接口时钟
※MDIO——配置接口I/O