網卡介紹——MAC與PHY的關係分析

(一) 網卡初步認識 

網絡適配器又稱網卡或網絡接口卡(NIC),英文名Network Interface Card.它是使計算機聯網的設備.平常所說的網卡就是將PC機和LAN連接的網絡適配器.網卡(NIC) 插在計算機主板插槽中,負責將用戶要傳遞的數據轉換爲網絡上其它設備能夠識別的格式,通過網絡介質傳輸.數據在計算機總線中傳輸是並行方式即數據是肩並肩傳輸的,而在網絡的物理纜線中說數據以串行的比特流方式傳輸的,網卡承擔串行數據和並行數據間的轉換.網卡在發送數據前要同接收網卡進行對話以確定最大可發送數據的大小,發送的數據量的大小,兩次發送數據間的間隔,等待確認的時間,每個網卡在溢出前所能承受的最大數據量,數據傳輸的速度.

它的主要技術參數爲帶寬,總線方式,電氣接口方式等.它的基本功能爲:從並行到串行的數據轉換,包的裝配和拆裝,網絡存取控制,數據緩存和網絡信號.

網卡的主要工作原理:發送數據時, 計算機把要傳輸的數據並行寫到網卡的緩存,網卡對要傳輸的數據進編碼(10M以太網使用曼切斯特碼,100M 以太網使用差分曼切斯特碼), 串行發到傳輸介質上.接收數據時, 則相反.

1. 網卡的基本構造

以最常見的PCI 接口的網卡爲例,一塊網卡主要由 PCB 線路板,主芯片,數據汞,金手指(總線插槽接口) ,BOOTROM,EEPROM,晶振,RJ45接口,指示燈,固定片等等,以及一些二極管,電阻電容等組成.網卡包括硬件和固件程序(只讀存儲器中的軟件例程),該固件程序實現邏輯鏈路控制和媒體訪問控制的功能,還記錄唯一的硬件地址即mac地址,網卡上一般有緩存.網卡須分配中斷irq及基本i/o端口地址,同時還須設置基本內存地址(base memory address)和收發器(transceiver)

  1. 網卡的控制芯片:網卡中最重要元件,是網卡的控制中心,有如電腦的cpu,控制着整個網卡的工作,負責數據的傳送和連接時的信號偵測.早期的10/100Mbps的雙速網卡會採用兩個控制芯片(單元)分別用來控制兩個不同速率環境下的運算,而目前較先進的產品通常只有一個芯片控制兩種速度.

常見的 10/100/1000M bps自適應網卡芯片有 Intel 的8254* 系列,Broadcom 的BCM57**系列,Marvell的
88E8001/88E8053/88E806*系列,Realtek的RTL8169S-32/64,RTL8110S-32/64(LOM),RTL8169SB,RTL8110SB(LOM) ,RTL8168(PCI Express) ,RTL8111(LOM,PCI Express) 系列,VIA 的VT612*系列等等.

  1. 晶體震盪器:負責產生網卡所有芯片的運算時鐘,其原理就象主板上的晶體震盪器一樣,通常網卡是使用20或25hz的晶體震盪器.千兆網卡使用62.5MHz或者125MHz晶振.
  2. boot rom插槽:如無特殊要求網卡中的這個插槽處在空置狀態.一般是和boot rom芯片搭配使用,其主要作用是引導電腦通過服務器引導進入操作系統.boot rom就是啓動芯片,讓電腦可以在不具備硬盤,軟驅和光驅的情況下,直接通過服務器開機,成爲一個無硬盤無軟驅的工作站.沒有軟驅就無法將資料輸出,這樣也可以達到資料保密的功能.同時,還可以節省下購買這些電腦部件的費用.在使用boot rom時要注意自己使用何種網絡操作系統,通常有boot rom for nt,boot rom for unix,boot rom for netware等,boot rom啓動芯片要自行購買.
  3. eeprom:從前的老式網卡都要靠設置跳線或是dip開關來設定irq,dma和i/o port等值,而現在的網卡則都使用軟件設定,幾乎看不見跳線的存在.各種網卡的狀態和網卡的信息等數據都存在這顆小小的eeprom裏,通過它來自動設置.裏面記錄了網卡芯片的供應商ID,子系 統供應商ID,網卡的MAC地址,網卡的一些配置,如SMI總線上PHY的地址,BOOTROM的容量, 是否啓用BOOTROM引導系統等東西
  4. 數據汞:這是消費級PCI 網卡上都具備的設備,數據汞也被叫做網絡變壓器或可稱爲網絡隔離變壓器.它在一塊網卡上所起的作用主要有兩個,一是傳輸數據,它把 PHY 送出來的差分信號用差模耦合的線圈耦合濾波以增強信號,並且通過電磁場的轉換耦合到不同電平的連接網線的另外一端;一是隔離網線連接的不同網絡設備間的不同電平,以防止不同電壓通過網線傳輸損壞設備.除此而外,數據汞還能對設備起到一定的防雷保護作用.
  5. rj-45和bnc接頭: rj-45是採用雙絞線作爲傳輸媒介的一種網卡接口,在100mbps網中最常應用.bnc是採用細同軸電纜作爲傳輸媒介.
  6. 信號指示燈:在網卡後方會有二到三個不等的信號燈,其作用是顯示目前網絡的連線狀態,通常具有tx和rx兩個信息.tx代表正在送出資料,rx代表正在接收資料,若看到兩個燈同時亮則代表目前是處於全雙工的運作狀態,也可由此來辨別全雙工的網卡是否處於全雙工的網絡環境中.也有部分低速網卡只用一個燈來表示信號,通過不同的燈光變換來表示網絡是否導通.
  7. WOL:有些網卡會有WOL的功能, WOL網絡開機的功能(wake on line).它可由另外一臺電腦,使用軟件製作特殊格式的信息包發送至一臺裝有具wol功能網卡的電腦,而該網卡接收到這些特殊格式的信息包後,就會命令電腦打開電源,目前已有越來越多的網卡支持網絡開機的功能.

