標籤:
此篇文章對網上現有資料進行了整理和補充,提取出有用的部分,進行存檔學習。
一,認識網卡 網卡(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 物理層PHYPHY 在發送資料的時候,收到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 匯流排就可以實現喚醒功能。
網卡工作原理詳解