從網卡發送數據再談TCP/IP協議—網絡傳輸速度計算-網卡構造

在《在深談TCP/IP三步握手&四步揮手原理及衍生問題—長文解剖IP》裏面提到html

  • 單個TCP包每次打包1448字節的數據進行發送(以太網Ethernet最大的數據幀是1518字節,以太網幀的幀頭14字節和幀尾CRC校驗4字節 算法

  • seq編碼,在RFC793中,建議ISN和一個假的時鐘綁在一塊兒,這個時鐘會在每4微秒對ISN作加一操做,直到超過2^32緩存

據此推算,貌似單一線路,網絡傳輸速度也就1.5*(1/4*10^6) = 375M/bs安全

對此的論據是:segments packets frame 是一對一的關係,層層套,一個個依次發送,如圖所示網絡

WechatIMG11.png

20160529140813320.png

如此,豈不是對於千兆網卡,千G、千T,以及5G網絡 是 瞎子點燈?socket

注:tcp

  • 在鏈路層,由以太網的物理特性決定了數據幀的長度爲(46+18)-(1500+18),其中的18是數據幀的頭和尾,也就是說數據幀的內容最大爲1500(不包括幀頭和幀尾),即MTU(Maximum Transmission Unit)爲1500;  oop

  • 在網絡層,由於IP包的首部要佔用20字節,因此這的MTU爲1500-20=1480; 性能

  • 在傳輸層,對於UDP包的首部要佔用8字節,因此這的MTU爲1480-8=1472;   大數據

因此,在應用層,你的Data最大長度爲1472。當咱們的UDP包中的數據多於MTU(1472)時,發送方的IP層須要分片fragmentation進行傳輸,而在接收方IP層則須要進行數據報重組,因爲UDP是不可靠的傳輸協議,若是分片丟失致使重組失敗,將致使UDP數據包被丟棄。 

千兆網卡理論最大傳輸速度是(1024Mbit/s=128MByte/s),注意b與B差了8倍。  

這個迷惑一直困擾着我。百思不得騎姐

而後開始

從網卡發送接收數據入手,對TCP/IP再開墾一番

網卡如何發送數據包:

IP報文能夠看做一個包。

Linux網卡驅動程序,將IP包添加14字節的MAC包頭,構成MAC包。

MAC包中含有發送端和接收端的MAC地址信息。既然是驅動程序建立的MAC包頭信息,固然能夠隨便輸入地址信息的,主機假裝就是這麼實現的。

驅動程序將MAC包拷貝到網卡芯片內部的緩存區,就算完事了。有網卡芯片接手處理。網卡芯片對MAC包,再次封裝成物理幀,添加頭部同步信息和CRC校驗。而後丟到網線上,就完成一個IP報文的發送。全部掛接到本網線的網卡均可以看到該物理幀。

網卡接收數據包

正常狀況:

  1. 網線上的物理幀首先被網卡芯片獲取,網卡芯片會檢查物理幀的CRC,保證完整性。

  2. 其次,網卡芯片將物理幀頭去掉,獲得MAC包。

  3. 網卡芯片檢查MAC包內的目的MAC地址信息,和本網卡的MAC地址是否一致?不一致,拋棄。

  4. 網卡芯片將MAC幀拷貝到網卡內部的緩衝區,觸發中斷。

  5. 驅動程序經過中斷,將MAC包拷貝到系統中,構建sk_buff。告訴上層。

  6. 上層去掉MAC包頭,獲得須要的IP包。

 過程當中,網卡芯片對物理幀進行了MAC匹配過濾。這樣作能夠減少系統負荷。

試想一下,若網卡芯片對全部的MAC幀不加判斷的直接提供給驅動,讓CPU判決會是什麼樣子呢?

當總線上數據繁忙,CPU將浪費大部分時間去判斷該MAC包是不是本身須要的,效率低下。

 

不正常模式(混聽):

  1. 網線上的物理幀首先被網卡芯片獲取,網卡芯片會檢查物理幀的CRC,保證完整性。

  2. 其次,網卡芯片將物理幀頭去掉,獲得MAC包。

  3. 網卡芯片發現本身當前被配置爲混聽模式,就不對MAC包過濾。

  4. 網卡芯片將MAC幀拷貝到網卡內部的緩衝區,觸發中斷。

  5. 驅動程序經過中斷,將MAC包拷貝到系統中,構建sk_buff。告訴上層。

  6. 上層去掉MAC包頭,獲得須要的IP包。

  7. 顯然,這裏的IP包並必定是發給本身的。

 

驅動的問題

網卡到底能不能接收其餘MAC包,徹底取決於網卡芯片中RCR(receive control register)配置。

驅動程序是決定網卡可否工做與混聽模式的橋樑。

混聽模式會加劇CPU的負荷,並且也是不符合標準應用的!

 

全部的車輛都要從加油站穿過,(有些都不加油),加油站工做人員的任務量就可想而知。

固然也有例外,有些程序不經過驅動,也能夠直接訪問網卡芯片RCR達到設置混聽模式。

所謂  條條大路通香港,就是這個道理:)沒有絕對的

 

