能不能通俗講一講數據鏈路層到底有什麼用?


據不可靠消息,楊貴妃不僅愛吃荔枝,還愛吃海南島的香蕉,為了讓愛妃吃得開心,皇上命令大臣日夜兼程從海南島運香蕉到長安。

香蕉如何從海南島運到長安呢?

首先,要用船將香蕉運出島,運到廣東的碼頭。

然後從廣東碼頭,士兵快馬加鞭運香蕉向西北方向奔去。

跑著跑著,遇到了長江,必須換乘船隻運送,難道讓馬飛過去、或游過去?

到了長江北,繼續快馬向西北奔去…

跑著跑著,遇到了淮河,又要換乘輪船了,不換行不行,肯定不行!

到了淮河北,繼續快馬向目的地「長安」奔去…

最終,香蕉到達目的地,成了楊貴妃的美餐…

如果把士兵比喻成IP包,則馬、船隻就是數據鏈路層,為何IP包每一跳需要更換數據鏈路層,就如同士兵需要不斷變換交通工具一樣自然,形勢所迫啊!

問同學們一個問題:為何士兵要將香蕉向北運到廣東?而不是向南運到澳洲?同學們一定會哈哈笑,這還要問嗎?因為廣東更靠近楊貴妃!

下一個問題是:為何士兵不直接奔向長安?而是先到廣東碼頭?同學們一定會回答:碼頭是必經之地,碼頭是通向目的地長安一塊跳板,儘管不是最終的目的地,但士兵(IP包)卻需要經過它。

如果有飛機,士兵一定直飛西安,而不會再繞到廣東碼頭,在這裡,飛機同樣是數據鏈路層,因為它的目的是服務士兵(IP包),而士兵攜帶著最終的目的地:西安!


隔離了物理層和網路層,完成從比特到包的服務。

物理層只能提供比特流服務,鏈路層完成成幀適配

還有鏈路控制,例如在公用信道上實現資源分配共享(這個有點不準確,有些系統資源分配共享有專門的層)。

還有保證服務(例如harq)

還有單跳的加解密安全保護


10月12號清晨,你決定給你縣城的三大爺送點好茶葉過去。

你邊吃早飯,邊琢磨去縣城有3條路,該怎麼過去呢?

第一條路是縣級柏油公路,路是好走,就是比較繞,得花錢坐公共汽車。

第二條路是鄉鎮之間的普通水泥路,路也挺好的,就是人多,可以免費坐四叔的拖拉機。

第三條路是田野的土路,路很近,也沒什麼人,就是顛簸,兩條腿一炷香的功夫就可以到。

你考慮了一下,既然免費又可以坐車那說啥,就走第2條路,做四叔的拖拉機去吧。

硬體鏈路層就是指普通水泥路,四叔的拖拉機就是數據鏈路層。

說到底,數據鏈路層和硬體鏈路息息相關,什麼樣的路上就會有對應的交通工具。

是硬體鏈路上的交通工具。數據鏈路層以上的報文,得坐著數據鏈路層才能在路上跑。


數據鏈路層只認識mac地址, 解決的是數據在一個network裡面的傳送.

以最原始的Ethernet為例, 所有設備都掛在一條線上, 見下圖:

從維基百科盜的圖

設備之間的通信方式是拉高拉低這根線的電平. 由於大家都在一條線上,每次通信所有設備都能聽見,因此必須指明通信的目標(mac地址). 什麼是mac地址,地址是怎麼確定的,這就是數據鏈路層要解決的問題. 另外,這根線的材質, 具體是銅線還是鐵線, 甚至是無線, 是物理層決定的.

顯然,光有物理層和鏈路層是不夠的,因為我們不能指望所有設備都連在一條線上.因此,我們需要internet層. 這裡inter-net這個單詞可以顧名思義, net就是指的物理上連在一條線上的network, inter就是"之間"的意思. 這一層解決的就是這些networks之間的通信.

