網卡工做原理詳解【轉】

 

轉自:https://blog.csdn.net/tao546377318/article/details/51602298html

 

此篇文章對網上現有資料進行了整理和補充,提取出有用的部分,進行存檔學習。算法

一,認識網卡
       網卡(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等。
 
數據鏈路層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 的網絡中一、2 是傳送數據的,三、6 是接收數據的。一、2 之間
是一對差分信號,也就是說它們的波形同樣,可是相位相差180 度,同一時刻的電壓幅度互爲正負。這樣的信號能夠傳遞的更遠,抗干擾能力強。一樣的,三、6 也同樣是差分信號。網線中的 8 根線,每兩根扭在一塊兒成爲一對。咱們製做網線的時候,必定要注意要讓一、2 在其中的一對,三、6 在一對。不然長距離狀況下使用這根網線的時候會致使沒法鏈接或鏈接很不穩定。如今新的 PHY 支持AUTO MDI-X 功能(也須要Transformer 支持)。它能夠實現RJ-45接口的一、2 上的傳送信號線和三、6 上的接收信號線的功能自動互相交換。有的PHY 甚至支持一對線中的正信號和負信號的功能自動交換。這樣咱們就沒必要爲了到底鏈接某個設備須要使用直通網線仍是交叉網線而費心了。這項技術已經被普遍的應用在交換機和SOHO 路由器上。在 1000Basd-T 網絡中,其中最廣泛的一種傳輸方式是使用網線中全部的4 對雙絞線,其中增長了四、5 和七、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 總線就能夠實現喚醒功能。
相關文章
相關標籤/搜索