歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 網卡究竟工作在OSI的哪一層?

網卡究竟工作在OSI的哪一層?

日期:2017/2/28 14:54:26   编辑:Linux教程

答案:網卡工作在物理層和數據鏈路層的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的目標地址是廣播地址,裡面說到:"誰是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 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等等。 “軟網卡”一般將網絡控制芯片的運算部分交由處理器或南橋芯片處理,以簡化線路設計,從而降低成本,但其多少會更多占用系統資源。

(作者簡介:Ase,VIA網絡研發工程師,VNT via networking technologies AE/FAE。參與過100m/1000m網卡,usb2.0卡,1394卡,pcmcia的usb和1394卡,主板,帶管理交換機,顯卡等的設計工作。)

Copyright © Linux教程網 All Rights Reserved