TCP/IP協議之鏈路層

TCP/IP總共有4層,分別是鏈路層,網絡層,傳輸層和應用層。

每層之間都有很好的隔離性,就是說每一層對上層和下層來說都是透明的。這使得各層可以專心處理自己的數據,不用擔心其他層的數據處理,只關注同層的通信方式。這種分層思想是具有劃時代意義的,這使得現在的INTERNET無所不在,使得如今的TCP/IP協議包容性如此之強。讓我們再也不用管什麼令牌網,以太網,點對點接口還是各種奇葩網,我們的網絡程序一樣運行,不受任何底層傳輸限制。這有點像我們寫程序時候的模塊化,函數化編程方式,可擴展性和可替代性大大增強。

今天我們來看看鏈路層:

我們常說的以太網接口(網卡)就是屬於這一層的,當然鏈路層不止包括以太網接口,還包括SLIP接口,PPP接口等。現在大多數網絡運營商都用pppoe進行用戶認證接入網絡,這個pppoe其實是ppp on ethenet,是在以太網接口上實現ppp協議。我們的電腦可能有多個網絡接口,下面用我的來分析一下:





















看到我的電腦目前有三個接口,一個是eth0,這是以太網接口,一個是lo這是環回接口,一個是wlan0接口,一般來說每個接口對應一個ip地址,我現在用wlan0上網,可以看到目前的ip地址是192.168.1.105,這個不是公網ip,這個是私網ip,對應的鏈路層地址爲48bit的00:26:82:a5:82:b8。環回接口比較特殊,這是專門用來和本機自己通信的接口,不對外傳輸數據報。
































一般TCP/IP協議是由內核實現的,我們可以看到內核處理IP數據報的流程,環回地址做爲一個特殊的存在,ip數據報可以不經過以太網驅動。

從這個圖中我們可以很好的理解下面兩個ip報的流動過程不一樣:

ping  127.0.0.1

ping 192.168.1.105

爲什麼不一樣呢?

第一個命令是將ip數據報直接放入環回接口中,由環回驅動將報文放入ip數據報隊列中。

而第二個命令是將ip數據報傳入以太網驅動程序中,由以太網驅動程序判斷該地址是本機地址,再將報文轉發給環回接口,放入ip隊列中。

結果都是一樣的,不管哪個命令,數據報都不會發送到外部以太網中。

在鏈路層中,每個數據報有大小的限制,一般關注最大值,小的化可以自動填0,最大值就導致了MTU的出現。這也限制了上層ip數據報的大小,以太網的MTU爲1500。















也就是說最大的ip數據報長度不能超過1500個字節。

同時我們也可以在鏈路層中,還可以傳送別的數據報,如arp數據報,和rarp數據報。

在這裏讓我想起上幾天我網上看的一個貼子,有人問爲什麼還需要mac地址啊,系統接受到數據報以後判斷一下是不是自己的ip不就行了。。。。現在我想這個圖很明白的告訴了我們答案,且不考慮其他原因,鏈路層可不止傳送單一的ip數據報,還有很多無ip的報文,如果沒有了mac地址,那麼其他鏈路層協議就沒辦法實現了。

可以看看自己的接口MTU大小限制:






eth0與wlan0都是1500,只有lo爲65536。


發佈了65 篇原創文章 · 獲贊 75 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章