TCP/IP 網絡基礎(一)數據鏈路層

前言

沒錯,想弄懂TCP/IP,把Steven Richard那幾本《TCP/IP詳解》、《Unix網絡編程》看完就行了。只是一來,做爲web開發人員,只是想弄清楚網絡層面的基礎原理,並不會有多少機會進行Socket編程;二來,愈來愈多的工做和學習經驗告訴我,看書未必是最有效的學習方式。面向問題學習,找到合適的教程、文章,每每就夠用了。html

所以,我在學習TCP/IP的過程當中搜索了一些更簡練的書。《圖解TCP/IP》這本書就是極好的。另外還有一本《TCP/IP高效編程》,篇幅精煉,偏向Socket編程。我將再結合一些網上資料理解書中沒有講解的概念,邊學邊寫這個系列。web

此外,阮一峯老師的兩篇入門文章也是個很是好的引子。順序清晰,不糾結細節,值得一看。
互聯網協議入門(一)
互聯網協議入門(二)算法

以下圖,這是TCP/IP的一個精簡的分層。往下,你最多會想知道IP數據是怎麼到達物理機器的,而不會有興趣瞭解物理導線內發生了什麼;往上則是HTTP等一堆應用層協議的事情。所以本系列將會大概分爲三篇,講解你們最關心的問題:數據鏈路如何工做、IP的尋址和路由,以及TCP協議。
圖片描述編程

別把OSI參考模型太當回事。它是個失敗的協議規範,所以頂多拿來「參考」下。那些層次也並非它首先提出的。所以最合適的作法也許是忘掉它。網絡

以太網

以太網(Ethernet)是廣泛應用的局域網技術規範,能夠認爲和IEEE802.3是一回事。在各類教科書中,會有提到令牌環網、串行鏈路等其餘局域網技術,可是放心,那些早就被以太網淘汰了。學習

以太網規定,全部連入網絡的設備,都必須具備「網卡」接口。而後數據包是從一塊網卡,傳輸到另外一塊網卡的。網卡的地址,就是數據包的發送地址和接收地址,叫作MAC地址,也叫物理地址,這是最底層的地址。每塊網卡出廠的時候,都有一個全世界獨一無二的MAC地址,長度是48個二進制位,一般用12個十六進制數表示。有了這個地址,咱們能夠定位網卡和數據包的路徑了。ui

以太網的工做原理

在以太網中,經過廣播方式通訊。發送方將數據包(包含目的MAC地址)向本網絡內全部計算機發送,讓每臺計算機本身判斷,是否爲接收方。
最簡單的以太網結構以下圖,全部的電腦都連在一根網線(同軸電纜)上:
localspa

1號計算機想向2號機算機發送一個數據包,它只能往網線上發,因此同一個子網絡的全部計算機都會收到這個包。它們讀取這個包的首部,找到接受方的MAC地址,同自身的MAC地址相比較,若是二者相同,就接收這個包,做進一步處理,不然就丟棄。.net

衝突、集線器和交換機

很顯然全部主機都連到一塊兒,你們又發又收就會產生衝突,而後數據就亂套了,沒法使用。連到一塊兒的一羣主機就叫衝突域。
集線器就是啥都不幹,把插到它身上的主機都連起來。
交換機則聰明一些,它記住哪些MAC地址應該被髮到哪一個端口,連到別的端口的主機就不會收到這些信號,從而能夠隔絕衝突。(把衝突劃小。)設計

經過集線器和交換機鏈接起來的主機仍是在同一個局域網內,由於它們能夠用MAC地址通訊。

共享介質和非共享介質

前面講的結構就是共享介質數據鏈路,即全部主機都連到一根線上。實際上這種方式早就過期了。回想一下咱們在家裏、學校或辦公室的網絡鏈接,都是把主機經過雙絞線插到交換機上的獨立端口上(經過WiFi鏈接時能夠想象成與這種狀況等價)。由交換機決定一個請求包發送給哪一個端口,而不會向全部端口發送。這樣就避免了衝突,所以一些資料上講的衝突檢測和避免的算法咱們基本上不用去考慮了。

另外還有個概念是全雙工半雙工。半雙工是指同一時刻只能發送或者接收,前面提到的同軸電纜這種共享介質結構就有這種特色。而使用雙絞線這種非共享介質的結構,就能實現全雙工——同時接收和發送。

至於同軸線纜和雙絞線,前者就是之前的有線電視那種線,後者就是網線(使用傳說中的RJ-45接口)。

分組交換與數據幀

分組交換是個重要的發明。在它以前,只有一種「電路交換」。即電話局有個接線員,你打電話過去說請給我轉接老王,而後接線員說請稍等,就把你的電話線和老王的電話線接到一塊兒,建立一個真正的物理線路。
電路交換天然是至關的落後,咱們只看過民國電影中的高官和地下黨使用。它最大的問題在於不能共享線路。假如你從北京打到上海,那北京到上海的這條電話線就變成了你的專線,別人不能同時通話。

分組交換則像寄信和寄快遞——把信息寫上收件人地址交給郵局或快遞公司,若是東西不少就分紅多件快遞。往細一點說,路由器等設施就至關於快遞的中轉站。這種方式就能夠共享物理線路。

物理線路只認識 0/1。數據鏈路層則加入了第一層封裝:對上層數據包進行拆分和打包,在所發送的數據包上附加上目標地址,本地地址,以及一些用於糾錯的字節等。對來自物理層的一個個比特流組裝成數據幀。
幀的結構包括首部和數據,首部包含發送者、接收者等數據。咱們見過的幾乎全部通訊協議都是這麼設計的~
貼上下圖,以供一窺:
frame

數據鏈路層的限制

理論上說,全世界的網絡能夠只在數據鏈路層上工做,不須要更高層的協議——由於咱們只要知道對方的MAC地址,就能夠直接通訊了。而實際上,MAC地址雖然全球惟一,但並無什麼規律,想在全世界的電腦中找到一個特定的MAC地址,想一想就知道太難了,就是大海撈針。
實際上,因特網是由無數個「網絡」組成的。網絡的出口經過網關(路由器)互相鏈接。而MAC地址不能夠跨越網關。在同一個網絡內部,知道對方的MAC地址就能夠暢行無阻地通訊,但在網絡間就要使用IP協議通訊了。
internet
至於互聯網爲啥是這樣的,能夠說既有歷史緣由,也是科學合理的——在因特網出現以前,就只有各個組織獨立搭建的網絡。甚至網絡內使用了各不相同的技術。經過網關將它們連起來,在更高一層協議上通訊,就能夠打通各個網絡。

最後,關於一些細節,能夠參考這個系列:wenqian's blog之網絡.

相關文章
相關標籤/搜索