本機和本機Socket通訊會走網卡嗎

先說結論:不走網卡,不走物理設備,可是走虛擬設備,loopback device環回(本地迴環).

本機的報文的路徑是這樣的:應用層-> socket接口 -> 傳輸層(tcp/udp報文) -> 網絡層 -> back to 傳輸層 -> backto socket接口 -.> 傳回應用程序在網絡層,會在路由表查詢路由,路由表(軟件路由,真正的轉發須要依靠硬件路由,這裏路由表包括快速轉發表和FIB表)初始化時會保存主機路由(host route,or 環迴路由), 查詢(先匹配mask,再匹配ip,localhost路由在路由表最頂端,最優先查到)後發現不用轉發就不用走中斷,不用發送給連接層了,不用發送給網絡設備(網卡)。像網卡發送接收報文同樣,走相同的接收流程,只不過net device是loopback device,最後發送迴應用程序。這一套流程固然和轉發和接收外網報文同樣,都要通過內核協議棧的處理,不一樣的是本機地址不用掛net device.

網卡,交換機,網橋,路由器,網關工做在OSI模型哪一層

  • 網橋:工做在數據鏈路層,在不一樣或相同類型的LAN之間存儲並轉發數據幀,必要時進行鏈路層上的協議轉換。可鏈接兩個或多個網絡,在其中傳送信息包。

  • 交換機:工做在數據鏈路層,原理等同於多端口網橋。做用是鏈接數個相同網段的不一樣主機,減小網內衝突,隔離衝突域。利用存儲轉發和過濾技術來從物理上分割網段

  • 路由器:工做在網絡層,在不一樣的網絡間存儲並轉發分組。可在異種網絡之間(即不一樣類型的局域網互連,局域網與廣域網,廣域網與廣域網)傳輸數據並進行路徑選擇,使用專門的軟件協議從邏輯上對整個網絡進行劃分。

  • 網關:對高層協議(包括傳輸層及更高層次)進行轉換的網間鏈接器。容許使用不兼容的協議,好比SPX/IPX和TCP/IP的系統和網絡互連。由於協議轉換是網關最重要的功能,因此答案是工做在傳輸層及以上層次。

  • 網卡:在物理層上網卡主要是完成物理接口的鏈接,電信號的傳送以及將數據分解爲適當大小的數據包以後向網絡上發送的功能. 數據鏈路層功能包括鏈路創建和拆除,幀定界同步順序差錯控制這些。大多認爲主要工做在物理層。

網卡核心電器元件

網卡的組成:

  • 主芯片:網卡的主控制芯片是網卡的核心元件,一塊網卡性能的好壞和功能的強弱多寡,主要就是看這塊芯片的質量

  • BOOTROM槽:BOOTROM 插座也就是常說的無盤啓動ROM 接口,其是用來經過遠程啓動服務構造無盤工做站的

  • 數據泵:做用一是傳輸數據;二是隔離網線鏈接的不一樣網絡設備間的不一樣電平,還能對設備起到必定的防雷保護做用

  • 晶振即石英振盪器:提供基準頻率

 MAC 控制器&PHY

以太網卡中數據鏈路層的芯片通常簡稱之爲 MAC 控制器,物理層的芯片咱們簡稱之爲PHY。即便把它們作到同一塊芯片,可是MAC 和PHY 的機制仍是單獨存在的,只是外觀的表現形式是一顆單芯片。

 數據鏈路層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 芯片是實現物理層的重要功能器件之一,實現了前面物理層的全部的子層的功能。

物理層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 這樣點到點鏈接到局端設備的接入方式沒什麼意義。並且"搶線"也只是相對而言的,不會有質的變化。

