”網卡”(MAC+PHY)的相關知識

來源:互聯網
上載者:User

一塊乙太網路網卡包括OSI(開方系統互聯)模型的兩個層。物理層和資料連結層。物理層定義了資料傳送與接收所需要的電與光訊號、線路狀態、時鐘基準、資料編碼和電路等,並向資料連結層裝置提供標準介面。資料連結層則提供定址機構、資料幀的構建、資料差錯檢查、傳送控制、向網路層提供標準的資料介面等功能。

1.網卡的基本結構

乙太網路卡中資料連結層的晶片一般簡稱之為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的目標地址是廣播位址,裡面說到:”誰是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/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電壓的,也起到了防雷感應(個人認為這裡用防雷擊不合適)保護的作用。有些朋友的網路裝置在雷雨天氣時容易被燒壞,大都是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 IndependedInterfade,介質獨立介面)介面串連MAC和PHY,這個介面是IEEE定義的。MII介面傳遞了網路的所有資料和資料的控制。而MAC對PHY的工作狀態的確定和對PHY的控制則是使用SMI(Serial ManagementInterface)介面通過讀寫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同樣是通過電話線傳送的,卻是數字訊號。這取決於它傳出和接受採用的技術。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.