2. 網卡的分類

  • 以傳輸速率可分爲:

10Mbps網卡,100Mbps網卡,1000Mbps網卡,10GMbps網卡.目前常見的三種架構有10baset,100basetx與base2,前兩者是以rj-45雙絞線爲傳輸媒介,傳輸速率分別爲10Mbps和100Mbps.而雙絞線又分爲category 1至category 5五種規格,分別有不同的用途以及頻寬,category通常簡稱cat,只要使用cat5規格的雙絞線皆可用於10/100mbps的網卡上.而10base2架構則是使用細同軸電纜作爲傳輸媒介,傳輸速率只有10Mbps.這裏提到的10Mbps或100Mbps是指網卡上的最大傳送速率,而並不等於網絡上實際的傳送速度,實際速度要考慮到傳送的距離,線路的品質,和網絡上是否擁擠等因素,這裏所談的bps指的是每秒傳送的bit(1個byte=8個bit).而100Mbps則稱爲高速以太網卡(fast ethernet),多爲PCI/PCI-E接口.當前市面上的pci網卡多具有10/100/1000Mbps自動切換的功能,會根據所在的網絡連線環境來自動調節網絡速度.1000 Mbps以太網卡多用於交換機或交換機與服務器之間的高速鏈路或backbone.

  • 以接口類型可分爲:

ISA接口網卡,PCI/ PCI-X/ PCI-E接口網卡,USB接口網卡和筆記本電腦專用的PCMCIA接口.現在的ISA接口的網卡均採用16bit的總線寬度,其特性是採用programmed i/o的模式傳送資料,傳送數據時必須通過cpu在i/o上開出一個小窗口,作爲網卡與pc之間的溝通管道,需要佔用較高的cpu使用率,在傳送大量數據時效率較差. PCI接口的網卡則採用32bit的總線頻寬,採用bus master的數據傳送方式,傳送數據是由網卡上的控制芯片來控制,不必通過i/o端口和cpu,可大幅降低cpu的佔用率,目前產品多爲10/100Mbps雙速自動偵測切換網卡.

  • 以傳輸方式可分爲:

半雙工網卡,全雙工網卡.半雙工網卡無法同一時間內完成接收與傳送數據的動作,如10base2使用細同軸電纜的網絡架構就是半雙工網絡,同一時間內只能進行傳送或接收數據的工作,效率較低.要使用全雙工的網絡就必須要使用雙絞線作爲傳輸線才能達到,並且也要搭配使用全雙工的集線器,要使用10base或100basetx的網絡架構,網卡當然也要是全雙工的產品.

  • 以傳輸介質可分爲:

