以太网MAC协议
以太网芯片MAC和PHY知识详解
网口扫盲三:以太网芯片MAC和PHY的关系问:如何实现单片以太网微控制器?答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件.这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小芯片面积.单片以太网微控制器还降低了功耗,特别是在采用掉电模式的情况下. 问:以太网MAC是什么?答:MAC即Media Access Control,即媒体访问控制子层协议.该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质.在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC层.该层协议是以太网MAC由IEEE-802.3以太网标准定义.最新的MAC同时支持10Mbps和100Mbps两种速率.以太网数据链路层其实包含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也有相应的协议完成这些操作.)IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表,由驱动程序和操作系统完成.在Microsoft的系统里面可以用arp-a的命令查看ARP表.收到数据帧的时候也是一样,做完CRC以后,如果没有CRC效验错误,就把帧头去掉,把数据包拿出来通过标准的借口传递给驱动和上层的协议客栈,最终正确的达到我们的应用程序.还有一些控制帧,例如流控帧也需要MAC直接识别并执行相应的行为.以太网MAC芯片的一端接计算机PCI总线,另外一端就接到PHY芯片上,它们之间是通过MII 接口链接的.问:什么是MII?答:MII即媒体独立接口,它是IEEE-802.3定义的以太网行业标准."媒体独立"表明在不对MAC 硬件重新设计或替换的情况下,任何类型的PHY设备都可以正常工作.它包括一个数据接口,以及一个MAC和PHY之间的管理接口.∙数据接口包括分别用于发送器和接收器的两条独立信道.每条信道都有自己的数据,时钟和控制信号.MII数据接口总共需要16个信号,包括TX_ER,TXD<3:0>,TX_EN,TX_CLK, COL,RXD<3:0>,RX_EX,RX_CLK,CRS,RX_DV等.MII以4位半字节方式传送数据双向传输,时钟速率25MHz.其工作速率可达100Mb/s;∙MII管理接口是个双信号接口,一个是时钟信号,另一个是数据信号.通过管理接口,上层能监视和控制PHY.其管理是使用SMI(Serial Management Interface)总线通过读写PHY的寄存器来完成的.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是简化的MII接口,在数据的收发上它比MII接口少了一倍的信号线,所以它一般要求是50MHz的总线时钟.RMII一般用在多端口的交换机,它不是每个端口安排收,发两个时钟,而是所有的数据端口公用一个时钟用于所有端口的收发,这里就节省了不少的端口数目.RMII的一个端口要求7个数据线,比MII少了一倍,所以交换机能够接入多一倍数据的端口.和MII一样,RMII支持10Mbps和100Mbps的总线接口速度.SMII是由思科提出的一种媒体接口,它有比RMII更少的信号线数目,S表示串行的意思.因为它只用一根信号线传送发送数据,一根信号线传输接受数据,所以为了满足100Mbps的总线接口速度的需求,它的时钟频率就达到了125MHz,为什么用125MHz,是因为数据线里面会传送一些控制信息.SMII一个端口仅用4根信号线完成100Mbps的传输,比起RMII差不多又少了一倍的信号线.SMII在工业界的支持力度是很高的.同理,所有端口的数据收发都公用同一个外部的125MHz时钟.GMII是千兆网的MII接口,这个也有相应的RGMII接口,表示简化了的GMII接口.MII总线在IEEE802.3中规定的MII总线是一种用于将不同类型的PHY与相同网络控制器(MAC)相连接的通用总线.网络控制器可以用同样的硬件接口与任何PHY .GMII(Gigabit MII)GMII采用8位接口数据,工作时钟125MHz,因此传输速率可达1000Mbps.同时兼容MII所规定的10/100 Mbps工作方式.GMII接口数据结构符合IEEE以太网标准.该接口定义见IEEE 802.3-2000.发送器:∙GTXCLK——吉比特TX..信号的时钟信号(125MHz)∙TXCLK——10/100Mbps信号时钟∙TXD[7..0]——被发送数据∙TXEN——发送器使能信号∙TXER——发送器错误(用于破坏一个数据包)注:在千兆速率下,向PHY提供GTXCLK信号,TXD,TXEN,TXER信号与此时钟信号同步.否则,在10/100Mbps速率下,PHY提供TXCLK时钟信号,其它信号与此信号同步.其工作频率为25MHz(100M网络)或2.5MHz(10M网络).接收器:∙RXCLK——接收时钟信号(从收到的数据中提取,因此与GTXCLK无关联)∙RXD[7..0]——接收数据∙RXDV——接收数据有效指示∙RXER——接收数据出错指示∙COL——冲突检测(仅用于半双工状态)管理配置∙MDC——配置接口时钟∙MDIO——配置接口I/O管理配置接口控制PHY的特性.该接口有32个寄存器地址,每个地址16位.其中前16个已经在"IEEE 802.3,2000-22.2.4 Management Functions"中规定了用途,其余的则由各器件自己指定. 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 表示数据的优先级!问:以太网PHY是什么?答:PHY是物理接口收发器,它实现物理层.IEEE-802.3标准定义了以太网PHY.包括MII/GMII(介质独立接口)子层,PCS(物理编码子层),PMA(物理介质附加)子层,PMD(物理介质相关)子层,MDI 子层.它符合IEEE-802.3k中用于10BaseT(第14条)和100BaseTX(第24条和第25条)的规范. PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据而不管什么地址,数据还是CRC.对于100BaseTX因为使用4B/5B编码,每4bit就增加1bit的检错码),然后把并行数据转化为串行流数据,再按照物理层的编码规则把数据编码,再变为模拟信号把数据送出去.收数据时的流程反之.PHY还有个重要的功能就是实现CSMA/CD的部分功能.它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去.如果两个碰巧同时送出了数据,那样必将造成冲突,这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据.这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突.许多网友在接入Internt宽带时,喜欢使用”抢线”强的网卡,就是因为不同的PHY碰撞后计算随机时间的方法设计上不同,使得有些网卡比较”占便宜”.不过,抢线只对广播域的网络而言的,对于交换网络和ADSL这样点到点连接到局端设备的接入方式没什么意义.而且”抢线”也只是相对而言的,不会有质的变化.现在交换机的普及使得交换网络的普及,使得冲突域网络少了很多,极大地提高了网络的带宽.但是如果用HUB,或者共享带宽接入Internet的时候还是属于冲突域网络,有冲突碰撞的.交换机和HUB最大的区别就是:一个是构建点到点网络的局域网交换设备,一个是构建冲突域网络的局域网互连设备.除此之外PHY还提供了和对端设备连接的重要功能并通过LED灯显示出自己目前的连接的状态和工作状态让我们知道.当我们给网卡接入网线的时候,PHY不断发出的脉冲信号检测到对端有设备,它们通过标准的”语言”交流,互相协商并却定连接速度、双工模式、是否采用流控等.通常情况下,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式.这个技术被称为AutoNegotiation或者NWAY,它们是一个意思–自动协商.具体传输过程为,发送数据时,网卡首先侦听介质上是否有载波(载波由电压指示),如果有,则认为其他站点正在传送信息,继续侦听介质.一旦通信介质在一定时间段内(称为帧间缝隙IFG=9.6微秒)是安静的,即没有被其他站点占用,则开始进行帧数据发送,同时继续侦听通信介质,以检测冲突.在发送数据期间,如果检测到冲突,则立即停止该次发送,并向介质发送一个“阻塞”信号,告知其他站点已经发生冲突,从而丢弃那些可能一直在接收的受到损坏的帧数据,并等待一段随机时间(CSMA/CD确定等待时间的算法是二进制指数退避算法).在等待一段随机时间后,再进行新的发送.如果重传多次后(大于16次)仍发生冲突,就放弃发送.接收时,网卡浏览介质上传输的每个帧,如果其长度小于64字节,则认为是冲突碎片.如果接收到的帧不是冲突碎片且目的地址是本地地址,则对帧进行完整性校验,如果帧长度大于1518字节(称为超长帧,可能由错误的LAN驱动程序或干扰造成)或未能通过CRC校验,则认为该帧发生了畸变.通过校验的帧被认为是有效的,网卡将它接收下来进行本地处理.问:造成以太网MAC和PHY单片整合难度高的原因是什么?答:PHY整合了大量模拟硬件,而MAC是典型的全数字器件.芯片面积及模拟/数字混合架构是为什么先将MAC集成进微控制器而将PHY留在片外的原因.更灵活、密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合.问: 网卡上除RJ-45接口外,还需要其它元件吗?答:PHY和MAC是网卡的主要组成部分,网卡一般用RJ-45插口,10M网卡的RJ-45插口也只用了1,2,3,6四根针,而100M或1000M网卡的则是八根针都是全的.除此以外,还需要其它元件,因为虽然PHY提供绝大多数模拟支持,但在一个典型实现中,仍需外接6,7只分立元件及一个局域网绝缘模块.绝缘模块一般采用一个1:1的变压器.这些部件的主要功能是为了保护PHY 免遭由于电气失误而引起的损坏.另外,一颗CMOS制程的芯片工作的时候产生的信号电平总是大于0V的(这取决于芯片的制程和设计需求),但是这样的信号送到100米甚至更长的地方会有很大的直流分量的损失.而且如果外部网线直接和芯片相连的话,电磁感应(打雷)和静电,很容易造成芯片的损坏.再就是设备接地方法不同,电网环境不同会导致双方的0V电平不一致,这样信号从A传到B,由于A 设备的0V电平和B点的0V电平不一样,这样会导致很大的电流从电势高的设备流向电势低的设备.为了解决以上问题Transformer(隔离变压器)这个器件就应运而生.它把PHY送出来的差分信号用差模耦合的线圈耦合滤波以增强信号,并且通过电磁场的转换耦合到连接网线的另外一端.这样不但使网线和PHY之间没有物理上的连接而换传递了信号,隔断了信号中的直流分量,还可以在不同0V电平的设备中传送数据.隔离变压器本身就是设计为耐2KV~3KV的电压的.也起到了防雷感应(我个人认为这里用防雷击不合适)保护的作用.有些朋友的网络设备在雷雨天气时容易被烧坏,大都是PCB设计不合理造成的,而且大都烧毁了设备的接口,很少有芯片被烧毁的,就是隔离变压器起到了保护作用.隔离变压器本身是个被动元件,只是把PHY的信号耦合了到网线上,并没有起到功率放大的作用.那么一张网卡信号的传输的最长距离是谁决定的呢?一张网卡的传输最大距离和与对端设备连接的兼容性主要是PHY决定的.但是可以将信号送的超过100米的PHY其输出的功率也比较大,更容易产生EMI的问题.这时候就需要合适的Transformer与之配合.作PHY的老大公司Marvell的PHY,常常可以传送180~200米的距离,远远超过IEEE的100米的标准.RJ-45的接头实现了网卡和网线的连接.它里面有8个铜片可以和网线中的4对双绞(8根)线对应连接.其中100M的网络中1,2是传送数据的,3,6是接收数据的.1,2之间是一对差分信号,也就是说它们的波形一样,但是相位相差180度,同一时刻的电压幅度互为正负.这样的信号可以传递的更远,抗干扰能力强.同样的,3,6也一样是差分信号.网线中的8根线,每两根扭在一起成为一对.我们制作网线的时候,一定要注意要让1,2在其中的一对,3,6在一对.否则长距离情况下使用这根网线的时候会导致无法连接或连接很不稳定. 现在新的PHY支持AUTO MDI-X功能(也需要Transformer支持).它可以实现RJ-45接口的1,2上的传送信号线和3,6上的接收信号线的功能自动互相交换.有的PHY甚至支持一对线中的正信号和负信号的功能自动交换.这样我们就不必为了到底连接某个设备需要使用直通网线还是交叉网线而费心了.这项技术已经被广泛的应用在交换机和SOHO路由器上.在1000Basd-T网络中,其中最普遍的一种传输方式是使用网线中所有的4对双绞线,其中增加了4,5和7,8来共同传送接收数据.由于1000Based-T网络的规范包含了AUTOMDI-X功能,因此不能严格确定它们的传出或接收的关系,要看双方的具体的协商结果.一片网卡主要功能的实现就基本上是上面这些器件了.其他的,还有一颗EEPROM芯片,通常是一颗93C46.里面记录了网卡芯片的供应商ID,子系统供应商ID,网卡的MAC地址,网卡的一些配置,如SMI总线上PHY的地址,BOOTROM的容量,是否启用BOOTROM引导系统等东西.很多网卡上还有BOOTROM这个东西.它是用于无盘工作站引导操作系统的.既然无盘,一些引导用必需用到的程序和协议栈就放到里面了,例如RPL,PXE等.实际上它就是一个标准的PCI ROM.所以才会有一些硬盘写保护卡可以通过烧写网卡的BootRom来实现.其实PCI设备的ROM是可以放到主板BIOS里面的.启动电脑的时候一样可以检测到这个ROM并且正确识别它是什么设备的.AGP在配置上和PCI很多地方一样,所以很多显卡的BIOS也可以放到主板BIOS里面.这就是为什么板载的网卡我们从来没有看到过BOOTROM的原因.最后就是电源部分了.大多数网卡现在都使用3.3V或更低的电压.有的是双电压的.因此需要电源转换电路.而且网卡为了实现Wake on line功能,必须保证全部的PHY和MAC的极少一部分始终处于有电的状态,这需要把主板上的5V Standby电压转换为PHY工作电压的电路.在主机开机后,PHY 的工作电压应该被从5V转出来的电压替代以节省5V Standby的消耗.(许多劣质网卡没有这么做).有Wake on line功能的网卡一般还有一个WOL的接口.那是因为PCI2.1以前没有PCI设备唤醒主机的功能,所以需要着一根线通过主板上的WOL的接口连到南桥里面以实现WOL的功能.新的主板合网卡一般支持PCI2.2/2.3,扩展了PME#信号功能,不需要那个接口而通过PCI总线就可以实现唤醒功能.我们现在来看两个图MAC和PHY分开的以太网卡MAC和PHY集成在一颗芯片的以太网卡上图中各部件为:①RJ-45接口②Transformer(隔离变压器)③PHY芯片④MAC芯片⑤EEPROM⑥BOOTROM插槽⑦WOL接头⑧晶振⑨电压转换芯片⑩LED指示灯网卡的功能主要有两个:一是将电脑的数据封装为帧,并通过网线(对无线网络来说就是电磁波)将数据发送到网络上去;二是接收网络上其它设备传过来的帧,并将帧重新组合成数据,发送到所在的电脑中.网卡能接收所有在网络上传输的信号,但正常情况下只接受发送到该电脑的帧和广播帧,将其余的帧丢弃.然后,传送到系统CPU做进一步处理.当电脑发送数据时,网卡等待合适的时间将分组插入到数据流中.接收系统通知电脑消息是否完整地到达,如果出现问题,将要求对方重新发送.问:10BaseT和100BaseTX PHY实现方式不同的原因何在?答:两种实现的分组描述本质上是一样的,但两者的信令机制完全不同.其目的是阻止一种硬件实现容易地处理两种速度.10BaseT采用曼彻斯特编码,100BaseTX采用4B/5B编码.问:什么是曼彻斯特编码?答:曼彻斯特编码又称曼彻斯特相位编码,它通过相位变化来实现每个位(图2).通常,用一个时钟周期中部的上升沿表示“1”,下降沿表示“0”.周期末端的相位变化可忽略不计,但有时又可能需要将这种相位变化计算在内,这取决于前一位的值.问:什么是4B/5B编码?答:4B/5B编码是一种块编码方式.它将一个4位的块编码成一个5位的块.这就使5位块内永远至少包含2个“1”转换,所以在一个5位块内总能进行时钟同步.该方法需要25%的额外开销. 问:网卡的MAC和PHY间的关系?答:网卡工作在osi的最后两层,物理层和数据链路层,物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口.物理层的芯片称之为PHY.数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能.以太网卡中数据链路层的芯片称之为MAC控制器.很多网卡的这两个部分是做到一起的.他们之间的关系是pci总线接mac总线,mac接phy,phy接网线(当然也不是直接接上的,还有一个变压装置).PHY和MAC之间是如何传送数据和相互沟通的.通过IEEE定义的标准的MII/GigaMII(Media Independed Interfade,介质独立界面)界面连接MAC和PHY.这个界面是IEEE定义的.MII界面传递了网络的所有数据和数据的控制.ETHERNET的接口实质是MAC通过MII总线控制PHY的过程.问:网线上传输的是模拟信号还是数字信号?答:是模拟信号.因为它传出和接收是采用的模拟的技术.虽然它传送的信息是数字的(并不是传送的信息是数字的信号就可以叫做数字信号).简单的例子:我们知道电话是模拟信号,但是当我们拨号上网的时候,电话线里传送的是数字信息,但信号本身依旧是模拟的.然而ADSL同样是通过电话线传送的,却是数字信号.这取决于它传出和接受采用的技术.问:若操作系统没有加载网卡驱动,网卡虽然在系统设备树上,但网卡接口创建不了,那网卡实际能不能接收到数据?答:这里面有很多细节, 我根据Intel网卡的Spec大概写了写, 想尽量写的通俗一些,所以没有刻意用Spec里的术语,另外本文虽然讲的是MAC/PHY,但光口卡的(SERDES)也是类似的.1.PCI设备做reset以后进入D0uninitialized(非初始化的D0状态, 参考PCI电源管理规范),此时网卡的MAC和DMA都不工作,PHY是工作在一个特殊的低电源状态的;2.操作系统创建设备树时,初始化这个设备,PCI命令寄存器的Memory Access Enable orthe I/O Access Enable bit会被enable, 这就是D0active.此时PHY/MAC就使能了;3.PHY被使能应该就可以接收物理链路上的数据了,否则不能收到FLP/NLP, PHY就不能建立物理连接.但这类包一般是流量间歇发送的;4.驱动程序一般要通过寄存器来控制PHY, 比如自动协商speed/duplex, 查询物理链路的状态Link up/down;5.MAC被使能后, 如果没有驱动设置控制寄存器的一个位(CTRL.SLU )的话, MAC和PHY是不能通讯的, 就是说MAC不知道PHY的link已经ready, 所以收不到任何数据的.这位设置以后, PHY完成自协商, 网卡才会有个Link change的中断,知道物理连接已经Link UP了;6.即使Link已经UP, MAC还需要enable接收器的一个位(RCTL.RXEN ),包才可以被接收进来,如果网卡被reset,这位是0,意味着所有的包都会被直接drop掉,不会存入网卡的FIFO.老网卡在驱动退出前利用这位关掉接收.Intel的最新千兆网卡发送接收队列的动态配置就是依靠这个位的,重新配置的过程一定要关掉流量;7.无论驱动加载与否, 发生reset后,网卡EEPOM里的mac地址会写入网卡的MAC地址过滤寄存器, 驱动可以去修改这个寄存器,现代网卡通常支持很多MAC地址,也就是说,MAC地址是可以被软件设置的.例如,Intel的千兆网卡就支持16个单播MAC地址,但只有1个是存在EEPROM里的,其它是软件声称和设置的;8.但如果驱动没有加载,网卡已经在设备树上,操作系统完成了步骤1-2的初始化,此时网卡的PHY应该是工作的,但因为没有人设置控制位(CTRL.SLU)来让MAC和PHY建立联系,所以MAC是不收包的.这个控制位在reset时会再设置成0;9.PHY可以被软件设置加电和断电, 断电状态除了接收管理命令以外,不会接收数据.另外,PHY还能工作在Smart Power Down模式下,link down就进入省电状态;10.有些多口网卡,多个网口共享一个PHY, 所以BIOS里设置disbale了某个网口, 也未必会把PHY的电源关掉,反过来,也要小心地关掉PHY的电源;11.要详细了解PHY,最终还是要熟悉IEEE以太网的相关协议.。
以太网原理:MAC和PHY
以太网设计FAQ:以太网MAC和PHY问:如何实现单片以太网微控制器?答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件。
这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小芯片面积。
单片以太网微控制器还降低了功耗,特别是在采用掉电模式的情况下。
问:以太网MAC是什么?答:MAC就是媒体接入控制器。
以太网MAC由IEEE-802.3以太网标准定义。
它实现了一个数据链路层。
最新的MA C同时支持10Mbps和100Mbps两种速率。
通常情况下,它实现MII接口。
问:什么是MII?答:MII即媒体独立接口,它是IEEE-802.3定义的以太网行业标准。
它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1)。
数据接口包括分别用于发送器和接收器的两条独立信道。
每条信道都有自己的数据、时钟和控制信号。
MII数据接口总共需要16个信号。
管理接口是个双信号接口:一个是时钟信号,另一个是数据信号。
通过管理接口,上层能监视和控制PHY。
问:以太网PHY是什么?答:PHY是物理接口收发器,它实现物理层。
IEEE-802.3标准定义了以太网PHY。
它符合IEEE-802.3k中用于10B aseT(第14条)和100BaseTX(第24条和第25条)的规范。
问:造成以太网MAC和PHY单片整合难度高的原因是什么?答:PHY整合了大量模拟硬件,而MAC是典型的全数字器件。
芯片面积及模拟/数字混合架构是为什么先将MAC集成进微控制器而将PHY留在片外的原因。
更灵活、密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合。
问:除RJ-45接口外,还需要其它元件吗?答:需要其它元件。
虽然PHY提供绝大多数模拟支持,但在一个典型实现中,仍需外接6、7只分立元件及一个局域网绝缘模块。
绝缘模块一般采用一个1:1的变压器。
这些部件的主要功能是为了保护PHY免遭由于电气失误而引起的损坏。
802.11MAC协议详情详解
802.11MAC协议详情详解第四章介质(媒体)访问控制子层这是广播网的数据链路层上特有的一个子层,用于解决共享信道的分配问题。
广播信道有时也称为多重访问信道(multiaccess channel)或随机访问信道(random access channel),信道也称为介质或媒体(medium),使用信道发送数据称为介质(媒体)访问,所以决定信道分配的协议就称为介质(媒体)访问控制协议。
由于大多数的局域网都使用多重访问信道作为通信的基础,而广域网大多采用点-点线路(卫星网络除外),因此本章还将讨论局域网的相关技术。
1.信道分配策略●静态分配:如FDM和同步TDM,这是一种固定分配信道的方式,适用于用户数少且数量固定、每个用户通信量较大的情况。
由于每个节点被分配了固定的资源(频带,时隙),因而不会有冲突发生。
●动态分配:如异步TDM,这是一种按需分配信道的方式,适用于用户数多且数量可变、突发通信的情况。
◆竞争方式:各个用户竞争使用信道,不需要取得发送权就可以发送数据,这种方式会产生冲突。
◆无冲突方式:每个用户必须先获得发送权,然后才能发送数据,这种方式不会产生冲突,如预约或轮转方式。
◆有限竞争方式:以上两种方式的折衷。
2.多重访问协议纯ALOHA任何用户有数据发送就可以发送,每个用户通过监听信道来判断是否发生了冲突,一旦发现有冲突则随机等待一段时间,然后再重新发送。
假设:所有帧的长度都相同,且每个帧一产生出来后就立即发送。
帧时(frame time):发送一个标准长度的帧所需的时间;N:每帧时内系统中产生的新帧数目,一般应有0<n<1;< bdsfid="80" p=""></n<1;<>G:每帧时内系统中产生的需要发送的总帧数(包括新帧和重发帧),这就是系统负载;P0:发送的帧不产生冲突的概率;S:系统吞吐量(每帧时内系统能够成功传输的帧数),S = GP0;在纯ALOHA系统中,S = Ge-2G,当G = 0.5时,S达到最大值,为0.184。
以太网原理MAC和PHY
以太网原理MAC和PHY以太网是一种局域网(LAN)技术,用于在计算机之间传输数据。
以太网原理包括物理层(PHY)和媒体访问控制层(MAC)两个部分。
物理层(PHY)是以太网技术的底层,负责将传输的数据转化为电信号,并在网络中传输和接收数据。
PHY负责处理传输介质、传输速率等物理层面的细节。
MAC层是以太网技术的上层,负责管理和控制网络中的通信。
MAC层协议定义了数据的传输方式、帧结构、帧格式等规范,以确保数据的可靠传输和有效利用。
在以太网中,数据被分割成一系列的帧(Frame),每个帧由MAC层添加标识符和校验码,并传输到物理层。
物理层将数据转化成电信号,并通过传输介质(如双绞线、光纤等)传输到目标计算机。
PHY层通过一系列的电器和电子设备来处理数据的传输。
这些设备包括编码器、解码器、物理传输媒介、放大器等。
编码器和解码器负责将数据转化为电信号和相反的操作,物理传输媒介负责在不同的介质中传输数据,放大器用于增强信号的强度。
当数据传输到目标计算机后,物理层将电信号转化为数据,并传递给MAC层处理。
MAC层根据帧的标识符和校验码来验证数据的完整性和正确性,并将其传递给上层应用程序。
MAC层还负责管理和控制网络中的通信。
为了避免数据冲突,以太网采用了一种称为“载波侦听多址接入/碰撞检测”(Carrier Sense Multiple Access/Collision Detection,CSMA/CD)的协议。
该协议允许多个计算机同时发送数据,但如果检测到冲突,则发送方会停止发送,等待一段随机时间后重新发送。
以太网的传输速率通常用Mbps(兆位每秒)来衡量,常见的速率有10Mbps、100Mbps和1000Mbps(即千兆以太网,也被称为千兆网)。
总结起来,以太网的原理包括物理层(PHY)和媒体访问控制层(MAC)两个部分。
PHY层负责将数据转化为电信号,并在物理介质上传输和接收数据。
MAC层负责管理和控制网络中的通信,确保数据的可靠传输和有效利用。
FPGA——以太网MAC层数据发送协议实现及验证
FPGA——以太⽹MAC层数据发送协议实现及验证⼀、设计思路FPGA实现MAC层(数据链路层)的功能并连接到RTL8211物理层(PHY)芯⽚实现以太⽹数据的发送使⽤GMII接⼝时钟是125MHz,⼀次发8bit数据 8bit * 125M = 1000Mbit 所以叫做千兆以太⽹RTL8211时序来⼀个时钟上升沿就发⼀个字节的数据数据链路层(MAC帧协议)发送过程前同步码 0x55,发七次帧开始符 0xD5⽬的MAC地址(6字节)源MAC地址(6字节)类型:0x800 使⽤IP上层协议,代表下⾯发送的数据是IP数据报数据IP报⽂⾸部IP版本 0x4 IPv4⾸部长度服务类型总长度分段标识保留位DFMF段偏移⽣存周期TTL上层协议 0x11 UDP报⽂校验和源IP地址⽬的IP地址可选字段(0字节不需要)IP报⽂数据(UDP报⽂)UDP报⽂⾸部16位源端⼝号16位⽬的端⼝号16位UDP长度16位UDP校验和(可以直接置0)UDP报⽂数据CRC校验IP报⽂校验和将IP报⽂⾸部,从前到后拼成⼀个⼀个的2字节的数据相加(其中报⽂校验和置0)然后将所加的32bit数据的⾼16位于低16位相加,直到⾼16bit为0 将16bit取反,则为校验和虽然⽣成了函数,但是具体使⽤函数还是要做更改的注意:CRC校验是从发送⽬的MAC地址开始校验的IP⾸部长度单位是/32bit(4字节) 如果没有可选⾃动,⾸部长度就是 5(⾏)IP总长度总长度 = IP⾸部长度 + IP报⽂数据长度单位是/字节MAC帧协议的数据和填充数据和填充那个位置,⾄少要46个字节,如果要发送的UDP报⽂数据加起来没有46字节的话,就要在后⾯填0x00直到有46个字节为⽌ IP报⽂头部(20字节)+ UDP报⽂(8字节)+ 发送的数据 >= 46 发送的数据 >= 18字节FPGA状态机实现每⼀个状态都配套⼀个计数器⼆、以太⽹GMIII发送代码实现module eth_udp_tx_gmii(clk ,rst_n ,tx_en ,tx_done ,dst_mac ,src_mac ,dst_ip ,gmii_clk ,data_len ,data_vld ,gmii_en ,gmii_tx ,data_in);localparam MAC_W = 48;localparam IP_W = 32;localparam PORT_W = 16;localparam DATA_LEN_W = 16;localparam GMII_W = 8;localparam PREAMBLE = 8'h55; //前导码localparam SFD = 8'hD5; //帧开始符localparam ETH_TYPE = 16'h0800;//上层协议类型,IP协议localparam IP_VER = 4'h4; //IPV4localparam IP_HDR_LEN = 4'h5; //⾸部长度有5个32bit localparam IP_TOS = 8'h00; //服务类型,未⽤localparam IP_HED_LEN = 20; //IP头部长度localparam UDP_HED_LEN = 8; //UDP头部长度localparam IP_ID = 16'h0000;//分段标识localparam IP_RSV = 1'b0; //保留localparam IP_DF = 1'b0; //是否分段localparam IP_MF = 1'b0; //是否有后续分段localparam IP_FRAG_OFFSET = 13'h0; //段偏移(以8字节为单位)localparam IP_TTL = 8'h40; //⽣存周期,能经过40个路由器localparam IP_PROTOCOL = 8'h11; //上层协议(UDP)localparam MIN_DATA = 46; //UDP数据最⼩长度localparam DATA_W = 8;//状态机参数localparam IDLE = 7'b0000001;localparam TX_ETH_HED = 7'b0000010;localparam TX_IP_HED = 7'b0000100;localparam TX_UDP_HED = 7'b0001000;localparam TX_UDP_DATA = 7'b0010000;localparam TX_FILL_DATA = 7'b0100000;localparam TX_CRC = 7'b1000000;localparam STATE_W = 7;//计数器参数localparam ETH_HED_W = 5;localparam ETH_HED_N = 22;localparam IP_HED_W = 5;localparam IP_HED_N = 20;localparam UDP_HED_N = 8;localparam UDP_HED_W = 4;localparam CNT_DATA_W = 11;localparam FILL_W = 6;localparam CNT_CRC_W = 3;localparam CNT_CRC_N = 4;//模块参数localparam CHEC_W = 16;localparam CRC_OUT_W = 32;input clk;input rst_n;input tx_en; //发送使能input [MAC_W-1:0] dst_mac; //⽬的Mac地址input [MAC_W-1:0] src_mac; //源Mac地址input [IP_W-1:0] dst_ip; //⽬的ip地址input [IP_W-1:0] src_ip; //源ip地址input [PORT_W-1:0] dst_port; //⽬的端⼝input [PORT_W-1:0] src_port; //源端⼝input [DATA_LEN_W-1:0] data_len; //发送数据长度input [DATA_W-1:0] data_in; //输⼊数据output gmii_clk; //以太⽹接⼝时钟output gmii_en; //以太⽹使能output [GMII_W-1:0] gmii_tx; //以太⽹数据output tx_done; //发送完成output data_vld; //数据有效标志信号wire gmii_clk; //以太⽹接⼝时钟reg gmii_en; //以太⽹使能reg [GMII_W-1:0] gmii_tx; //以太⽹数据reg tx_done; //发送完成reg data_vld; //数据有效标志信号reg [STATE_W-1:0] state_c;reg [STATE_W-1:0] state_n;wire idle2tx_eth_hed;wire tx_eth_hed2tx_ip_hed;wire tx_ip_hed2tx_udp_hed;wire tx_udp_hed2tx_udp_data;wire tx_udp_data2tx_fill_data;wire tx_udp_data2tx_crc;wire tx_fill_data2tx_crc;wire tx_crc2idle;//计数器变量reg [ETH_HED_W-1:0] cnt_eth_hed;wire add_cnt_eht_hed;wire end_cnt_eth_hed;reg [IP_HED_W-1:0] cnt_ip_hed;wire add_cnt_ip_hed;wire end_cnt_ip_hed;reg [UDP_HED_W-1:0] cnt_udp_hed;wire add_cnt_udp_hed;wire end_cnt_udp_hed;reg [CNT_DATA_W-1:0] cnt_data;wire add_cnt_data;wire end_cnt_data;reg [FILL_W-1:0] cnt_fill;wire add_cnt_fill;wire end_cnt_fill;reg [CNT_CRC_W-1:0] cnt_crc;wire add_cnt_crc;wire end_cnt_crc;//中间变量reg tx_flag;reg [MAC_W-1:0] dst_mac_tmp; //⽬的Mac地址reg [MAC_W-1:0] src_mac_tmp; //源Mac地址reg [IP_W-1:0] dst_ip_tmp; //⽬的ip地址reg [IP_W-1:0] src_ip_tmp; //源ip地址reg [PORT_W-1:0] dst_port_tmp; //⽬的端⼝reg [PORT_W-1:0] src_port_tmp; //源端⼝reg [DATA_LEN_W-1:0] data_len_tmp; //发送数据长度reg [DATA_LEN_W-1:0] ip_total_len; //IP总长度reg [DATA_LEN_W-1:0] udp_total_len; //UDP总长度wire [16-1:0] udp_check_sum; //UDP校验和reg [DATA_W-1:0] data_out; //以太⽹数据reg tx_nocrc_flag;//模块变量wire [CHEC_W-1:0] check_sum; //IP报头校验和reg sum_en;reg crc_init;reg crc_en;wire [CRC_OUT_W-1:0] crc_out;always @(posedge clk or negedge rst_n)beginif(!rst_n)state_c <= IDLE;elsestate_c <= state_n;endalways @(*)begincase(state_c)IDLE:beginif(idle2tx_eth_hed)state_n = TX_ETH_HED;elsestate_n = state_c;endTX_ETH_HED:beginif(tx_eth_hed2tx_ip_hed)state_n = TX_IP_HED;elsestate_n = state_c;endTX_IP_HED:beginif(tx_ip_hed2tx_udp_hed)state_n = state_c;endTX_UDP_HED:beginif(tx_udp_hed2tx_udp_data)state_n = TX_UDP_DATA;elsestate_n = state_c;endTX_UDP_DATA:beginif(tx_udp_data2tx_fill_data)state_n = TX_FILL_DATA;else if(tx_udp_data2tx_crc)state_n = TX_CRC;elsestate_n = state_c;endTX_FILL_DATA:beginif(tx_fill_data2tx_crc)state_n = TX_CRC;elsestate_n = state_c;endTX_CRC:beginif(tx_crc2idle)state_n = IDLE;elsestate_n = state_c;enddefault:state_n = IDLE;endcaseendassign idle2tx_eth_hed = state_c == IDLE && tx_en;assign tx_eth_hed2tx_ip_hed = state_c == TX_ETH_HED && end_cnt_eth_hed;assign tx_ip_hed2tx_udp_hed = state_c == TX_IP_HED && end_cnt_ip_hed;assign tx_udp_hed2tx_udp_data = state_c == TX_UDP_HED && end_cnt_udp_hed;assign tx_udp_data2tx_fill_data = state_c == TX_UDP_DATA && end_cnt_data && (data_len_tmp > 0 && data_len_tmp < (MIN_DATA - IP_HED_LEN - UDP_HED_LEN)); assign tx_udp_data2tx_crc = state_c == TX_UDP_DATA && end_cnt_data && data_len_tmp >= (MIN_DATA - IP_HED_LEN - UDP_HED_LEN);assign tx_fill_data2tx_crc = state_c == TX_FILL_DATA && end_cnt_fill;assign tx_crc2idle = state_c == TX_CRC && end_cnt_crc;always@(posedge clk or negedge rst_n)beginif(!rst_n)data_out <= 0;else if(state_c == TX_ETH_HED)begincase(cnt_eth_hed)0,1,2,3,4,5,6:data_out <= PREAMBLE;7 :data_out <= SFD;8 :data_out <= dst_mac_tmp[47:40];9 :data_out <= dst_mac_tmp[39:32];10:data_out <= dst_mac_tmp[31:24];11:data_out <= dst_mac_tmp[23:16];12:data_out <= dst_mac_tmp[15:8];13:data_out <= dst_mac_tmp[7:0];14:data_out <= src_mac_tmp[47:40];15:data_out <= src_mac_tmp[39:32];16:data_out <= src_mac_tmp[31:24];17:data_out <= src_mac_tmp[23:16];18:data_out <= src_mac_tmp[15:8];19:data_out <= src_mac_tmp[7:0];20:data_out <= ETH_TYPE[15:8];21:data_out <= ETH_TYPE[7:0];default:data_out <= 8'h00;endcaseendelse if(state_c == TX_IP_HED)begincase(cnt_ip_hed)0 :data_out <= {IP_VER,IP_HDR_LEN};1 :data_out <= IP_TOS;2 :data_out <= ip_total_len[15:8];3 :data_out <= ip_total_len[7:0];4 :data_out <= IP_ID[15:8];5 :data_out <= IP_ID[7:0];6 :data_out <= {IP_RSV,IP_DF,IP_MF,IP_FRAG_OFFSET[12:8]};7 :data_out <= IP_FRAG_OFFSET[7:0];8 :data_out <= IP_TTL;9 :data_out <= IP_PROTOCOL;10:data_out <= check_sum[15:8];11:data_out <= check_sum[7:0];12:data_out <= src_ip_tmp[31:24];13:data_out <= src_ip_tmp[23:16];14:data_out <= src_ip_tmp[15:8];15:data_out <= src_ip_tmp[7:0];17:data_out <= dst_ip_tmp[23:16];18:data_out <= dst_ip_tmp[15:8];19:data_out <= dst_ip_tmp[7:0];default:data_out <= 8'h00;endcaseendelse if(state_c == TX_UDP_HED)begincase(cnt_udp_hed)0:data_out <= src_port_tmp[15:8];1:data_out <= src_port_tmp[7:0];2:data_out <= dst_port_tmp[15:8];3:data_out <= dst_port_tmp[7:0];4:data_out <= udp_total_len[15:8];5:data_out <= udp_total_len[7:0];6:data_out <= udp_check_sum[15:8];7:data_out <= udp_check_sum[7:0];default:data_out <= 8'h00;endcaseendelse if(state_c == TX_UDP_DATA)begindata_out <= data_in;endelse if(state_c == TX_FILL_DATA)begindata_out <= 8'h00;endelse if(state_c == TX_CRC)begindata_out <= 0;endend//以太⽹头部计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt_eth_hed <= 0;else if(add_cnt_eht_hed)beginif(end_cnt_eth_hed)cnt_eth_hed <= 0;elsecnt_eth_hed <= cnt_eth_hed + 1'b1;endendassign add_cnt_eht_hed = state_c == TX_ETH_HED;assign end_cnt_eth_hed = add_cnt_eht_hed && cnt_eth_hed == ETH_HED_N - 1; //IP头计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt_ip_hed <= 0;else if(add_cnt_ip_hed)beginif(end_cnt_ip_hed)cnt_ip_hed <= 0;elsecnt_ip_hed <= cnt_ip_hed + 1;endendassign add_cnt_ip_hed = state_c == TX_IP_HED;assign end_cnt_ip_hed = add_cnt_ip_hed && cnt_ip_hed == IP_HED_N - 1;//udp头部计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_udp_hed <= 0;endelse if(add_cnt_udp_hed)beginif(end_cnt_udp_hed)cnt_udp_hed <= 0;elsecnt_udp_hed <= cnt_udp_hed + 1;endendassign add_cnt_udp_hed = state_c == TX_UDP_HED;assign end_cnt_udp_hed = add_cnt_udp_hed && cnt_udp_hed == UDP_HED_N - 1; //UDP数据计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_data <= 0;endelse if(add_cnt_data)beginif(end_cnt_data)cnt_data <= 0;elsecnt_data <= cnt_data + 1;endassign add_cnt_data = state_c == TX_UDP_DATA;assign end_cnt_data = add_cnt_data && cnt_data == data_len_tmp - 1;//填充计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_fill <= 0;endelse if(add_cnt_fill)beginif(end_cnt_fill)cnt_fill <= 0;elsecnt_fill <= cnt_fill + 1;endendassign add_cnt_fill = state_c == TX_FILL_DATA;assign end_cnt_fill = add_cnt_fill && cnt_fill == (MIN_DATA - IP_HED_LEN - UDP_HED_LEN - data_len_tmp) - 1; //CRC计数器always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_crc <= 0;endelse if(add_cnt_crc)beginif(end_cnt_crc)cnt_crc <= 0;elsecnt_crc <= cnt_crc + 1;endendassign add_cnt_crc = state_c == TX_CRC && !tx_nocrc_flag;assign end_cnt_crc = add_cnt_crc && cnt_crc == CNT_CRC_N - 1;always @(posedge clk or negedge rst_n)beginif(!rst_n)tx_flag <= 0;else if(tx_en)tx_flag <= 1;end//装载写⼊数据always @(posedge clk or negedge rst_n)beginif(!rst_n)begindst_mac_tmp <= 0;src_mac_tmp <= 0;dst_ip_tmp <= 0;src_ip_tmp <= 0;dst_port_tmp <= 0;src_port_tmp <= 0;data_len_tmp <= 0;endelse if(tx_en && (!tx_flag))begindst_mac_tmp <= dst_mac;src_mac_tmp <= src_mac;dst_ip_tmp <= dst_ip;src_ip_tmp <= src_ip;dst_port_tmp <= dst_port;src_port_tmp <= src_port;data_len_tmp <= data_len;endend//IP总长度,20字节的IP⾸部+8字节UDP⾸部+UDP数据长度always @(posedge clk or negedge rst_n)beginif(!rst_n)ip_total_len <= 0;else if(state_c == TX_ETH_HED && (cnt_eth_hed == 0 && add_cnt_eht_hed))ip_total_len = IP_HED_LEN + UDP_HED_LEN + data_len_tmp;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)udp_total_len <= 0;else if(state_c == TX_ETH_HED && (cnt_eth_hed == 0 && add_cnt_eht_hed))udp_total_len <= UDP_HED_LEN + data_len_tmp;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)sum_en <= 0;else if(state_c == TX_ETH_HED && end_cnt_eth_hed)sum_en <= 1;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)crc_init <= 0;else if(tx_en && (!tx_flag))crc_init <= 1;elsecrc_init <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)crc_en <= 0;else if(state_c == TX_ETH_HED)beginif(cnt_eth_hed == 9 - 1 && add_cnt_eht_hed)crc_en <= 1;endelse if(state_c == TX_IP_HED || state_c == TX_UDP_HED || state_c == TX_UDP_DATA || state_c == TX_FILL_DATA)crc_en <= 1;elsecrc_en <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)gmii_tx <= 0;else if(tx_nocrc_flag)gmii_tx <= data_out;else if(state_c == TX_CRC)begincase(cnt_crc)0:gmii_tx <= crc_out[7:0];1:gmii_tx <= crc_out[15:8];2:gmii_tx <= crc_out[23:16];3:gmii_tx <= crc_out[31:24];default:gmii_tx <= 8'h00;endcaseendelse if(tx_done)gmii_tx <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)tx_nocrc_flag <= 0;else if(state_c == TX_ETH_HED || state_c == TX_IP_HED || state_c == TX_UDP_HED || state_c == TX_UDP_DATA || state_c == TX_FILL_DATA) tx_nocrc_flag <= 1;elsetx_nocrc_flag <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)tx_done <= 0;else if(end_cnt_crc)tx_done <= 1;elsetx_done <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)data_vld <= 0;else if(end_cnt_udp_hed)data_vld <= 1;else if(end_cnt_data)data_vld <= 0;endalways @(posedge clk or negedge rst_n)beginif(!rst_n)gmii_en <= 0;else if(cnt_eth_hed == 1 && add_cnt_eht_hed)gmii_en <= 1;else if(tx_done)gmii_en <= 0;endassign gmii_clk = clk;assign udp_check_sum = 0;.rst_n (rst_n),.sum_en (sum_en), //使能.ver (IP_VER), //ip版本.hdr_len (IP_HDR_LEN), //⾸部长度(单位,字节) .tos (IP_TOS), //服务类型.total_len (ip_total_len), //总长度.id (IP_ID), //分段标识.rsv (IP_RSV), //未⽤.df (IP_DF), //DF.mf (IP_MF), //MF.frag_offset (IP_FRAG_OFFSET), //段偏移.ttl (IP_TTL), //⽣存周期TTL(单位,秒).protocal (IP_PROTOCOL), //上层协议.check_sum (check_sum), //报头校验和.src_ip (src_ip_tmp), //源ip地址.dst_ip (dst_ip_tmp) //⽬的ip地址);crc32_d8 crc32_d8(.clk (clk),.rst_n (rst_n),.data (data_out),.crc_init (crc_init),.crc_en (crc_en),.crc_out (crc_out));endmodule三、IP校验和模块module ip_checksum(clk ,rst_n ,sum_en , //使能ver , //ip版本hdr_len , //⾸部长度(单位,字节)tos , //服务类型total_len , //总长度id , //分段标识rsv , //未⽤df , //DFmf , //MFfrag_offset , //段偏移ttl , //⽣存周期TTL(单位,秒)protocal , //上层协议check_sum , //报头校验和src_ip , //源ip地址dst_ip //⽬的ip地址);localparam VER_W = 4;localparam HDR_W = 4;localparam TOS_W = 8;localparam TOT_W = 16;localparam ID_W = 16;localparam FRAG_W = 13;localparam TTL_W = 8;localparam PTOC_W = 8;localparam CHEC_W = 16;localparam SR_W = 32;localparam DS_W = 32;localparam SUM_W = 32;localparam ACC_W = 17;input clk;input rst_n;input sum_en;input [VER_W-1:0] ver;input [HDR_W-1:0] hdr_len;input [TOS_W-1:0] tos;input [TOT_W-1:0] total_len;input [ID_W-1:0] id;input rsv;input df;input mf;input [FRAG_W-1:0] frag_offset;input [TTL_W-1:0] ttl;input [PTOC_W-1:0] protocal;input [SR_W-1:0] src_ip;input [DS_W-1:0] dst_ip;output [CHEC_W-1:0] check_sum;reg [CHEC_W-1:0] check_sum;//中间变量reg [SUM_W-1:0] sum;reg [ACC_W-1:0] acc_high_low;always @(posedge clk or negedge rst_n)beginif(!rst_n)sum <= 0;else if(sum_en)sum <= {ver,hdr_len,tos} + total_len + id + {rsv,df,mf,frag_offset} + {ttl,protocal} + src_ip[31:16] + src_ip[15:0] + dst_ip[31:16] + dst_ip[15:0]; endalways @(posedge clk or negedge rst_n)beginif(!rst_n)acc_high_low <= 0;elseacc_high_low <= sum[15:0] + sum[31:16];endalways @(posedge clk or negedge rst_n)beginif(!rst_n)check_sum <= 0;elsecheck_sum <= ~(acc_high_low[15:0] + acc_high_low[16]);endendmodule四、CRC校验模块////////////////////////////////////////////////////////////////////////////////// Copyright (C) 1999-2008 Easics NV.// This source file may be used and distributed without restriction// provided that this copyright statement is not removed from the file// and that any derivative work contains the original copyright notice// and the associated disclaimer.//// THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS// OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED// WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// Purpose : synthesizable CRC function// * polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1// * data width: 8//// Info : tools@easics.be// ////////////////////////////////////////////////////////////////////////////////module crc32_d8(clk ,rst_n ,data ,crc_init ,crc_en ,crc_out);localparam DATA_W = 8;localparam OUT_W = 32;input clk;input rst_n;input [DATA_W-1:0] data;input crc_init;input crc_en;output [OUT_W-1:0] crc_out;wire [OUT_W-1:0] crc_out;//中间变量wire [DATA_W-1:0] data_in;reg [OUT_W-1:0] crc_out_inv;//⽣成data反转电路generategenvar i;for(i = 0;i < DATA_W;i = i + 1)beginassign data_in[i] = data[(DATA_W-1) - i];end//⽣成crc反转电路generategenvar j;for(j = 0;j < OUT_W;j = j + 1)beginassign crc_out[j] = ~crc_out_inv[(OUT_W-1) - j];endendgenerate//输出CRC,初始化CRC为FFFF_FFFF,使能输出CRCalways @(posedge clk or negedge rst_n)beginif(!rst_n)crc_out_inv <= 0;else if(crc_init)crc_out_inv <= 32'hffff_ffff;else if(crc_en)crc_out_inv <= nextCRC32_D8(data_in,crc_out_inv);end// polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 // data width: 8// convention: the first serial bit is D[7]function [31:0] nextCRC32_D8;input [7:0] Data;input [31:0] crc;reg [7:0] d;reg [31:0] c;reg [31:0] newcrc;begind = Data;c = crc;newcrc[0] = d[6] ^ d[0] ^ c[24] ^ c[30];newcrc[1] = d[7] ^ d[6] ^ d[1] ^ d[0] ^ c[24] ^ c[25] ^ c[30] ^ c[31];newcrc[2] = d[7] ^ d[6] ^ d[2] ^ d[1] ^ d[0] ^ c[24] ^ c[25] ^ c[26] ^ c[30] ^ c[31];newcrc[3] = d[7] ^ d[3] ^ d[2] ^ d[1] ^ c[25] ^ c[26] ^ c[27] ^ c[31];newcrc[4] = d[6] ^ d[4] ^ d[3] ^ d[2] ^ d[0] ^ c[24] ^ c[26] ^ c[27] ^ c[28] ^ c[30];newcrc[5] = d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[24] ^ c[25] ^ c[27] ^ c[28] ^ c[29] ^ c[30] ^ c[31]; newcrc[6] = d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[2] ^ d[1] ^ c[25] ^ c[26] ^ c[28] ^ c[29] ^ c[30] ^ c[31];newcrc[7] = d[7] ^ d[5] ^ d[3] ^ d[2] ^ d[0] ^ c[24] ^ c[26] ^ c[27] ^ c[29] ^ c[31];newcrc[8] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[0] ^ c[24] ^ c[25] ^ c[27] ^ c[28];newcrc[9] = d[5] ^ d[4] ^ d[2] ^ d[1] ^ c[1] ^ c[25] ^ c[26] ^ c[28] ^ c[29];newcrc[10] = d[5] ^ d[3] ^ d[2] ^ d[0] ^ c[2] ^ c[24] ^ c[26] ^ c[27] ^ c[29];newcrc[11] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[3] ^ c[24] ^ c[25] ^ c[27] ^ c[28];newcrc[12] = d[6] ^ d[5] ^ d[4] ^ d[2] ^ d[1] ^ d[0] ^ c[4] ^ c[24] ^ c[25] ^ c[26] ^ c[28] ^ c[29] ^ c[30];newcrc[13] = d[7] ^ d[6] ^ d[5] ^ d[3] ^ d[2] ^ d[1] ^ c[5] ^ c[25] ^ c[26] ^ c[27] ^ c[29] ^ c[30] ^ c[31];newcrc[14] = d[7] ^ d[6] ^ d[4] ^ d[3] ^ d[2] ^ c[6] ^ c[26] ^ c[27] ^ c[28] ^ c[30] ^ c[31];newcrc[15] = d[7] ^ d[5] ^ d[4] ^ d[3] ^ c[7] ^ c[27] ^ c[28] ^ c[29] ^ c[31];newcrc[16] = d[5] ^ d[4] ^ d[0] ^ c[8] ^ c[24] ^ c[28] ^ c[29];newcrc[17] = d[6] ^ d[5] ^ d[1] ^ c[9] ^ c[25] ^ c[29] ^ c[30];newcrc[18] = d[7] ^ d[6] ^ d[2] ^ c[10] ^ c[26] ^ c[30] ^ c[31];newcrc[19] = d[7] ^ d[3] ^ c[11] ^ c[27] ^ c[31];newcrc[20] = d[4] ^ c[12] ^ c[28];newcrc[21] = d[5] ^ c[13] ^ c[29];newcrc[22] = d[0] ^ c[14] ^ c[24];newcrc[23] = d[6] ^ d[1] ^ d[0] ^ c[15] ^ c[24] ^ c[25] ^ c[30];newcrc[24] = d[7] ^ d[2] ^ d[1] ^ c[16] ^ c[25] ^ c[26] ^ c[31];newcrc[25] = d[3] ^ d[2] ^ c[17] ^ c[26] ^ c[27];newcrc[26] = d[6] ^ d[4] ^ d[3] ^ d[0] ^ c[18] ^ c[24] ^ c[27] ^ c[28] ^ c[30];newcrc[27] = d[7] ^ d[5] ^ d[4] ^ d[1] ^ c[19] ^ c[25] ^ c[28] ^ c[29] ^ c[31];newcrc[28] = d[6] ^ d[5] ^ d[2] ^ c[20] ^ c[26] ^ c[29] ^ c[30];newcrc[29] = d[7] ^ d[6] ^ d[3] ^ c[21] ^ c[27] ^ c[30] ^ c[31];newcrc[30] = d[7] ^ d[4] ^ c[22] ^ c[28] ^ c[31];newcrc[31] = d[5] ^ c[23] ^ c[29];nextCRC32_D8 = newcrc;endendfunctionendmodule五、仿真验证`timescale 1ns / 1nsmodule eth_tb();localparam MAC_W = 48;localparam IP_W = 32;localparam PORT_W = 16;localparam DATA_LEN_W = 16;localparam GMII_W = 8;localparam DATA_W = 8;parameter CYCLE = 20;reg clk;reg rst_n;reg tx_en; //发送使能reg [MAC_W-1:0] dst_mac; //⽬的Mac地址reg [MAC_W-1:0] src_mac; //源Mac地址reg [IP_W-1:0] dst_ip; //⽬的ip地址reg [IP_W-1:0] src_ip; //源ip地址reg [PORT_W-1:0] dst_port; //⽬的端⼝reg [PORT_W-1:0] src_port; //源端⼝reg [DATA_LEN_W-1:0] data_len; //发送数据长度reg [DATA_W-1:0] data_in; //输⼊数据wire gmii_clk; //以太⽹接⼝时钟wire gmii_en; //以太⽹使能wire [GMII_W-1:0] gmii_tx; //以太⽹数据wire tx_done; //发送完成wire data_vld; //数据有效标志信号eth_udp_tx_gmii eth_udp_tx_gmii(.clk (clk),.rst_n (rst_n),.tx_en (tx_en),.tx_done (tx_done),.dst_mac (dst_mac),.src_mac (src_mac),.dst_ip (dst_ip),.src_ip (src_ip),.dst_port (dst_port),.src_port (src_port),.gmii_clk (gmii_clk),.data_len (data_len),.data_vld (data_vld),.gmii_en (gmii_en),.gmii_tx (gmii_tx),.data_in (data_in));initial clk = 1;always #(CYCLE/2) clk = ~clk;initial beginrst_n = 1;#3;rst_n = 0;#(3*CYCLE)rst_n = 1;endinitial begindst_mac = 0;#(10*CYCLE)dst_mac = 48'hA1_6F_5B_12_01_F8;endinitial beginsrc_mac = 0;#(10*CYCLE)src_mac = 48'h00_0a_35_01_fe_c0;endinitial begindst_ip = 0;#(10*CYCLE)dst_ip = 32'hc0_a8_00_02;endinitial beginsrc_ip = 0;#(10*CYCLE)src_ip = 32'hc0_a8_00_03;endinitial begindst_port = 0;#(10*CYCLE)dst_port = 16'd8080;endinitial beginsrc_port = 0;#(10*CYCLE)src_port = 16'd1010;endinitial begindata_len = 0;#(10*CYCLE)data_len = 10;endreg [4-1:0] cnt_data_in;wire add_cnt_data_in;wire end_cnt_data_in;always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt_data_in <= 0;endelse if(add_cnt_data_in)beginif(end_cnt_data_in)cnt_data_in <= 0;elsecnt_data_in <= cnt_data_in + 1;endendassign add_cnt_data_in = data_vld;assign end_cnt_data_in = add_cnt_data_in && cnt_data_in == 11 - 1; always @(*)begincase (cnt_data_in)0 :data_in = "X";1 :data_in = "I";2 :data_in = "L";3 :data_in = "I";4 :data_in = "N";5 :data_in = "X";6 :data_in = " ";7 :data_in = "F";8 :data_in = "P";9 :data_in = "G";10:data_in = "A";default: data_in = 8'h00;endcaseendinitial begin@(posedge tx_done)#200;$stop;endinitial begin#1;tx_en = 0;#(15*CYCLE)tx_en = 1;#(CYCLE)tx_en = 0;endendmodule六、板级验证module eth_udp_tx_gmii_test(clk ,rst_n ,led ,eth_rst_n,gmii_clk ,gmii_en ,gmii_tx);//延迟0.5msparameter DELAY_N = 625_00000;input clk;input rst_n;output led;output eth_rst_n;output gmii_clk ;output gmii_en ;output [8-1:0] gmii_tx;wire led;wire eth_rst_n;wire gmii_clk ;wire gmii_en ;wire [8-1:0] gmii_tx;wire locked;wire clk125M;wire data_vld;reg [8-1:0] data_in;reg tx_en;//PLL稳定后,开始⼯作assign eth_rst_n = locked;assign led = locked;pll pll(.clk_out1(clk125M),.resetn(rst_n),.locked(locked),.clk_in1(clk));eth_udp_tx_gmii eth_udp_tx_gmii(.clk (clk125M),.rst_n (eth_rst_n),.tx_en (tx_en),.tx_done (tx_done),.dst_mac (48'h10_1E_1F_12_11_18),.src_mac (48'h00_0a_35_01_fe_c0),.dst_ip (32'hc0_a8_00_03),.src_ip (32'hc0_a8_00_02),.dst_port (16'd6000),.src_port (16'd5000),.gmii_clk (gmii_clk),.data_len (23),.data_vld (data_vld),.gmii_en (gmii_en),.gmii_tx (gmii_tx),.data_in (data_in));reg [26-1:0] cnt_delay;wire add_cnt_delay;wire end_cnt_delay;always @(posedge clk125M or negedge rst_n)beginif(!rst_n)begincnt_delay <= 0;endelse if(add_cnt_delay)beginif(end_cnt_delay)cnt_delay <= 0;elsecnt_delay <= cnt_delay + 1;endendassign add_cnt_delay = eth_rst_n;assign end_cnt_delay = add_cnt_delay && cnt_delay == DELAY_N - 1 ; always @(posedge clk125M or negedge rst_n)beginif(!rst_n)tx_en <= 0;else if(end_cnt_delay)tx_en <= 1;elsetx_en <= 0;endreg [5-1:0] cnt_data_in;wire add_cnt_data_in;wire end_cnt_data_in;always @(posedge clk125M or negedge rst_n)beginif(!rst_n)begincnt_data_in <= 0;endelse if(add_cnt_data_in)beginif(end_cnt_data_in)cnt_data_in <= 0;elsecnt_data_in <= cnt_data_in + 1;endendassign add_cnt_data_in = data_vld;assign end_cnt_data_in = add_cnt_data_in && cnt_data_in == 23 - 1;always @(*)begincase (cnt_data_in)16'd0 : data_in = "H";16'd1 : data_in = "e";16'd2 : data_in = "l";16'd3 : data_in = "l";16'd4 : data_in = "o";16'd5 : data_in = ",";16'd6 : data_in = " ";16'd7 : data_in = "w";16'd8 : data_in = "e";16'd9 : data_in = "l";16'd10 : data_in = "c";16'd11 : data_in = "o";16'd12 : data_in = "m";16'd13 : data_in = "e";16'd14 : data_in = " ";16'd15 : data_in = "t";16'd16 : data_in = "o";16'd17 : data_in = " ";16'd18 : data_in = "F";16'd19 : data_in = "P";16'd20 : data_in = "G";16'd21 : data_in = "A";16'd22 : data_in = "!";default:data_in = 8'h00;endcaseendendmodule七、问题记录在板级验证过程中,抓取的包出现异常原因是FPGA开发板连接的物理层芯⽚引脚没有使⽤,但是FPGA的未⽤引脚是⾼电平和低电平影响了芯⽚的正常⼯作解决⽅法是:添加⼀条约束,将未⽤引脚置为⾼阻态set_property BITSTREAM.CONFIG.UNUSEDPIN Pullnone [current_design](IOB = "TRUE") output gmii_en; //以太⽹使能 (IOB = "TRUE") output [GMII_W-1:0] gmii_tx; //以太⽹数据。
三种常见的局域网通信协议
三种常见的局域网通信协议局域网(Local Area Network,LAN)是指在相对较小的范围内,通过一定的线路或设备连接起来的计算机网络。
在局域网中,计算机可以相互通信、共享资源、进行文件传输等操作。
为了实现计算机之间的通信,需要使用各种通信协议。
本文将介绍三种常见的局域网通信协议,分别是以太网协议、Wi-Fi协议和传输控制协议/互联网协议(Transmission Control Protocol/Internet Protocol,TCP/IP)。
一、以太网协议以太网协议是一种传输数据的协议,广泛用于局域网中。
它定义了计算机之间的通信规则和传输方式。
以太网协议使用双绞线或同轴电缆作为传输介质,支持多种传输速率,如10Mbps、100Mbps、1000Mbps等。
以太网协议以帧的形式传输数据,在局域网中,每个计算机都有一个唯一的MAC地址,用于标识计算机的身份。
当一台计算机发送数据时,会将数据封装成以太网帧,并在帧头中写入目标MAC地址和源MAC地址,以指示数据的发送方和接收方。
通过交换机等网络设备,以太网协议可以实现计算机之间的高速通信。
二、Wi-Fi协议Wi-Fi协议是一种无线局域网协议,它基于无线电波传输数据。
Wi-Fi协议允许计算机通过无线接入点(Access Point,AP)连接到局域网。
它使用无线电频段来传输数据,提供了与以太网相似的功能和性能。
Wi-Fi协议使用的是CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance,带有冲突避免的载波侦听多路访问)技术,通过监听信道上是否有其他设备的信号来避免碰撞。
Wi-Fi协议支持多种传输速率,如802.11b、802.11g、802.11n等,其中802.11n标准提供了更高的传输速率和更远的覆盖范围。
通过Wi-Fi协议,用户可以在覆盖范围内无线地连接到局域网,并实现与有线网络相同的通信功能。
macsec协议
macsec协议简介macsec是一种用于以太网链路层安全的协议。
它提供了数据加密、完整性保护和源认证等安全功能,以保护以太网链路上的数据通信。
macsec协议可在以太网物理层之上实现,对上层协议透明,因此在使用macsec协议的网络中,上层协议无需做任何修改。
macsec的工作原理macsec协议使用两个实体之间的密钥来加密和解密数据。
这两个实体分别是MACsec密钥交互协议(MKA)和基于端口的网络访问控制(PNAC)。
MKA负责协商和交换密钥,而PNAC负责应用密钥并管理密钥的分发和更新。
macsec协议通过在以太网帧的帧头和帧尾中插入MACsec头部和尾部来实现数据的加密和认证。
MACsec头部中包含了加密相关的信息,如密钥版本号、加密算法等。
MACsec尾部中包含了完整性校验码,用于验证数据的完整性。
在数据传输过程中,发送方根据加密算法对数据进行加密,并计算完整性校验码。
接收方通过解密数据,并验证完整性校验码来还原原始数据。
如果完整性校验码不匹配,接收方将丢弃该数据包。
macsec的应用场景macsec协议广泛应用于对网络数据安全要求较高的领域,如金融、政府和军事等。
以下是一些macsec协议的典型应用场景:1. 保护机密数据传输macsec协议可以保护敏感数据的传输,确保数据不会被窃听或篡改。
例如,在金融领域,macsec协议可以保护交易数据的安全传输,防止黑客攻击或数据泄露。
2. 防止ARP欺骗攻击ARP欺骗攻击是一种常见的网络攻击手段,攻击者通过伪造ARP响应包来欺骗网络设备。
macsec协议可以在以太网链路层提供源认证的功能,有效防止ARP 欺骗攻击的发生。
3. 保护网络基础设施的安全macsec协议可以保护网络基础设施的安全,防止未经授权的设备接入网络。
通过对网络设备进行身份验证,macsec协议可以确保网络只允许合法设备的接入。
4. 提供数据完整性保护macsec协议通过完整性校验码的验证,可以保护数据的完整性。
以太网MAC层协议实验板开发
板 的 目的 , 对 MAC层 实 验 的 所 需 设 备 组 成 和功 能 、 并 MAC层 实 验 板 结 构 组 成 和 主 要模 块 作 用 进 行 了 简 要 论
述 。它 的应 用 提 高 了学 生 对 网络 理论 知识 的 应 用 能 力 和 实 际 动手 能力 。 关键词 : 验板 ; 实 MAC层 协 议 格 式 ;单 片 机
Ab ta t sr c :St de s’r a pe ato iiy nd e u nt e lo r in ablt a xpe inc c u u a i r otad qu t e a e e pe i e a re e a c m l ton a e n e a e b c us x rm nt l e ui e tlke “ he t’i d l pp id an he e o et xp rm e tboa d ofEt e n t S M AC a rpr o o q pm n i c s’ s wi e y a le d t r f r hee e i n r h r e ’ lye ot c l i veo d T he f a e o m a aon w ih un ton of is e c fed nd pur s o v l p n e s de lpe r m f r t l g t f c i t a h il a po e f de e o i g xpe i e rm nt b r b t M AC a e ot c l s dic s e . N e de e uim e om p oa d a ou l y r pr o o i s u s d e d q p nt c one t a ela t ei un ton a ou n s sw l s h rf ci b t M AC a e S e e i e r i fy it od ed S r t r lc l y r’ xp rm nta e brel n r uc . t uc u a ompon nta outM AC a e S e pe i e t lb r e b l y r’ x rm n a oa d a ela herprm a y m ode ’ unc in i ify e ou sw l s t i i r lSf to s bre l xp nde s we 1 St de s a iiis f rap i g n t o k d a l. u nt ’ b lte o pln e w r
MACsec网络数据加密协议概述
MACsec网络数据加密协议概述网络安全一直是我们在数字化时代面临的重要挑战之一。
为了保护传输过程中的数据安全,现代网络通信系统使用了不同的加密协议。
其中一个被广泛应用的协议是MACsec(Media Access Control Security)网络数据加密协议。
本文将对MACsec协议进行概述,并介绍其工作原理和在网络中的应用。
1. MACsec协议简介MACsec协议是一种用于以太网链路层加密的协议,通过在链路层对数据进行加密和校验,保护数据在物理层和数据链路层之间的传输安全。
MACsec协议基于IEEE 802.1AE标准,并提供了安全接入控制和数据完整性保护。
2. MACsec协议工作原理MACsec协议通过三种关键机制来保证网络数据的安全性:身份认证、密钥协商和数据加密。
身份认证:在建立链路连接时,MACsec协议会进行身份认证以确保通信的两端都是合法的。
这个过程基于双方事先共享的密钥,通常使用了基于密钥的消息认证码(MAC)算法。
密钥协商:在链路建立阶段,通信双方需要协商生成会话密钥,用来对数据进行加密和解密。
密钥协商过程一般采用密钥交换协议,例如Diffie-Hellman密钥交换算法。
数据加密:使用会话密钥对待传输的数据进行加密,确保数据在传输过程中不会被窃取或篡改。
3. MACsec协议在网络中的应用MACsec协议广泛应用于需要对敏感数据进行保护的网络环境中,特别是在金融、医疗和政府等领域。
它可以应用于各种物理链路类型,包括以太网、SONET/SDH和无线局域网等。
在企业网络中,MACsec协议可用于连接交换机和路由器之间的链路加密,确保数据在传输过程中不被黑客或未经授权的用户访问。
在数据中心网络中,MACsec协议可以提供对服务器之间通信的保护,防止内部攻击和数据泄露。
在无线网络中,MACsec协议可以用于提高Wi-Fi网络的安全性,防止Wi-Fi数据的窃取和篡改,尤其对于需要使用公共无线网络的用户来说,MACsec协议可以提供额外的保护。
以太网,mac协议提供的是
竭诚为您提供优质文档/双击可除以太网,mac协议提供的是篇一:以太网基于alteraFpga的千兆以太网实现方案在系统设备不断向小型化、集成化、网络化发展的今天,嵌入式开发成为新技术发展的最前沿,改变着系统的整体结构。
Fpga由于其自身特点,成为嵌入式开发的最佳平台。
altera公司结合其最新一代高端器件推出了全新的嵌入式开发系统,能够实现软核niosii32位处理器为核心的嵌入式开发系统。
在cvcloneii中,a1tera集成了完整的千兆以太网硬核,硬核包括mac模块以及可选择的物理层pcs模块和pma模块,其中mac模块支持l0/100/1000mb/s。
altera的sopcbuilder工具提供快速搭建sopc系统的能力,这种架构可以包含一个或多个cpu,提供存储器接口,外围设备和系统互连逻辑的复杂系统。
2千兆以太网技术简介以太网技术是当今应用广泛的网络技术,千兆以太网技术继承了以往以太网技术的许多优点,同时又具有诸多新特性,例如传输介质包括光纤和铜缆,使用8b/10b的编解码方案,采用载波扩展和分组突发技术等。
正是因为具有良好的继承性和许多优秀的新特性,千兆以太网已经成为目前局域网的主流解决方案。
千兆以太网利用原以太网标准所规定的全部技术规范,其中包括csma/cd协议、以太网帧、全双工、流量控制以及ieee802.3标准中所定义的管理对象。
千兆以太网的关键技术是千兆以太网的mac层和以太网接口的实现。
随着多媒体应用的普及,干兆以太网必然得到广泛应用。
3altera的千兆以太网解决方案3.1ip核的支持altera提供了可参数化的千兆以太网megacore解决方案。
该方案可在altera的arriagx,cycloneii,cycloneiii 系列Fpga上工作,可配置使其包含mac,pcs,pma模块中的一种或多种,配置选择及相应的接口标准。
千兆以太网ip核的功能描述如下:(1)支持ieee802.3标准。
MAC介绍
MAC(Media access control)是介质访问控制,也为媒体访问控制。
以太网协议是由一组IEEE 802.3标准定义的局域网协议集。
在以太网标准中,有两种操作模式:半双工和全双工。
半双工模式中,数据是通过在共享介质上采用载波监听多路访问/冲突检测(CSMA/CD)协议实现传输的。
它的主要缺点在于有效性和距离限制,链路距离受最小MAC帧大小的限制。
该限制极大地降低了其高速传输的有效性。
因此,引入了载波扩展技术来确保千兆位以太网中MAC帧的最小长度为512字节,从而达到了合理的链路距离要求。
在所有IEEE 802协议中,OSI数据链路层被划分为两个IEEE 802子层,即:媒体访问控制(MAC)子层和MAC客户端子层。
MAC子层有以下几个基本职能。
(1)数据封装、(2)发送媒体访问管理、(3)接收媒体访问管理、(4)接收数据解封。
Preamble(Pre):前导码字段,7字节。
Pre字段中1和0交互使用,接收站通过该字段知道导入帧,并且该字段提供了同步化接收物理层帧接收部分和导入比特流的方法。
Pre字段的每个字节的比特模式为“10101010”,用于实现收发双方的时钟同步。
Start-of-Frame Delimiter(SFD):帧起始定界符字段,1字节。
字段中1和0交互使用,结尾是两个连续的1,表示下一位是利用目的地址的重复使用字节的重复使用位。
SFD占1个字节,其比特模式为“10101011”,它紧跟在前导码后,用于指示一帧的开始。
前导码的作用是使接收端能根据“1”、“0”交变的比特模式迅速实现比特同步,当检测到连续两位“1”(即读到帧起始定界符字段SFD最末两位)时,便将后续的信息递交给MAC子层。
Destination Address(DA)/Source Addresses(SA):目的地址/源地址字段,6字节。
地址字段包括目的地址字段DA和源地址字段SA。
目的地址字段占2个或6个字节,用于标识接收站点的地址,它可以是单个的地址,也可以是组地址或广播地址。
MACsec扩展协议以太网链路保护
MACsec扩展协议以太网链路保护以太网作为最常见的局域网技术,广泛应用于组织与企业的数据通信中。
然而,传统以太网链路存在被攻击与窃听的风险,这促使了网络安全领域的研究人员提出了一系列的安全扩展协议,其中之一就是MACsec(Media Access Control Security)扩展协议。
MACsec扩展协议为以太网链路提供了更高的保护机制,本文将深入探讨MACsec扩展协议以太网链路保护的原理、应用场景以及其它相关方面。
一、MACsec扩展协议的原理MACsec扩展协议通过在以太网链路层上提供数据的完整性验证与加密功能,有效地防止了链路中的数据包被篡改与窃取。
其原理如下:1. 安全会话建立:MACsec使用密钥交换协议来建立安全会话,在会话建立过程中协商双方使用的密钥和算法等安全参数。
密钥的安全交换保证了后续通信的机密性和完整性。
2. 数据的完整性保护:MACsec通过在数据包中添加完整性校验码(ICV)来保护数据的完整性。
接收端使用同样的密钥和算法对接收到的数据包进行解密,并验证ICV的正确性,以判断数据是否被篡改。
3. 数据的机密性保护:MACsec使用高强度的加密算法对数据进行加密,确保在数据传输过程中的机密性。
发送端使用事先约定的密钥对要发送的数据进行加密,接收端使用同样的密钥对接收到的数据进行解密。
二、MACsec扩展协议的应用场景MACsec扩展协议适用于对数据保密性和完整性要求较高的以太网链路。
以下是MACsec扩展协议的几个主要应用场景:1. 企业数据中心:在企业内部数据中心的以太网链路中使用MACsec,可以有效地防止数据泄露和篡改。
特别是在虚拟化环境下,不同虚拟机之间的数据传输更需要保护。
2. 金融机构:金融行业对数据的安全性有着极高的要求,MACsec可在各个金融机构的网络链路上使用,确保数据在传输过程中不被篡改,防止机密信息泄露。
3. 政府与军事通信:政府和军事领域的通信往往涉及到国家安全,使用MACsec可以提供更高的保护级别,确保数据的机密性和完整性。
macsec协议
macsec协议MACsec协议。
MACsec(Media Access Control Security)是一种用于以太网链路的数据链路层加密协议,它提供了数据完整性、数据保密性和数据源认证。
MACsec协议通过在数据链路层上提供加密和完整性保护,使得网络通信更加安全可靠。
下面将介绍MACsec协议的工作原理、优势和应用场景。
MACsec协议通过在以太网帧上应用加密算法和完整性校验,来保护数据的安全性。
在发送端,MACsec会对整个以太网帧进行加密,并附加完整性校验信息;在接收端,MACsec会对接收到的以太网帧进行解密和完整性校验,以确保数据的完整性和安全性。
这种在数据链路层上进行加密和完整性保护的方式,能够有效地防止数据被篡改和窃听,提高了网络通信的安全性。
MACsec协议在网络通信中具有多重优势。
首先,它能够提供对等端到端的数据链路层加密,无需依赖网络层或传输层的安全机制,从而保护了整个通信链路的数据安全。
其次,MACsec协议对于网络中的所有数据流都能够提供安全保护,无论是用户数据流、控制数据流还是管理数据流,都能够得到保护。
此外,MACsec协议还支持密钥协商和密钥管理机制,能够灵活地适应不同网络环境下的安全需求。
MACsec协议在实际网络中有着广泛的应用场景。
首先,它常用于对网络中的敏感数据进行加密保护,如金融机构、政府部门等对于用户数据的保护。
其次,MACsec协议也常用于对于网络中的管理数据进行安全保护,以防止网络管理信息被篡改或窃听。
此外,MACsec协议还能够应用于对于网络中的控制数据进行加密,确保网络控制信息的安全可靠。
总之,MACsec协议作为一种数据链路层的安全协议,能够在以太网链路上提供数据加密、完整性保护和数据源认证,从而提高网络通信的安全性。
它具有多重优势,能够适应不同的网络环境,并在实际网络中有着广泛的应用场景。
随着网络安全需求的不断增加,MACsec协议将会在网络通信中发挥越来越重要的作用。
以太网MAC协议
以太网MAC协议1位/字节顺序的表示方法1.1位序严格地讲,以太网对于字节中位的解释是完全不敏感的。
也就是说,以太网并不需要将一个字节看成是一个具有8个比特的数字值。
但是为了使位序更容易描述以及防止不兼容,以太网和多数数据通信系统一样,传输一个字节的顺序是从最低有效位(对应于20的数字位)到最高有效位(对应于27的数字位)。
另外习惯上在书写二进制数字时,最低值位写在最左面,而最高值位写在最右面。
这种写法被称为“小端”形式或正规形式。
一个字节可以写成两个十六进制数字,第一个数字(最左边)是最高位数字,第二个(最右边)是最低位数字。
1.2字节顺序如果所有有定义的数据值都是1字节长,则在介绍完位序后就可以停止了。
但是很不幸事实并非如此,所以我们必须面对长于单个字节的域,这些域是以从左到右排列的,以连接符“-”分隔的字节串表示。
每个字节包含两个十六进制数字。
多字节域的各个字节按第一个到最后一个(即从左到右)的顺序发送,而每个字节采用小端位序传送。
例如,6字节域:08-00-60-01-2C-4A将按以下顺序(从左向右读)串行地发送:0001 0000-0000 0000-0000 0110-1000 0000-0011 0100-0101 00102以太网地址地址是一个指明特定站或一组站的标识。
以太网地址是6字节(48比特)长。
图1说明了以太网地址格式。
图1 以太网地址格式在目的地址中,地址的第1位表明该帧将要发送给单个站点还是一组站点。
在源地址中,第1位必须为0。
站地址要唯一确定是至关重要的,一个帧的目的地不能是模糊的。
地址的唯一性可以是:●局限于本网络内。
保证地址在某个特定LAN中是唯一的,但不能保证在相互连接的LAN中是唯一的。
当使用局部唯一地址时,要求网络管理员对地址进行分配。
●全局的。
保证地址在所有的LAN中,在任何时间,以及对于所有的技术都是唯一的,这是一个强大的机制,因为:(1)使网络管理员不必为地址分配而烦恼;(2)使得站点可以在LAN之间移动,而不必重新分配地址;(3)可以实现数据链路网桥/交换机。
3.3以太网的MAC子层协议
3.3 以太网的MAC子层协议1、以太网的MAC子层功能以太网的MAC子层有两个主要功能:(1)数据封装和解封发送端进行数据封装,包括将LLC子层送下来的LLC帧加上首部和尾部构成MAC帧,编址和校验码的生成等。
接收端进行数据解封,包括地址识别、帧校验码的检验和帧拆卸,即去掉MAC 帧的首部和尾部,而将LLC帧传送给LLC子层。
(2)介质访问管理发送介质访问管理包括:①载波监听;②冲突的检测和强化;③冲突退避和重发。
接收介质访问管理负责检测到达的帧是否有错(这里可能出现两种错误:一个是帧的长度大于规定的帧最大长度;二是帧的长度不是8bit的整倍数)过滤冲突的信号(凡是其长度小于允许的最小帧长度的帧,都认为是冲突的信号而予以过滤)。
2、MAC地址(硬件地址)IEEE 802标准为局域网规定了一种48bit的全球地址,即MAC地址(MAC帧的地址),它是指局域网上的每一台计算机所插入的网卡上固化在ROM中的地址,所以也叫硬件地址或物理地址。
MAC地址的前3个字节由IEEE的注册管理委员会RAC负责分配,凡是生产局域网网卡的厂家都必须向IEEE的RAC购买由这三个字节构成的一个号(即地址块)这个号的正式名称是机构唯一标识符OUI。
地址字段的后3个字节由厂家自行指派,称为扩展标识符。
一个地址块可生成224个不同的地址,用这种方式得到的48bit地址称为MAC-48或EUI-48。
3、MAC帧格式以太网的两个标准●IEEE802.3标准●DIX EthernetV2——没有LLC子层(TCP/IP体系经常使用)以太网MAC帧格式有两种标准:IEEE的802.3标准和DIX Ethernet V2标准。
(1)IEEE 802.3标准规定的MAC子层帧结构图3-11 IEEE 802.3标准规定的MAC子层帧结构①地址字段地址字段包括目的MAC地址字段和源MAC地址字段,都是6个字节。
②数据长度字段数据长度字段是2字节。
MACsec协议以太网链路保护
MACsec协议以太网链路保护随着网络技术的迅速发展,信息的安全性需求变得越来越重要。
MACsec(Media Access Control Security)协议作为一种数据链路层的安全保护机制,为以太网链路提供了有效的保护措施。
本文将介绍MACsec协议的原理和应用,以及该协议在以太网链路保护中的重要性。
一、MACsec协议的原理MACsec协议基于IEEE 802.1AE标准,并在此基础上进行了一些扩展。
它通过在以太网帧中添加安全标签(Secure Channel Identifier,SCI),对数据进行加密和身份验证,确保数据在传输过程中的安全性。
MACsec协议使用了高级加密标准(Advanced Encryption Standard,AES)算法,它提供了对数据进行机密性和完整性保护的能力。
MACsec还使用了密钥交换协议,确保通信双方共享相同的密钥,从而保证数据的机密性。
二、MACsec协议的应用MACsec协议主要应用于企业网络、数据中心和运营商网络等对数据安全要求较高的环境中。
它可以提供以下几个方面的安全保护:1. 数据机密性:MACsec协议通过加密以太网帧的有效载荷,保护数据在传输过程中不被未经授权的人员访问和篡改。
2. 数据完整性:MACsec协议通过对以太网帧进行完整性校验,能够检测出数据在传输过程中是否被篡改,从而确保数据的完整性。
3. 身份验证:MACsec协议使用了基于IEEE 802.1X的身份验证机制,能够识别通信双方的身份,并确保通信双方的身份是合法的。
三、MACsec协议在以太网链路保护中的重要性MACsec协议在保护以太网链路安全方面发挥着重要的作用。
它可以有效地防止以下几种攻击:1. 窃听攻击:MACsec协议通过对数据进行加密,防止未经授权的人员窃听网络中的数据,确保数据的机密性。
2. 重放攻击:MACsec协议在每个以太网帧上添加了序列号,防止攻击者通过重放已经捕获的帧来进行攻击,确保数据的完整性。
macsec协议分析
macsec协议分析Macsec协议是一种分布式文件传输协议,可支持以太、以太网、 RDP和 FTP连接。
在某些情况下,以太是网络的一个重要组成部分。
Macsec协议提供了一种基于标准的以太网传输协议(experience Transmission Communication Extended Protocol),它提供了从以太网到 RDP的各种连接。
本文将为您详细介绍这一协议。
该协议主要由以下四个部分组成:协议定义与数据源:协议协议必须符合数据流、数据包、系统协议、数据存储和应用层协议定义等特征,才能成为一个可扩展协议。
协议必须保证在传输数据时不会被篡改或损坏。
1.定义Macsec协议定义了从以太网到 RDP的各种连接(图1),在这种情况下数据流可以在多个节点之间进行传输。
所有节点都需要将数据发送到网络上,然后再将数据发送到 RDP端,与网络上每个节点都连接。
数据可以通过 SRZ、 QSP或 NAT等方式传输。
Macsec协议用于连接以太网,它与 Server、 Network、 OpenWrite、 Wireless Machine Transmission等协议共同构成了一个网络应用程序。
Macsec协议最早于2000年问世于 Intel公司。
该协议与 IBM公司之前发布的 RDP协议有所不同。
RDP协议基于数据流而非传输机制,因此能够实现更大容量、更快的数据传输,同时也允许用户将数据从网络传输到其他网络。
在一些情况下, RDP协议具有更大的数据传输能力。
2.流在 macsec的协议定义中, Macsec主要是通过将流量传递到整个网络来实现,因此,所有与流量相关的信息都应该在协议中进行封装。
当 Macsec向客户端发送数据时,要注意两点:·在发送之前,要确定报文的来源和目的;·在发送过程中保证数据在报文中不会被更改;·数据在发送时必须是同步的;·数据的目的和流量不应该有冲突;·要有适当的数据传输模式,可以提供更多的通道;·与其他协议相比, Macsec的传输模式不太适用于分布式传输协议和 TCP/IP协议;· TCP/IP协议中的数据可以很容易地以多条路径传输。
以太网MAC协议
以太网MAC协议1位/字节顺序的表示方法1.1位序严格地讲,以太网对于字节中位的解释是完全不敏感的。
也就是说,以太网并不需要将一个字节看成是一个具有8个比特的数字值。
但是为了使位序更容易描述以及防止不兼容,以太网和多数数据通信系统一样,传输一个字节的顺序是从最低有效位(对应于20的数字位)到最高有效位(对应于27的数字位)。
另外习惯上在书写二进制数字时,最低值位写在最左面,而最高值位写在最右面。
这种写法被称为“小端”形式或正规形式。
一个字节可以写成两个十六进制数字,第一个数字(最左边)是最高位数字,第二个(最右边)是最低位数字。
1.2字节顺序如果所有有定义的数据值都是1字节长,则在介绍完位序后就可以停止了。
但是很不幸事实并非如此,所以我们必须面对长于单个字节的域,这些域是以从左到右排列的,以连接符“-”分隔的字节串表示。
每个字节包含两个十六进制数字。
多字节域的各个字节按第一个到最后一个(即从左到右)的顺序发送,而每个字节采用小端位序传送。
例如,6字节域:08-00-60-01-2C-4A将按以下顺序(从左向右读)串行地发送:0001 0000-0000 0000-0000 0110-1000 0000-0011 0100-0101 00102以太网地址地址是一个指明特定站或一组站的标识。
以太网地址是6字节(48比特)长。
图1说明了以太网地址格式。
图1 以太网地址格式在目的地址中,地址的第1位表明该帧将要发送给单个站点还是一组站点。
在源地址中,第1位必须为0。
站地址要唯一确定是至关重要的,一个帧的目的地不能是模糊的。
地址的唯一性可以是:●局限于本网络内。
保证地址在某个特定LAN中是唯一的,但不能保证在相互连接的LAN中是唯一的。
当使用局部唯一地址时,要求网络管理员对地址进行分配。
●全局的。
保证地址在所有的LAN中,在任何时间,以及对于所有的技术都是唯一的,这是一个强大的机制,因为:(1)使网络管理员不必为地址分配而烦恼;(2)使得站点可以在LAN之间移动,而不必重新分配地址;(3)可以实现数据链路网桥/交换机。
MACsec以太网加密
MACsec以太网加密以太网是目前最常用的局域网技术之一,但其在数据传输的安全性方面存在着一些不足。
为了解决这一问题,IEEE(国际电工电子工程师协会)提出了MACsec(以太网安全)协议,该协议可以在以太网链路层对数据进行加密和验证,从而保障数据的机密性和完整性。
一、MACsec的基本原理MACsec通过在以太网链路层对数据进行加密和验证,为数据传输提供了更高的安全性。
其基本原理如下:1. 安全连接的建立:在通信双方之间建立安全连接之前,需要进行密钥协商,以确保通信双方使用相同的密钥来进行加密和验证操作。
2. 数据加密:MACsec使用对称加密算法对数据进行加密,保证数据在传输过程中不被窃取或篡改。
加密后的数据只能由具有正确密钥的接收方解密。
3. 数据完整性保护:MACsec使用消息完整性代码(MIC)来验证数据在传输过程中是否被篡改。
接收方可以通过验证MIC来确定数据的完整性,并拒绝被篡改的数据。
4. 密钥更新:为了保障安全性,密钥必须定期更新。
密钥更新的过程对于确保数据的安全至关重要。
二、MACsec的工作模式MACsec可以工作在两种不同的模式下:1. 点对点模式:在点对点模式下,MACsec只保护通信双方之间的数据传输安全。
数据在发送前进行加密,并在接收端进行解密和验证。
2. 多点模式:在多点模式下,MACsec可以同时保护多个终端间的数据传输安全。
数据在发送前进行加密,并在每个接收终端进行解密和验证。
三、MACsec的应用领域MACsec在以下多个领域有着广泛的应用:1. 企业内部网络安全:对于企业来说,保障内部网络的安全性非常重要。
MACsec可以确保在企业局域网内进行的数据传输过程中,不会被窃取或篡改。
2. 数据中心网络安全:数据中心是存储和处理大量敏感数据的地方,因此对其网络安全的保护要求非常高。
MACsec可以提供强大的数据传输安全机制,确保数据中心网络的安全性。
3. 云计算环境安全:随着云计算的广泛应用,数据在云端传输过程中的安全性成为一个重要问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以太网MAC协议1位/字节顺序的表示方法1.1位序严格地讲,以太网对于字节中位的解释是完全不敏感的。
也就是说,以太网并不需要将一个字节看成是一个具有8个比特的数字值。
但是为了使位序更容易描述以及防止不兼容,以太网和多数数据通信系统一样,传输一个字节的顺序是从最低有效位(对应于20的数字位)到最高有效位(对应于27的数字位)。
另外习惯上在书写二进制数字时,最低值位写在最左面,而最高值位写在最右面。
这种写法被称为“小端”形式或正规形式。
一个字节可以写成两个十六进制数字,第一个数字(最左边)是最高位数字,第二个(最右边)是最低位数字。
1.2字节顺序如果所有有定义的数据值都是1字节长,则在介绍完位序后就可以停止了。
但是很不幸事实并非如此,所以我们必须面对长于单个字节的域,这些域是以从左到右排列的,以连接符“-”分隔的字节串表示。
每个字节包含两个十六进制数字。
多字节域的各个字节按第一个到最后一个(即从左到右)的顺序发送,而每个字节采用小端位序传送。
例如,6字节域:08-00-60-01-2C-4A将按以下顺序(从左向右读)串行地发送:0001 0000-0000 0000-0000 0110-1000 0000-0011 0100-0101 00102以太网地址地址是一个指明特定站或一组站的标识。
以太网地址是6字节(48比特)长。
图1说明了以太网地址格式。
图1 以太网地址格式在目的地址中,地址的第1位表明该帧将要发送给单个站点还是一组站点。
在源地址中,第1位必须为0。
站地址要唯一确定是至关重要的,一个帧的目的地不能是模糊的。
地址的唯一性可以是:●局限于本网络内。
保证地址在某个特定LAN中是唯一的,但不能保证在相互连接的LAN中是唯一的。
当使用局部唯一地址时,要求网络管理员对地址进行分配。
●全局的。
保证地址在所有的LAN中,在任何时间,以及对于所有的技术都是唯一的,这是一个强大的机制,因为:(1)使网络管理员不必为地址分配而烦恼;(2)使得站点可以在LAN之间移动,而不必重新分配地址;(3)可以实现数据链路网桥/交换机。
全局唯一地址以块为单位进行分配,地址块由IEEE管理。
一个组织从IEEE 获得唯一的地址块(称为OUI),并可用该地址块创建224个设备。
那么保证该地址块中地址(最后3个字节)的唯一性就是制造商的责任。
地址中的第2位指示该地址是全局唯一还是局部唯一。
除了个别情况,历史上以太网一直使用全局唯一地址。
3以太网数据帧格式图2 基本的以太网帧格式及传输次序图2显示了以太网MAC帧各个字段的大小和内容以及传输次序。
该格式中每个字段的字节次序是先传输的字节在左,后传输的字节在右。
在每个字节中的位次序正好相反,低位在左,高位在右。
字节次序和位的次序通常用于FCS之外的所有字段。
FCS将作为一个特殊的32位字段(最高位在左),而不是4个单独的字节。
3.1前导码(Preamble)和帧起始定界符(SFD)前导码包含8个字节。
前7个字节(56位)的职位0x55,而最后一个字节为帧起始定界符,其值为0xD5。
结果前导码将成为一个由62个1和0间隔(10101010---)的串行比特流,最后2位是连续的1,表示数据链路层帧的开始。
其作用就是提醒接收系统有帧的到来,以及使到来的帧与输入定时进行同步。
在DIX以太网中,前导码被认为是物理层封装的一部分,而不是数据链路层的封装。
3.2地址字段每个MAC帧包含两个地址字段:目标地址(Destination Address)和源地址(Source Address)。
目的地址标识了帧的目的地站点,源地址标识了发送帧的站。
DA可以是单播地址(单个目的地)或组播地址(组目的地),SA通常是单播地址(即,第1位是0)。
3.3长度/类型(Length/Type )长度/类型字段具有两种意义中的一种。
如果这个字段的值小于1518,那么这个字段就是长度字段,并定义后面的数据字段的长度。
但是如果这个字段的值大于1518,它就标识了在以太网上运行的客户端协议。
3.4数据(Data)数据字段包含46~1500字节。
数据域封装了通过以太网传输的高层协议信息。
由于CSMA/CD算法的限制,以太网帧必须不能小于某个最小长度。
高层协议要保证这个域至少包含46个字节。
数据域长度的上限是任意的,但已经被设置为1500字节。
3.5帧校验序列(FCS)帧校验序列包含4个字节。
FCS是从DA开始到数据域结束这部分的校验和。
校验和的算法是32位的循环冗余校验法(CRC)。
关于FCS部分后面将做详细介绍。
4无效的MAC帧格式满足下面条件至少一个的MAC帧即无效:(1)帧长度和length/type字段中指定的长度不一致。
如果length/type中包含的是类型值,则认为帧长度与该字段值一致而不认为是无效帧。
(2)不是整数字节的长度。
(3)对接收到的帧进行CRC校验,发现错误。
无效的MAC帧内容将不传送到LLC层或MAC控制子层。
并将出现无效帧这一情况报告给网络管理。
5 CSMA/CD协议为了通信的简便,以太网采用了两种重要的措施:第一,采用无连接的工作方式,在传输数据之前无需建立连接。
第二,对发送的帧不进行编号,也不要求接收方发回确认帧。
这样做的理由是不同于其他网络,局域网信道的质量非常好,因为信道质量而产生错误的概率非常小。
这与一般数据链路层协议有些区别,如滑动窗口协议等。
因此以太网提供的是服务是不可靠交付,即尽最大努力的交付。
当目的站点收到有错误的数据帧时,就简单的丢弃该帧,除此之外什么也不做。
上层协议会发现并处理,如上层协议发现丢失了一些数据,则过一段时间会把这些数据重新交给以太网,但以太网并不认为这是一个重传的帧,而是当作一个新的帧来处理。
在半双工模式下,一个重要的问题就是如何协调总线上的各个站点,因为半双工模式同一时间只允许一个站点发送数据,否则各站点之间将会互相干扰。
以太网采用的就是被称为CSMA/CD,即载波监听多路访问/冲突检测的协议。
“多路访问”说明是总线型网络,许多站点以多点的方式共用一个总线。
协议的实质是载波监听和冲突检测。
“载波监听”就是指站点在发送数据前先检查总线上是否已有数据在传输,如有则暂缓发送,避免冲突。
实质就是在冲突发生前尽量避免。
“冲突检测”就是边发送边对媒体上的电压信号大小进行监测。
当一个站点监测到电压摆动值超过一定的门限时,就可认为发生了冲突。
冲突检测具体由物理层完成,数据链路层根据物理层的信号来判断是否有冲突。
一旦发生了冲突,站点就要停止发送数据,然后根据协议进行重传。
5.1帧的发送数据发送模块主要实现以下两个功能:1)数据的封装。
2)发送媒体管理。
包括信道获取,冲突处理等。
5.1.1数据的封装发送模块按照以太网MAC帧格式,将待发送的数据与目的地址,源地址,类型/长度字段进行组合,并根据数据长度添加适当的填充字段以达到802. 3标准规定的最小帧长度,然后计算CRC校验作为FCS字段添加在帧尾,形成一个完整的MAC帧。
在发送时,模块首先自动生成并发送前同步码和帧开始定界符,然后开始发送组装好的MAC帧。
5.1.2发送媒体管理等待机制(Defference)当一个待发送帧准备就绪时,按照工作模式的不同,发送模块采用2种规则。
半双工模式:在半双工模式下,为了避免其他主机竞争媒体而产生的冲突,MAC通过监听载波信号来得知是否有其他站点在发送信息。
该信号由物理层信号提供。
如信道忙,MAC会暂缓发送自己的数据,直到信号变为空闲时,才开始发送。
通常当信道变为空闲后,MAC并不立刻发送数据,而是继续等待一个帧间间隔,目的是给物理层以及其他站点的MAC处理上一个帧的时间。
当一切准备就绪后,MAC就把帧交给物理层以二进制数据流的形式发送出去。
全双工模式:而在全双工模式下,情况则大不相同。
由于站点之间的连接为点到点,且可以同时进行发送和接收,所以就不存在冲突,也就不需要载波监听。
待发送的帧只要等待一个帧间间隔就可以立刻发送,不需要考虑是否正在接收数据。
5.1.3冲突监测和处理:在半双工模式下,假如有多个站点企图同时发送数据,尽管每个发送站都有等待机制,然而还是很有可能会相互干扰。
当2个站发送的信号叠加时,冲突就发生了。
只有在半双工的模式下,才有可能会发生冲突。
冲突说明当前有多个站企图使用共享信道。
在全双工模式下,两个站点之间有着点到点的独享信道,不存在冲突。
尽管物理层仍然会提供冲突信号,然而在全双工模式下,这个信号被忽略了。
当某个站点开始发送数据时,仅在发送开始的一段时间内可能遭遇到冲突,这个时间段被称为冲突窗口(collision window)。
这是由于信号在媒体上传播也需要时间,冲突窗口就是发送站点的信号传遍冲突域所需的时间。
这是一个很重要的参数,以太网取传输512bit数据所用时间为争用期的长度。
需要指出,以太网的端到端时延实际上是小于争用期的一半的,争用期被规定为传输512bit所用时间,不仅是考虑了以太网的端到端时延,而且还包括其它的许多因素,如可能存在的转发器所增加的时延,以及强化冲突的干扰信号的持续时间等。
一般以太网的冲突多为发生在冲突窗口内。
一旦冲突发生,物理层会监测到干扰信号,于是冲突监测信号被置1。
在半双工模式下,发送模块的接入管理模块响应这一信号,冲突处理机制开始执行。
首先,该模块会发送一系列被称为冲突强化的信息,确保其他的站点也能得知冲突的发生,强化冲突过后,发送端终止当前发送,并等待一个随机的时间重新尝试发送。
重新发送同样也有可能遭遇到冲突,最终的结果有两个,一是发送成功,二是达到了重传的数量上限,发送失败。
在全双工模式下,发送站点忽略物理层的冲突信号,站点随时可以发送帧而不会有冲突发生,所以不需要强化冲突和重传机制。
5.1.4退避算法以及重传以太网使用截断二进制指数回退算法来解决冲突后的重发问题。
截断二进制指数回退算法很简单,就是让发生冲突的站点在停止发送数据后,不是立刻重发,而是推迟一个随机的时间。
这样就使得重发时再次发生冲突的概率减小。
具体的算法是:(1)确定单位回退时间,通常是取冲突窗口的值,即传输512bit数据所需时间,称为时槽。
(2)定义参数k,它等于重传次数,但不超过10,因此k=min (n, 10)。
(3)取r满足0≤r <2 k。
重传的时延就是r倍的时槽。
(4)当重传达到16次仍不能成功时(这表明同时打算发送数据的站点过多,导致连续发生冲突),则丢弃该帧,并向上层协议报告。
使用以上的回退算法可使重传需要推迟的平均时间随重传次数增加而增加,这也被称为动态退避,有利于整个系统的稳定。
5.2帧的接收在接收端,站监视信道以获得帧到达的指示。
当发现信道变成非空闲状态时,站开始从信道接收比特,并查找标志MAC帧起始的前导码(preamble)和帧起始定界符(SDF)。