這裡一層一層的協議,就像寫程序一樣.我們先寫底層的函數,解決一些基礎的,簡單的問題.再寫高層的函數,解決更複雜的問題.

從這個角度看, 物理層解決了一個bit如何廣播和如何收取的問題,比如拉高和拉低一根銅線的電平.所以這一層提供的函數是:

void broadcast_one_bit(bit)
bit receive_one_bit()

收到了一堆數據,怎麼確定是發給我的呢.數據鏈路層定義了,收到的前面若干bit是地址,後面的就是數據,一個設備只應該收取地址與自己符合的數據.發送也要遵從這個基本法.這一層利用上一層的函數實現了:

void send_to(mac_addr, data_bits)
{
for(bit i : mac_addr)
{
broadcast_one_bit(i)
}
for(bit i : data_bits)
{
braodcast_one_bit(i)
}
}
data_bits receive()
{
while(bit = receive_bit())
{
msg.append(bit)
}
if(msg[0:addr_length] == my_addr)
{
return msg[addr_length:]
}
return []
}

類似的, internet層會利用上一層提供的函數,解決跨network傳輸的問題.

當然,上面的函數都是瞎寫的.


因為只懂乙太網,所以在乙太網的範疇內舉例。

一棟大樓可以看作是物理層,門牌號看作鏈路層,人名看作網路層。

要找人,先通過人名找到它的房間門牌號,這個過程就是網路層,包括路由、ARP(ARP算2.5層吧,從三層到二層的映射)等過程。

而門牌號以及,知道了門牌號後如何去找到他的房間,這就是鏈路層。

而物理層就是房間,樓梯,地板,等基礎設施。


各有責任

首先說明的是網路中的每層都是負責一定的責任的,比如說物理層是負責物理信號傳輸的,而這些信號是信息的載體。就像你想寫信給別人,紙及文字是傳遞信息必備的介質。

數據鏈路層

前面提到了物理層起著信道的作用。但是正如前面所言,僅有介質是不足的,因為如果收到信的人不懂文字,這也是起不到信息傳遞作用的。所以需要指定規則,按照規則便能夠解析理解介質上的信息。數據鏈路層,負責對於底層物理信號識別成某種信息。

網路層

按理來說,數據鏈路層已經能夠起到信息識別的作用了,為何還需要網路層呢?關鍵就在於數據鏈路層所能識別出的信息,能夠很好的被機器理解。但不能很好的被人所理解。(個人觀點)所以需要構建一層來方便人來進行處理。


物理層讓設備之間有傳送數據的能力,但是怎麼傳是數據鏈路層來定義的。


網路層的ip地址可以比喻成你住在哪,數據鏈路層的mac地址可以比喻成你是誰,數據鏈路層的校驗碼是用來檢驗數據是否完整。


車總說得很對,畢竟你最終要去的地方和你下一個要去的地方是不同的,所以你不能貪便宜一次只記一個地址。

再說了你最終去的地方只有當地人才對它熟,能找到最快去那的近路,但不可能地球上每一個人都對到了北京如何去三里屯很熟


鏈路層就像同城跑腿,你把貨交給他,告訴他地址,他直接送達。

鏈路層識別mac地址,鏈路聯通後,交換機學習各埠的mac地址,建立mac地址轉發表,然後鏈路層就開始工作了。


不是承上啟下的作用么? 數據鏈路層在交換機上,上面連的路由器 下面就是電腦嘞。 交換機就是負責把接收的數據發給連接它的電腦。 也可以控制連接它電腦的數據流量,速度 等亂七八糟的東西。。

我理解的就這樣。 靜等大佬的解答。


推薦閱讀:

如何理解計算機操作系統中的局部性原理?
按下電源鍵,電腦關機,是什麼原理?
強人工智慧技術如果突破瓶頸,每個人都可以製作怎麼辦?
如何設計一門計算機科學入門課?
你所讀的計算機科學方向,有哪些不錯的講義(Notes)?

TAG:計算機網路 | 計算機科學 | 網路協議 |