rj-45雙絞線的網卡與bnc的同軸電纜兩種,有的網卡同時具有兩種接頭,可適用於兩種網絡線,但無法兩個接頭同時使用.另外還有光纖接口的網卡,通常帶寬在1000 Mbps.

  • 其它網卡:

從網絡傳輸的物理媒介上還有無線網卡,利用2.4GHz的無線電波來傳輸數據.目前ieee有兩種規範802.11和802.11b,最高傳輸速率分別爲2Mbps和11Mbps,接口有PCI,USB和PCMCIA幾種. 

(二)Mac與Phy組成原理的簡單分析

1. general

下圖是網口結構簡圖.網口由CPU、MAC和PHY三部分組成.DMA控制器通常屬於CPU的一部分,用虛線放在這裏是爲了表示DMA控制器可能會參與到網口數據傳輸中.

對於上述的三部分,並不一定都是獨立的芯片,根據組合形式,可分爲下列幾種類型:

  1. CPU集成MAC與PHY;
  2. CPU集成MAC,PHY採用獨立芯片;
  3. CPU不集成MAC與PHY,MAC與PHY採用集成芯片;

本例中選用方案二做進一步說明,因爲CPU總線接口很常見,通常都會做成可以像訪問內存一樣去訪問,沒必要拿出來說,而Mac與PHY之間的MII接口則需要多做些說明.

下圖是採用方案二的網口結構圖.虛框表示CPU,MAC集成在CPU中.PHY芯片通過MII接口與CPU上的Mac連接.

在軟件上對網口的操作通常分爲下面幾步:

  1. 爲數據收發分配內存;
  2. 初始化MAC寄存器;
  3. 初始化PHY寄存器(通過MIIM);
  4. 啓動收發; 

2. MII

MII接口是MAC與PHY連接的標準接口.因爲各廠家採用了同樣的接口,用戶可以根據所需的性能、價格,採用不同型號,甚至不同公司的phy芯片.

需要發送的數據通過MII接口中的收發兩組總線實現.而對PHY芯片寄存器的配置信息,則通過MII總的一組串口總線實現,即MIIM(MII Management).

下表列出了MII總線中主要的一些引腳

PIN Name

Direction

Description

TXD[0:3]

Mac to Phy

Transmit Data

TXEN

Mac to Phy

Transmit Enable

TXCLK

Mac to Phy

Transmit Clock

RXD[0:3]

Phy to Mac

Receive Data

RXEN

Phy to Mac

Receive Enable

RXCLK

Phy to Mac

Receive Clock

MDC

Mac to Phy

Management Data Clock

MDIO

Bidirection

Management Data I/O

MIIM只有兩個線, 時鐘信號MDC與數據線MDIO.讀寫命令均由Mac發起, PHY不能通過MIIM主動向Mac發送信息.由於MIIM只能有Mac發起, 我們可以操作的也就只有MAC上的寄存器.

3. DMA

收發數據總是間費時費力的事,尤其對於網絡設備來說更是如此.CPU做這些事情顯然不合適.既然是數據搬移, 最簡單的辦法當然是讓DMA來做.畢竟專業的纔是最好的.

這樣CPU要做的事情就簡單了.只需要告訴DMA起始地址與長度, 剩下的事情就會自動完成.

通常在MAC中會有一組寄存器專門用戶記錄數據地址, tbase與rbase, cpu按MAC要的格式把數據放好後, 啓動MAC的數據發送就可以了.啓動過程常會用到寄存器tstate.

4. MAC

CPU上有兩組寄存器用與MAC.一組用戶數據的收發,對應上面的DMA;一組用戶MIIM,用戶對PHY進行配置.兩組寄存器由於都在CPU上,配置方式與其他CPU上寄存器一樣,直接讀寫即可.數據的轉發通過DMA完成.  

5. PHY

該芯片是一個10M/100M Ethernet網口芯片

PHY芯片有一組寄存器用戶保存配置,並更新狀態.CPU不能直接訪問這組寄存器,只能通過MAC上的MIIM寄存器組實現間接訪問.同時PHY芯片負責完成MII總線的數據與Media Interface上數據的轉發.該轉發根據寄存器配置自動完成,不需要外接干預.

 

(三)以太網芯片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 or the 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以太網的相關協議.

 

文章內容轉載自:https://www.cnblogs.com/jason-lu/p/3195473.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章