能不能通俗講一講數據鏈路層到底有什麼用?
據不可靠消息,楊貴妃不僅愛吃荔枝,還愛吃海南島的香蕉,為了讓愛妃吃得開心,皇上命令大臣日夜兼程從海南島運香蕉到長安。
香蕉如何從海南島運到長安呢?
首先,要用船將香蕉運出島,運到廣東的碼頭。
然後從廣東碼頭,士兵快馬加鞭運香蕉向西北方向奔去。
跑著跑著,遇到了長江,必須換乘船隻運送,難道讓馬飛過去、或游過去?
到了長江北,繼續快馬向西北奔去…
跑著跑著,遇到了淮河,又要換乘輪船了,不換行不行,肯定不行!
到了淮河北,繼續快馬向目的地「長安」奔去…
最終,香蕉到達目的地,成了楊貴妃的美餐…
如果把士兵比喻成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)?