關於網絡間的衝突

如今交換機的普及使得交換網絡的普及,使得衝突域網絡少了不少,極大地提升了網絡的帶寬。可是若是用HUB,或者共享帶寬接入Internet 的時候仍是屬於衝突域網絡,有衝突碰撞的。交換機和HUB 最大的區別就是:一個是構建點到點網絡的局域網交換設備,一個是構建衝突域網絡的局域網互連設備。咱們的 PHY 還提供了和對端設備鏈接的重要功能並經過LED 燈顯示出本身目前的鏈接的狀態和工做狀態讓咱們知道。當咱們給網卡接入網線的時候,PHY 不斷髮出的脈衝信號檢測到對端有設備,它們經過標準的"語言"交流,互相協商並卻定鏈接速度、雙工模式、是否採用流控等。一般狀況下,協商的結果是兩個設備中能同時支持的最大速度和最好的雙工模式。這個技術被稱爲Auto Negotiation 或者NWAY,它們是一個意思--自動協商。

PHY 的輸出部分

如今來了解 PHY 的輸出後面部分。一顆CMOS 製程的芯片工做的時候產生的信號電平老是大於0V 的(這取決於芯片的製程和設計需求),可是這樣的信號送到100 米甚至更長的地方會有很大的直流份量的損失。並且若是外部網現直接和芯片相連的話,電磁感應(打雷)和靜電,很容易形成芯片的損壞。再就是設備接地方法不一樣,電網環境不一樣會致使雙方的0V 電平不一致,這樣信號從A傳到B,因爲A 設備的0V 電平和B 點的0V 電平不同,這樣會致使很大的電流從電勢高的設備流向電勢低的設備。咱們如何解決這個問題呢?這時就出現了 Transformer(隔離變壓器)這個器件。它把PHY 送出來的差分信號用差模耦合的線圈耦合濾波以加強信號,而且經過電磁場的轉換耦合到鏈接網線的另一端。這樣不但使網線和PHY 之間沒有物理上的鏈接而換傳遞了信號,隔斷了信號中的直流份量,還能夠在不一樣0V 電平的設備中傳送數據。隔離變壓器自己就是設計爲耐 2KV~3KV 的電壓的。也起到了防雷感應(我我的認爲這裏用防雷擊不合適)保護的做用。有些朋友的網絡設備在雷雨天氣時容易被燒壞,大都是PCB 設計不合理形成的,並且大都燒燬了設備的接口,不多有芯片被燒燬的,就是隔離變壓器起到了保護做用。

關於傳輸介質

隔離變壓器自己是個被動元件,只是把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 功能,所以不能嚴格肯定它們的傳出或接收的關係,要看雙方的具體的協商結果。

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 的本身特有的一些功能,驅動須要作相應的修改。

網卡的供電

最後就是電源部分了。大多數網卡如今都使用 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 總線就能夠實現喚醒功能。

電腦之間經過網線傳送的信號是交流高頻信號,電壓不超過3伏,帶不動任何負載。

須要帶負載的POE電壓是48V。RJ45的接口 最大持續工做電壓是8V

電話經過網線傳送的信號直流48—50V,摘機狀態下是直流6-12V,振鈴信號是交流90V 100m以太網的數據發送和接收時傳送的信號是交流高頻信號,電壓不超過3伏。

電話線上的電壓平時是直流48V,並且是高內阻的電源,手碰上絕對安全。但若是動手時正好有電話打入,此時振鈴電壓是75V交流電壓,會有很強的麻手感受,但沒有危險。爲了保險,能夠在動手時將電話機外線臨時短路,電壓爲0,也不會再有電話能打入。裝好之後將短路線拆除。

 

最後附上經典:

3985368b56e10aa1be23e9b8fe36765e.jpg

英文版地址:http://pcvr.nl/tcpip/

 

參考文章:

TCP、UDP數據包大小的限制

Maximum Segment Size,TCP一次傳輸發送的最大數據段長度

網卡,交換機,網橋,路由器,網關工做在OSI模型哪一層

網卡工做原理詳解

本文來自:從網卡發送數據再談TCP/IP協議-網絡傳輸速度計算-網卡構造 - Network - 周陸軍的我的網站 

————總結性長文,非原創,若有不妥之處,請告知,多謝

相關文章
相關標籤/搜索