TCP/IP(一):数据链路层
背景
這一系列的文章主要是為一般的、非專業(yè)開發(fā)崗位(如移動(dòng)端)的工程師準(zhǔn)備,一方面可以對網(wǎng)絡(luò)的基本知識有基本的了解,另一方面不至于面試中被問到相關(guān)問題時(shí)束手無策。知識以 TCP/IP 協(xié)議簇為主,也會(huì)有應(yīng)用層和數(shù)據(jù)鏈路層的簡單介紹。
文章內(nèi)容不會(huì)很難,也不會(huì)過多討論各種算法,目標(biāo)是以最快的速度達(dá)到最深的理解。內(nèi)容肯定比直接百度搜索“TCP/IP協(xié)議”,然后隨便看一篇文章要豐富得多,但也不足以讓讀者憑此就能勝任網(wǎng)絡(luò)開發(fā)的工作。
誠然,面試以 TCP/UDP/HTTP 等協(xié)議為主,IP 協(xié)議都涉及甚少,更遑論數(shù)據(jù)鏈路層等。但我希望可以從原理上理解那些問題,而不是臨時(shí)抱佛腳,背了一些答案然后在面試后忘干凈。不要為面試而準(zhǔn)備面試,為了完善自己的知識體系而準(zhǔn)備。如果你覺得這正是你需要的,Let's Begin!
OSI七層模型和協(xié)議
在這一節(jié)中,我們不談這些層和協(xié)議的具體作用,目前只要知道 OSI 模型中,網(wǎng)絡(luò)被分為七層,由底層向高層依次是:物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層,會(huì)話層,表示層和應(yīng)用層。
協(xié)議是一個(gè) Big 很高,出現(xiàn)很頻繁的詞。其實(shí)它很好理解,它實(shí)際上是一種通信雙方共同遵守的規(guī)范。比如我需要把性別和年齡傳遞給另外一臺主機(jī),那么我可以定義一個(gè)"A 協(xié)議",協(xié)議規(guī)定數(shù)據(jù)的前 4 個(gè)字節(jié)表示性別,后四個(gè)字節(jié)表示年齡。這樣對方主機(jī)接收時(shí)就知道前 4 個(gè)字節(jié)是性別,而不會(huì)錯(cuò)把它當(dāng)成年齡來處理。
整個(gè)互聯(lián)網(wǎng)世界能夠運(yùn)行,完全得益于各個(gè)軟件、硬件廠商嚴(yán)格遵守現(xiàn)有的協(xié)議。以 IP 協(xié)議為例,你可以隨便修改它,然后自己弄出一個(gè) IP2 協(xié)議,只不過沒有人認(rèn)可、遵守這個(gè)協(xié)議,所以它毫無用武之地。
物理層
物理層處于 OSI 七層模型的最底端,它的主要任務(wù)是將比特流與電子信號進(jìn)行轉(zhuǎn)換。
在計(jì)算機(jī)的世界中,一切都由 0 和 1 組成。你看到的這篇文章,在通過網(wǎng)絡(luò)傳輸?shù)侥汶娔X的過程中,自然也是以 0 和 1 的形式存在。但是網(wǎng)絡(luò)傳輸?shù)慕橘|(zhì)(比如光纖,雙絞線,電波等)中顯然是不存在 0 和 1 的。比如在光線中,數(shù)據(jù)通過光的形式傳遞。0 和 1 以光的亮滅表示,其中的轉(zhuǎn)換由物理層完成。
如果沒有物理層,由 0 和 1 構(gòu)成的比特流就無法在物理介質(zhì)中傳播。
數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層處于 OSI 七層模型的第二層,它定義了通過通信介質(zhì)相互連接的設(shè)備之間,數(shù)據(jù)傳輸?shù)囊?guī)范。
在數(shù)據(jù)鏈路層中,數(shù)據(jù)不再以 0、1 序列的形式存在,它們被分割為一個(gè)一個(gè)的“幀”,然后再進(jìn)行傳輸。
數(shù)據(jù)鏈路層中有兩個(gè)重要的概念:MAC 地址和分組交換。
MAC地址
MAC 地址是被燒錄到網(wǎng)卡 ROM 中的一串?dāng)?shù)字,長度為 48 比特,它在世界范圍內(nèi)唯一(不考慮虛擬機(jī)自定義 MAC 地址)。由于 MAC 地址的唯一性,它可以被用來區(qū)分不同的節(jié)點(diǎn),一旦指定了 MAC 地址,就不可能出現(xiàn)不知道往哪個(gè)設(shè)備傳輸數(shù)據(jù)的情況。
分組交換
分組交換是指將較大的數(shù)據(jù)分割為若干個(gè)較小的數(shù)據(jù),然后依次發(fā)送。使用分組交換的原因是不同的數(shù)據(jù)鏈路有各自的最大傳輸單元(MTU: Maximum Transmission Unit)。不同的數(shù)據(jù)鏈路就好比不同的運(yùn)輸渠道,一輛卡車(對應(yīng)通信介質(zhì))的載重量為 5 噸。那么通過卡車運(yùn)送 20 噸的貨物就需要把這些貨物分成四部分,每份重 5 噸。如果運(yùn)輸機(jī)的載重量是 30 噸,那么這些貨物不需要分割,直接一架運(yùn)輸機(jī)就可以拉走。
以以太網(wǎng)(一種數(shù)據(jù)鏈路)為例,它的MTU是 1500 字節(jié),也就是通過以太網(wǎng)傳輸?shù)臄?shù)據(jù),必須分割為若干幀,每個(gè)幀的數(shù)據(jù)長度不超過 1500 字節(jié)。如果上層傳來的數(shù)據(jù)超過這個(gè)長度,數(shù)據(jù)鏈路層需要分割后再發(fā)送。
以太網(wǎng)幀
我們用以太網(wǎng)舉例,介紹一下以太網(wǎng)幀的格式。
以太網(wǎng)幀的開頭是“前導(dǎo)碼(Preamble)”,長度為 8 字節(jié),這一段沒什么用,重點(diǎn)在于以太網(wǎng)幀的本體。
本體由首部,數(shù)據(jù)和 FCS 三部分組成:
自學(xué)過程
類型部分存儲(chǔ)了上層協(xié)議的編號,比如上層是 IP 協(xié)議,則編號為 0800。
FCS 表示幀校驗(yàn)序列(Frame Check Sequence),用于判斷幀是否在傳輸過程中有損壞(比如電子噪聲干擾)。FCS 保存著發(fā)送幀除以某個(gè)多項(xiàng)式的余數(shù),接收到的幀也做相同計(jì)算,如果得到的值與 FCS 相同則表示沒有出錯(cuò)。
交換機(jī)
交換機(jī)是一種在數(shù)據(jù)鏈路層工作的網(wǎng)絡(luò)設(shè)備,它有多個(gè)端口,可以連接不同的設(shè)備。交換機(jī)根據(jù)每個(gè)幀中的目標(biāo) MAC 地址決定向哪個(gè)端口發(fā)送數(shù)據(jù),此時(shí)它需要參考“轉(zhuǎn)發(fā)表”
轉(zhuǎn)發(fā)表并非手動(dòng)設(shè)置,而是交換機(jī)自動(dòng)學(xué)習(xí)得到的。當(dāng)某個(gè)設(shè)備向交換機(jī)發(fā)送幀時(shí),交換機(jī)將幀的源 MAC 地址和接口對應(yīng)起來,作為一條記錄添加到轉(zhuǎn)發(fā)表中。
下圖描述了交換機(jī)自學(xué)過程的原理
自學(xué)過程
關(guān)于數(shù)據(jù)鏈路層,最重要的一點(diǎn)還是它的定義:“通過通信介質(zhì)相互連接的設(shè)備之間,數(shù)據(jù)傳輸?shù)囊?guī)范”。這說明數(shù)據(jù)鏈路層的協(xié)議適用于處于同一種數(shù)據(jù)鏈路兩端的節(jié)點(diǎn)。如果不能理解這一點(diǎn),就無法理解網(wǎng)絡(luò)層和 IP 協(xié)議。
數(shù)據(jù)鏈路層的意義在于,如果沒有數(shù)據(jù)鏈路層,數(shù)據(jù)只能以流的形式存在與通信介質(zhì)中,不知道該發(fā)送往哪里,過長的數(shù)據(jù)流可能無法在通信介質(zhì)中傳輸。
文/bestswifter(簡書作者)
原文鏈接:http://www.jianshu.com/p/f16d7f3c8d5f
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標(biāo)注“簡書作者”。
總結(jié)
以上是生活随笔為你收集整理的TCP/IP(一):数据链路层的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 够逼格的注释总结
- 下一篇: TCP/IP(二):IP协议