計算機網絡漫談之數據鏈路層

讓我們從整個協議最底層開始,先來看看數據鏈路層主要都做了哪些事:

這裏寫圖片描述

首先上面兩臺電腦需要通信,先將它們物理連接起來,然後就可以傳送高低電位了,高電位表示1,低電位表示0。但是單純的0和1沒有任何的意義,我們必須人爲的規定解讀方式,比如:多少個0和1作爲一組信號?每個信號位有什麼含義?……

還記得不?我們前面說過互聯網早期的時候好多公司都有自己的網絡協議。但是最後逐漸被“以太網”佔據了主導地位,以太網規定,一組電信號構成一個數據包,叫做“幀”。每一幀分爲兩個部分:標頭(Head)和數據(Data)。

這裏寫圖片描述

“標頭”包含數據包的一些說明項,比如發送者(源物理地址)、接受者(目的物理地址)、數據類型、CRC校驗碼等等。”數據”則是數據包的具體內容。具體的幀結構如下圖所示:

這裏寫圖片描述

“標頭”的長度,固定爲18字節(6+6+2+4=18)。”數據”的長度,最短爲46字節,最長爲1500字節(MTU Maximum Transmission Unit 最大傳輸單元)。因此,整個”幀”最短爲64字節,最長爲1518字節。如果數據很長,就必須分割成多個幀進行發送。你可以使用ifconfig命令來查看自己網卡的MTU,下圖是我的網卡情況。

這裏寫圖片描述

從上面“幀”的結構中可以看到,“標頭”包含了“源物理地址”和“目的物理地址”,其實這就是我們常說的MAC地址。以太網規定,連入網絡的所有設備,都必須具有”網卡”接口。數據包必須是從一塊網卡,傳送到另一塊網卡。網卡的地址,就是數據包的發送地址和接收地址,這叫做MAC地址。

這裏寫圖片描述

每塊網卡出廠的時候,都有一個全世界獨一無二的MAC地址,長度是48個二進制位,通常用12個十六進制數表示。前6個十六進制數是廠商編號,後6個是該廠商的網卡流水號。有了MAC地址,就可以定位網卡和數據包的路徑了。(同樣,ifconfig命令就可以查看網卡的MAC地址,上張截圖中有我的網卡MAC地址,你找找看)

這裏寫圖片描述

當然,現在有了地址也只是第一步,可是我的網卡怎麼會知道你網卡的MAC地址呢?
答:有一種ARP協議,可以解決這個問題。這個留到後面再說,這裏只需要知道,以太網數據包必須知道接收方的MAC地址,然後才能發送。
其次,就算有了MAC地址,系統怎樣才能把數據包準確送到接收方?
答:以太網採用了一種很”原始”的方式,它不是把數據包準確送到接收方,而是向本網絡內所有計算機發送,讓每臺計算機自己判斷,是否爲接收方。

這裏寫圖片描述

上圖中,1號計算機向2號計算機發送一個數據包,同一個子網絡的3號、4號、5號計算機都會收到這個包。它們讀取這個包的”標頭”,找到接收方的MAC地址,然後與自身的MAC地址相比較,如果兩者相同,就接受這個包,做進一步處理,否則就丟棄這個包。這種發送方式就叫做”廣播”(broadcasting)。

現在,我們假設全球的電腦都是用網線直接相連的,那有了數據包的定義(幀)、網卡的MAC地址、廣播的發送方式。只要知道目的MAC地址我們就可以實現給世界各地任何電腦發送數據了。比如A可以直接廣播B網卡的MAC地址大膽表白,發送“我愛B”,然後全球所有的網卡都會收到這條消息,但是隻有B的網卡纔會接受這條消息,也就是“我只愛B”,是不是很浪漫,沒毛病。

好,回過頭來看看,我們現在已經從兩臺網線直接相連的電腦發展到全球電腦都能通信了,真棒!那請你思考下廣播的這種方式到底合適嗎?請將自己的想法評論在下面。

總鏈:計算機網絡漫談系列文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章