網絡卡工作原理詳解
此篇文章對網上現有資料進行了整理和補充,提取出有用的部分,進行存檔學習。
一,認識網絡卡
網絡卡(Network Interface Card,簡稱NIC),也稱網路介面卡,是電腦與區域網相互連線的裝置。無論是普通電腦還是高階伺服器,只要連線到區域網,就都需要安裝一塊網絡卡。如果有必要,一臺電腦也可以同時安裝兩塊或多塊網絡卡。
一塊網絡卡包括OSI 模型的兩個層,物理層和資料鏈路層:
1》物理層定義了資料傳送與接收所需要的電與光訊號、線路狀態、時鐘基準、資料編碼和電路等,並向資料鏈路層裝置提供標準介面。
2》資料鏈路層則提供定址機構、資料幀的構建、資料差錯檢查、傳送控制、向網路層提供標準的資料介面等功能。
二:網絡卡的組要作用
網絡卡的功能主要有兩個:
一是將電腦的資料封裝為幀,並通過網線(對無線網路來說就是電磁波)將資料傳送到網路上去;
二是接收網路上其它裝置傳過來的幀,並將幀重新組合成資料,傳送到所在的電腦中。
網絡卡能接收所有在網路上傳輸的訊號,但正常情況下只接受傳送到該電腦的幀和廣播幀,將其餘的幀丟棄。然後,傳送到系統CPU 做進一步處理。當電腦傳送資料時,網絡卡等待合適的時間將分組插入到資料流中。接收系統通知電腦訊息是否完整地到達,如果出現問題,將要求對方重新發送。
三:網絡卡的組成和工作原理
以最常見的PCI介面的網絡卡為例:
網絡卡的組成:
(1)主晶片:網絡卡的主控制晶片是網絡卡的核心元件,一塊網絡卡效能的好壞和功能的強弱多寡,主要就是看這塊晶片的質量。如下圖所示:
(2)BOOTROM槽:BOOTROM 插座也就是常說的無盤啟動ROM 介面,其是用來通過遠端啟動服務構造無盤工作站的。如下圖所示:
(3)資料泵:作用一是傳輸資料;二是隔離網線連線的不同網路裝置間的不同電平,還能對裝置起到一定的防雷保護作用。如下圖所示:
(4)晶振即石英振盪器,提供基準頻率,如下圖所示:
(5)LED指示燈:用來標識網絡卡的不同工作狀態,例如,Link/Act表示連線活動狀態,Full表示是否全雙工,而Power是電源指示。
(6)網線介面:有BNC介面和RJ-45介面,目前主要使用8芯線的RJ-45介面。
(7)匯流排介面:用於網絡卡與電腦相連線,內建式網絡卡需要通過俗稱“金手指”的匯流排介面插在計算機主機板的擴充套件槽中。主要有ISA,PCI,PCMCIA和USB等常見的是PCI匯流排介面的網絡卡。
四:網絡卡的工作原理
- 網絡卡充當計算機和網路纜線之間的物理介面或連線,負責將計算機中的數字訊號轉換成電或光訊號。
- 網絡卡要承擔序列資料或並行資料間的轉換,資料在計算機匯流排中並行傳輸,而在網路的物理纜線中以序列的位元流傳輸。
乙太網卡中資料鏈路層的晶片一般簡稱之為 MAC 控制器,物理層的晶片我們簡稱之為PHY。許多網絡卡的晶片把MAC 和PHY 的功能做到了一顆晶片中,比如Intel 82559 網絡卡的和3COM 3C905 網絡卡。但是MAC 和PHY 的機制還是單獨存在的,只是外觀的表現形式是一顆單晶片。當然也有很多網絡卡的MAC 和PHY 是分開做的,比如D-LINK 的DFE-530TX等。
1 資料鏈路層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 晶片是實現物理層的重要功能器件之一,實現了前面物理層的所有的子層的功能。
2 物理層PHY
PHY 在傳送資料的時候,收到MAC 過來的資料(對PHY 來說,沒有幀的概念,對它來說,都是資料而不管什麼地址,資料還是CRC),每4bit 就增加1bit 的檢錯碼,然後把並行資料轉化為序列流資料,再按照物理層的編碼規則(10Based-T 的NRZ 編碼或100based-T的曼徹斯特編碼)把資料編碼,再變為模擬訊號把資料送出去。(注:關於網線上資料是數字的還是模擬的比較不容易理解清楚。最後我再說)收資料時的流程反之。傳送資料時,PHY 還有個重要的功能就是實現CSMA/CD 的部分功能,它可以檢測到網路上是否有資料在傳送。網絡卡首先偵聽介質上是否有載波(載波由電壓指示),如果有,則認為其他站點正在傳送資訊,繼續偵聽介質。一旦通訊介質在一定時間段內(稱為幀間縫隙IFG= 9.6 微秒)是安靜的,即沒有被其他站點佔用,則開始進行幀資料傳送,同時繼續偵聽通訊介質,以檢測衝突。在傳送資料期間,如果檢測到衝突,則立即停止該次傳送,並向介質傳送一個“阻塞”訊號,告知其他站點已經發生衝突,從而丟棄那些可能一直在接收的受到損壞的幀資料,並等待一段隨機時間(CSMA/CD 確定等待時間的演算法是二進位制指數退避演算法)。在等待一段隨機時間後,再進行新的傳送。如果重傳多次後(大於16 次)仍發生衝突,就放棄傳送。接收時,網絡卡瀏覽介質上傳輸的每個幀,如果其長度小於64 位元組,則認為是衝突碎片。如果接收到的幀不是衝突碎片且目的地址是本地地址,則對幀進行完整性校驗,如果幀長度大於1518 位元組(稱為超長幀,可能由錯誤的LAN 驅動程式或干擾造成)或未能通過CRC校驗,則認為該幀發生了畸變。通過校驗的幀被認為是有效的,網絡卡將它接收下來進行本地處理許多網友在接入 Internt 寬頻時,喜歡使用"搶線"強的網絡卡,就是因為不同的PHY 碰撞後計算隨機時間的方法設計上不同,使得有些網絡卡比較"佔便宜"。不過,搶線只對廣播域的網路而言的,對於交換網路和ADSL 這樣點到點連線到局端裝置的接入方式沒什麼意義。而且"搶線"也只是相對而言的,不會有質的變化。
3 關於網路間的衝突
現在交換機的普及使得交換網路的普及,使得衝突域網路少了很多,極大地提高了網路的頻寬。但是如果用HUB,或者共享頻寬接入Internet 的時候還是屬於衝突域網路,有衝突碰撞的。交換機和HUB 最大的區別就是:一個是構建點到點網路的區域網交換裝置,一個是構建衝突域網路的區域網互連裝置。我們的 PHY 還提供了和對端裝置連線的重要功能並通過LED 燈顯示出自己目前的連線的狀態和工作狀態讓我們知道。當我們給網絡卡接入網線的時候,PHY 不斷髮出的脈衝訊號檢測到對端有裝置,它們通過標準的"語言"交流,互相協商並卻定連線速度、雙工模式、是否採用流控等。通常情況下,協商的結果是兩個裝置中能同時支援的最大速度和最好的雙工模式。這個技術被稱為Auto Negotiation 或者NWAY,它們是一個意思--自動協商。
4 PHY 的輸出部分
現在來了解 PHY 的輸出後面部分。一顆CMOS 製程的晶片工作的時候產生的訊號電平總是大於0V 的(這取決於晶片的製程和設計需求),但是這樣的訊號送到100 米甚至更長的地方會有很大的直流分量的損失。而且如果外部網現直接和晶片相連的話,電磁感應(打雷)和靜電,很容易造成晶片的損壞。再就是裝置接地方法不同,電網環境不同會導致雙方的0V 電平不一致,這樣訊號從A傳到B,由於A 裝置的0V 電平和B 點的0V 電平不一樣,這樣會導致很大的電流從電勢高的裝置流向電勢低的裝置。我們如何解決這個問題呢?這時就出現了 Transformer(隔離變壓器)這個器件。它把PHY 送出來的差分訊號用差模耦合的線圈耦合濾波以增強訊號,並且通過電磁場的轉換耦合到連線網線的另外一端。這樣不但使網線和PHY 之間沒有物理上的連線而換傳遞了訊號,隔斷了訊號中的直流分量,還可以在不同0V 電平的裝置中傳送資料。隔離變壓器本身就是設計為耐 2KV~3KV 的電壓的。也起到了防雷感應(我個人認為這裡用防雷擊不合適)保護的作用。有些朋友的網路裝置在雷雨天氣時容易被燒壞,大都是PCB 設計不合理造成的,而且大都燒燬了裝置的介面,很少有晶片被燒燬的,就是隔離變壓器起到了保護作用。
5 關於傳輸介質
隔離變壓器本身是個被動元件,只是把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 功能,因此不能嚴格確定它們的傳出或接收的關係,要看雙方的具體的協商結果。
6 PHY 和MAC 之間如何進行溝通
下面繼續讓我們來關心一下 PHY 和MAC 之間是如何傳送資料和相互溝通的。通過IEEE 定義的標準的MII/GigaMII(Media Independed Interfade,介質獨立介面)介面連線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 的自己特有的一些功能,驅動需要做相應的修改。
7 網絡卡的供電
最後就是電源部分了。大多數網絡卡現在都使用 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 匯流排就可以實現喚醒功能。