⽹卡究竟⼯作在OSI的哪⼀层?
转载:
答案:⽹卡⼯作在物理层和数据链路层的MAC⼦层。
解密⽹络传输⼯程师带你深⼊认识⽹卡
⼀、什么是⽹卡?
⽹卡现在已经上成为了⽬前电脑⾥的标准配置之⼀。⼩⼩的⽹卡,究竟蕴涵着多少秘密呢?让我们⼀起来看。
我们最常⽤的⽹络设备当属⽹卡了。⽹卡本⾝是LAN(局域⽹)的设备,通过⽹关、路由器等设备就可以把这个局域⽹挂接到Internet上。⽽Internet本⾝就是⽆数个这样的局域⽹组成的。
⽹卡有许多种,按照数据链路层控制来分有以太⽹卡,令牌环⽹卡,ATM⽹卡等;按照物理层来分类有⽆线⽹卡,RJ-45⽹卡,同轴电缆⽹卡,光线⽹卡等等。它们的数据链路控制、寻址、帧结构等不同;物理上的连接⽅式不同、数据的编码、信号传输的介质、电平等不同。以下主要介绍我们最常⽤到的以太⽹⽹卡。以太⽹采⽤的CSMA/CD(载波侦听多路访问/冲突检测)的控制技术。他主要定义了物理层和数据链
路层的⼯作⽅式。数据链路层和物理层各⾃实现⾃⼰的功能,相互之间不关⼼对⽅如何操作。⼆者之间有标准的接⼝(例如MII,GMII等)来传递数据和控制。
以太⽹卡的物理层可以包含很多种技术,常见的有RJ45,光纤,⽆线等,它们的区别在于传送信号的物理介质和媒质不同。这些都在IEEE的802协议族中有详细的定义。
这次我们主要讨论的RJ45的⽹卡属于IEEE802.3定义的范围。
⼆、⽹卡的组成
1.⽹卡的基本结构
⼀块以太⽹⽹卡包括 OSI(开⽅系统互联)模型的两个层。物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接⼝。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向⽹络层提供标准的数据接⼝等功能。
以太⽹卡中数据链路层的芯⽚⼀般简称之为MAC控制器,物理层的芯⽚我们简称之为PHY。许多⽹卡的芯⽚把MAC和PHY的功能做到了⼀颗芯⽚中,⽐如Intel 82559⽹卡的和3COM 3C905⽹卡。但是MAC和PHY的机制还是单独存在的,只是外观的表现形式是⼀颗单芯⽚。当然也有很多⽹卡的MAC和PHY是
分开做的,⽐如D-LINK的DFE-530TX等。
2.什么是MAC?
⾸先我们来说说以太⽹卡的MAC芯⽚的功能。以太⽹数据链路层其实包含MAC(介质访问控制)⼦层和LLC(逻辑链路控制)⼦层。⼀块以太⽹卡MAC芯⽚的作⽤不但要实现MAC⼦层和LLC⼦层的功能,还要提供符合规范的PCI界⾯以实现和主机的数据交换。
MAC从PCI总线收到IP数据包(或者其他⽹络层协议的数据包)后,将之拆分并重新打包成最⼤1518Byte,最⼩64Byte的帧。这个帧⾥⾯包括了⽬标MAC地址、⾃⼰的源MAC地址和数据包⾥⾯的协议类型(⽐如IP数据包的类型⽤80表⽰)。最后还有⼀个DWORD(4Byte)的CRC码。
可是⽬标的MAC地址是哪⾥来的呢?这牵扯到⼀个ARP协议(介乎于⽹络层和数据链路层的⼀个协议)。第⼀次传送某个⽬的IP地址的数据的时候,先会发出⼀个ARP包,其MAC的⽬标地址是⼴播地址,⾥⾯说到:"谁是x这个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/GMII(介质独⽴接⼝)⼦层、PCS(物理编码⼦层)、PMA(物理介质附加)⼦层、PMD(物理介质相关)⼦层、MDI⼦层。⽽PHY芯⽚是实现物理层的重要功能器件之⼀,实现了前⾯物理层的所有的⼦层的功能。
3.⽹络传输的流程
PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据⽽不管什么地址,数据还是CRC),每4bit就增加1bit的检错码,然后把并⾏数据转化为串⾏流数据,再按照物理层的编码规则(10Based-T的NRZ编码或100based-T的曼彻斯特编码)把数据编码,再变为模拟信号把数据送出去。(注:关于⽹线上数据是数字的还是模拟的⽐较不容易理解清楚。最后我再说)
收数据时的流程反之。
PHY还有个重要的功能就是实现CSMA/CD的部分功能。它可以检测到⽹络上是否有数据在传送,如果有数据在传送中就等待,⼀旦检测到⽹络空闲,再等待⼀个随机时间后将送数据出去。如果两块⽹卡碰巧同时送出了数据,那样必将造成冲突,这时候,冲突检测机构可以检测到冲突,然后各等待⼀个随机的时间重新发送数据。
这个随机时间很有讲究的,并不是⼀个常数,在不同的时刻计算出来的随机时间都是不同的,⽽且有多重算法来应付出现概率很低的同两台主机之间的第⼆次冲突。
许多⽹友在接⼊Internt宽带时,喜欢使⽤"抢线"强的⽹卡,就是因为不同的PHY碰撞后计算随机时间的⽅法设计上不同,使得有些⽹卡⽐较"占便宜"。不过,抢线只对⼴播域的⽹络⽽⾔的,对于交换⽹络和ADSL这样点到点连接到局端设备的接⼊⽅式没什么意义。⽽且"抢线"也只是相对⽽⾔的,不会有质的变化。4.关于⽹络间的冲突
现在交换机的普及使得交换⽹络的普及,使得冲突域⽹络少了很多,极⼤地提⾼了⽹络的带宽。但是如果⽤HUB,或者共享带宽接⼊Internet的时候还是属于冲突域⽹络,有冲突碰撞的。交换机和HUB最⼤的区别就是:⼀个是构建点到点⽹络的局域⽹交换设备,⼀个是构建冲突域⽹络的局域⽹互连设备。
我们的PHY还提供了和对端设备连接的重要功能并通过LED灯显⽰出⾃⼰⽬前的连接的状态和⼯作状态让我们知道。当我们给⽹卡接⼊⽹线的时候,PHY不断发出的脉冲信号检测到对端有设备,它们通过标
准的"语⾔"交流,互相协商并却定连接速度、双⼯模式、是否采⽤流控等。
通常情况下,协商的结果是两个设备中能同时⽀持的最⼤速度和最好的双⼯模式。这个技术被称为Auto Negotiation或者NWAY,它们是⼀个意思--⾃动协商。
5.PHY的输出部分
现在来了解PHY的输出后⾯部分。⼀颗CMOS制程的芯⽚⼯作的时候产⽣的信号电平总是⼤于0V的(这取决于芯⽚的制程和设计需求),但是这样的信号送到100⽶甚⾄更长的地⽅会有很⼤的直流分量的损失。⽽且如果外部⽹现直接和芯⽚相连的话,电磁感应(打雷)和静电,很容易造成芯⽚的损坏。
再就是设备接地⽅法不同,电⽹环境不同会导致双⽅的0V电平不⼀致,这样信号从A传到B,由于A设备的0V电平和B点的0V电平不⼀样,这样会导致很⼤的电流从电势⾼的设备流向电势低的设备。我们如何解决这个问题呢?
这时就出现了Transformer(隔离变压器)这个器件。它把PHY送出来的差分信号⽤差模耦合的线圈耦合滤波以增强信号,并且通过电磁场的转换耦合到连接⽹线的另外⼀端。这样不但使⽹线和PHY之间没有物理上的连接⽽换传递了信号,隔断了信号中的直流分量,还可以在不同0V电平的设备中传送数据。
隔离变压器本⾝就是设计为耐2KV~3KV的电压的。也起到了防雷感应(我个⼈认为这⾥⽤防雷击不合适)
osi模型数据链路层的主要功能是保护的作⽤。有些朋友的⽹络设备在雷⾬天⽓时容易被烧坏,⼤都是PCB设计不合理造成的,⽽且⼤都烧毁了设备的接⼝,很少有芯⽚被烧毁的,就是隔离变压器起到了保护作⽤。
6.关于传输介质
隔离变压器本⾝是个被动元件,只是把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⽹络的规范包含了AUTO MDI-X功能,因此不能严格确定它们的传出或接收的关系,要看双⽅的具体的协商结果。
7.PHY和MAC之间如何进⾏沟通
下⾯继续让我们来关⼼⼀下PHY和MAC之间是如何传送数据和相互沟通的。通过IEEE定义的标准的MII/GigaMII(Media Independed Interfade,介质独⽴界⾯)界⾯连接MAC和PHY。这个界⾯是IEEE定义的。MII界⾯传递了⽹络的所有数据和数据的控制。
⽽MAC对PHY的⼯作状态的确定和对PHY的控制则是使⽤SMI(Serial Management Interface)界⾯通过读写PHY的寄存器来完成的。PHY⾥⾯的部分寄存器也是IEEE定义的,这样PHY把⾃⼰的⽬前的状态反映到寄存器⾥⾯,MAC通过SMI总线不断的读取PHY的状态寄存器以得知⽬前PHY的状态,例如连接速度,双⼯的能⼒等。当然也可以通过SMI设置PHY的寄存器达到控制的⽬的,例如流控的打开关闭,
⾃协商模式还是强制模式等。
我们看到了,不论是物理连接的MII界⾯和SMI总线还是PHY的状态寄存器和控制寄存器都是有IEEE的规范的,因此不同公司的MAC和PHY⼀样可以协调⼯作。当然为了配合不同公司的PHY的⾃⼰特有的⼀些功能,驱动需要做相应的修改。
⼀⽚⽹卡主要功能的实现就基本上是上⾯这些器件了。
其他的,还有⼀颗EEPROM芯⽚,通常是⼀颗93C46。⾥⾯记录了⽹卡芯⽚的供应商ID、⼦系统供应商ID、⽹卡的MAC地址、⽹卡的⼀些配置,如SMI总线上PHY的地址,BOOTROM的容量,是否启⽤BOOTROM引导系统等东西。
很多⽹卡上还有BOOTROM这个东西。它是⽤于⽆盘⼯作站引导操作系统的。既然⽆盘,⼀些引导⽤必需⽤到的程序和协议栈就放到⾥⾯了,例如RPL、PXE 等。实际上它就是⼀个标准的PCI ROM。所以才会有⼀些硬盘写保护卡可以通过烧写⽹卡的BootRom来实现。其实PCI设备的ROM是可以放到主板BIOS⾥⾯的。启动电脑的时候⼀样可以检测到这个ROM并且正确识别它是什么设备的。AGP在配置上和PCI很多地⽅⼀样,所以很多显卡的BIOS也可以放到主板BIOS⾥⾯。这就是为什么板载的⽹卡我们从来没有看到过BOOTROM的原因。
8.⽹卡的供电
最后就是电源部分了。⼤多数⽹卡现在都使⽤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总线就可以实现唤醒功能。
结语
⼀块以太⽹卡就是这些部分组成。它们紧密地配合并且相互协调,供给我们⼀个稳定⽽告诉的⽹络接⼊。⽹络的普及不但极⼤地增加了⼯作效率,⽽且使我们可以⾃由的驰骋在Internet的海洋中!
注解:
⽹线上的到底是模拟信号还是数字信号呢?
答案是模拟信号。因为它传出和接收是采⽤的模拟的技术。虽然它传送的信息是数字的,并不是传送的信息是数字的,信号就可以叫做数字信号。
简单的例⼦:我们知道电话是模拟信号,但是当我们拨号上⽹的时候,电话线⾥传送的是数字信息,但信号本⾝依旧是模拟的。然⽽ADSL同样是通过电话线传送的,却是数字信号。这取决于它传出和接受采⽤的技术。
需要说明的是⽹卡芯⽚也有“软硬”之分,特别是对与主板板载(LOM)的⽹卡芯⽚来说更是如此,这是怎么回事呢?⼤家知道,以太⽹接⼝可分为协议层和物理层。协议层是由⼀个叫MAC(Media Access Layer,媒体访问层)控制器的单⼀模块实现。
物理层由两部分组成,即PHY(Physical Layer,物理层)和传输器。常见的⽹卡芯⽚都是把MAC和PHY集成在⼀个芯⽚中,但⽬前很多主板的南桥芯⽚已包含了以太⽹MAC控制功能,只是未提供物理层接⼝,因此,需外接PHY芯⽚以提供以太⽹的接⼊通道。这类PHY⽹络芯⽚就是俗称的“软⽹卡芯⽚”,常见的PHY功能的芯⽚有RTL8201BL、VT6103等等。 “软⽹卡”⼀般将⽹络控制芯⽚的运算部分交由处理器或南桥芯⽚处理,以简化线路设计,从⽽降低成本,但其多少会更多占⽤系统资源。