鏈路層:數(shù)據(jù)傳輸規(guī)則

[第一節(jié): 鏈路層的意義]

1.1 什么是鏈路

簡介

??在講解鏈路層之前,首先讓我們清楚一下什么是鏈路潜慎,來張圖:

數(shù)據(jù)鏈路.png

  鏈路(Link):是指從一個(gè)結(jié)點(diǎn)相鄰結(jié)點(diǎn)的一段物理線路(有線或無線),而中間沒有任何其他的交換結(jié)點(diǎn)蓖康。在進(jìn)行數(shù)據(jù)通信時(shí)铐炫,兩臺(tái)計(jì)算機(jī)之間的通信路徑往往要經(jīng)過許多段這樣的鏈路∷夂福可見鏈路只是一條路徑的組成部分倒信。
  數(shù)據(jù)鏈路(Data Link):這是因?yàn)楫?dāng)需要在一條線路上傳送數(shù)據(jù)時(shí),除了必須有一條物理線路外泳梆,還必須有一些必要的通信協(xié)議來控制這些數(shù)據(jù)的傳輸鳖悠。若把實(shí)現(xiàn)這些協(xié)議的硬件和軟件加到鏈路上,就構(gòu)成了數(shù)據(jù)鏈路∮琶睿現(xiàn)在最常用的方法是使用網(wǎng)絡(luò)適配器(既有硬件乘综,也包括軟件)來實(shí)現(xiàn)這些協(xié)議。一般的適配器都包括

??深入解讀:鏈路其實(shí)是物理層的信息傳輸?shù)脑O(shè)備套硼,可以理解為信道卡辰。而數(shù)據(jù)鏈路只是一個(gè)抽象的概念,可以理解為數(shù)據(jù)在傳輸過程中因?yàn)橥ㄐ乓?guī)則而走的某一條路徑熟菲。我們知道網(wǎng)絡(luò)都是拓?fù)浣Y(jié)構(gòu)的看政,可以說條條網(wǎng)線通目的地,但是到底走哪條網(wǎng)線抄罕?是走最近的允蚣?還是走指定的?在鏈路層中會(huì)有對應(yīng)的協(xié)議來控制呆贿。
  我們在讀下文的時(shí)候嚷兔,要有一個(gè)認(rèn)知前提:鏈路層并沒有物理鏈路,而是抽象上的鏈路做入,是建立在鏈路之上的冒晰,具體的實(shí)現(xiàn)其實(shí)是在數(shù)據(jù)的傳輸上對應(yīng)的物理設(shè)備,例如交換機(jī)竟块;所謂鏈路層只是在網(wǎng)線的物理鏈路的兩端通過達(dá)成的共同協(xié)議來解讀傳遞過來的信息壶运,然后將信息發(fā)送到指定的下一條鏈路中。如果鏈路層的設(shè)備不能解讀傳送過來的信息浪秘,那么就丟掉蒋情。


1.2 為什么需要鏈路層

白話

??在講解鏈路層之前埠况,我們先來回顧一下物理層,物理層存在的意義是為了傳輸信號(hào)棵癣,至于傳輸?shù)氖鞘裁次锢韺邮遣回?fù)責(zé)的辕翰。就像是我們的對話環(huán)境意義,物理層就像是空氣狈谊,我們通過空氣震動(dòng)傳遞聲音喜命,對方也在這個(gè)環(huán)境中,所以也能聽到我們發(fā)出的聲音河劝,聲音就是信號(hào)壁榕,物理層只是提供了一個(gè)信號(hào)傳遞的必要環(huán)境。
  但是有聲音你不一定能解讀丧裁,就像是一個(gè)人說英語护桦,一個(gè)人說漢語含衔,同樣能發(fā)聲煎娇,能接收到信號(hào),但是彼此缺并不知道信號(hào)的意義贪染,那信號(hào)也就沒有任何意義缓呛。
  此時(shí)的英語或者漢語就是一種協(xié)議,當(dāng)然在信號(hào)傳輸?shù)倪^程中也存在一定的問題杭隙,比如兩個(gè)說漢語的人交流哟绊,因?yàn)楦舻幂^遠(yuǎn),因?yàn)樘鞖獾仍蛟斐蓺鈮翰环€(wěn)痰憎,或者風(fēng)較大票髓,都會(huì)使接收方收到的消息可能會(huì)有缺失或者誤差。
  那么鏈路層主要解決的問題就是找到一種方式能讓彼此交流铣耘,讓對方知道你在說什么洽沟。


1.3 如何讓對方知道你在說什么?

前言

??現(xiàn)實(shí)生活中蜗细,兩個(gè)人要對話(具備通話的物理環(huán)境裆操,即都能收到對方傳過來的聲音),首先兩個(gè)人都要用相同的語言炉媒,而語言又是由單詞(包含長度踪区、發(fā)音等屬性),詞組吊骤,語法等構(gòu)成缎岗。
  溝通的語言就相當(dāng)于協(xié)議,而協(xié)議的實(shí)現(xiàn)就沒有語言那么復(fù)雜了白粉,我們只需要讓傳遞的雙方知道我們這段數(shù)據(jù)是給誰的传泊,然后哪一部分是數(shù)據(jù),什么時(shí)候結(jié)束就好了。至于數(shù)據(jù)的內(nèi)容是什么是需要目的地客戶端需要解析的掌敬。
  現(xiàn)實(shí)生活中我們對話都是一句話一句話的說,那么數(shù)據(jù)傳輸也是一段一段傳輸?shù)模覀児苓@個(gè)叫做封裝成幀雅潭,中間還會(huì)遇到一些其他問題,為了解決這些問題椿浓,引入了透明傳輸差錯(cuò)檢測兩種機(jī)制扳碍,下面我們來詳細(xì)解釋一下這三個(gè)基本問題。

  • 封裝成幀

??先來張概念圖,心里好有個(gè)數(shù):

鏈路層封裝成幀.png

??其實(shí)封裝成幀來傳輸數(shù)據(jù)還可以這樣來理解:經(jīng)過物理層的闡述我們知道,數(shù)據(jù)傳輸是不可靠的,如果我們不進(jìn)行封裝成幀喷面,那么就是整個(gè)文件或者其他資源來傳輸琳状,如果出了問題,我們可能要從頭開始傳輸,或者需要判斷從哪里開始出現(xiàn)了問題,這就需要消耗不少的資源和復(fù)制的邏輯來重新傳輸或者判斷計(jì)算,所以我們需要找一個(gè)折中的值來包裝每次傳輸?shù)臄?shù)據(jù)痴晦,如果這個(gè)數(shù)據(jù)出現(xiàn)了問題,丟失了或者是出現(xiàn)了誤碼率琳彩,那么我們完全可以丟棄它,讓客戶端重新傳輸甚至不傳輸(如果對內(nèi)容的完整性允許有一定的損失的話部凑,例如視頻露乏、音頻的傳輸)。

??理解了為什么需要封裝成幀涂邀,接下來說一下如何封裝成幀瘟仿。 
  入上圖所示比勉,因?yàn)閿?shù)據(jù)的發(fā)送是依賴于信號(hào)劳较,而信號(hào)又是連續(xù)的,那么如何區(qū)分一個(gè)幀從哪里開始到哪里結(jié)束呢浩聋?這就需要引入幀與幀之間的分隔符观蜗,也就是圖中的幀首部和幀尾部;中間部分就是我們要傳輸?shù)臄?shù)據(jù)部分衣洁,為其命名為MTU墓捻,即Maximum Transmission Unit(最大傳輸單元)。

??插播:MTU的確定是很復(fù)雜的坊夫,RFC 1191 描述了“路徑最大傳輸單元發(fā)現(xiàn)方法”砖第,這是一種確定兩個(gè) IP 主機(jī)之間路徑最大傳輸單元的技術(shù)撤卢,其目的是為了避免 IP 分片。如果感興趣的同學(xué)可以自行查找資料梧兼,這里只做簡要解讀放吩。

  • 透明傳輸(pass-through)

??指的是在通訊中不管傳輸?shù)臉I(yè)務(wù)內(nèi)容如何,只負(fù)責(zé)將傳輸?shù)膬?nèi)容由源地址傳輸?shù)侥康牡刂酚鸾埽粚I(yè)務(wù)數(shù)據(jù)內(nèi)容做任何改變屎慢。
  在傳輸文本內(nèi)容的時(shí)候我們都是使用的ASCII碼,而我們知道ASCII是7位編碼忽洛,一共可組合成128個(gè)不同的ASCII碼腻惠,其中可打印的有95個(gè),不可打印的控制字符有33個(gè)欲虚。我們可以選擇一些特殊的字符來做幀界定符集灌。
  但是我們傳輸?shù)臄?shù)據(jù)并不都是文本內(nèi)容(例如:二進(jìn)制的圖像等),這時(shí)候情況就不一樣了复哆,我們選擇的幀界定符可能就跟數(shù)據(jù)部分的可能會(huì)發(fā)生重復(fù)欣喧,這樣終端幀解析的時(shí)候就找不到正確的幀開頭和結(jié)尾了。
  為了解決這個(gè)問題梯找,引入了轉(zhuǎn)義字符(Escape character)的概念唆阿,我們將一根特殊的字符作為轉(zhuǎn)義字符,當(dāng)發(fā)現(xiàn)幀界定符前面存在該轉(zhuǎn)義字符的時(shí)候锈锤,這個(gè)時(shí)候幀界定符所代表的就是數(shù)據(jù)驯鳖,而不是幀界定符。

字節(jié)填充法解決透明傳輸問題.png
  • 差錯(cuò)檢測

??差錯(cuò)檢測和透明傳輸一樣久免,也是在傳輸過程中發(fā)生的問題浅辙。
  現(xiàn)實(shí)的通信鏈路都不會(huì)是理想的。這就是說阎姥,比特在傳輸過程中可能會(huì)產(chǎn)生差錯(cuò):1可能會(huì)變成记舆,而0也可能變成1,這就叫做比特差錯(cuò)呼巴;比特差錯(cuò)是傳輸差錯(cuò)中的一種泽腮。在一段時(shí)間內(nèi),傳輸錯(cuò)誤的比特占所占傳輸比特總數(shù)的比率稱為誤碼率BER(BitErrorRate)衣赶。
  因此诊赊,為了保證數(shù)據(jù)傳輸?shù)目煽啃裕谟?jì)算機(jī)網(wǎng)絡(luò)傳輸數(shù)據(jù)時(shí)屑埋,必須采用各種差錯(cuò)檢測措施豪筝。
  目前在數(shù)據(jù)鏈路層廣泛使用了循環(huán)冗余檢驗(yàn)CRC(CyclicRedundancyCheck)的檢錯(cuò)技術(shù)。
  分析到這里,我們可以發(fā)現(xiàn)续崖,如果如果我們在傳送數(shù)據(jù)時(shí)不以幀為單位來傳送敲街,那么就無法加入冗余碼以進(jìn)行差錯(cuò)檢驗(yàn)。如果要在數(shù)據(jù)鏈路層進(jìn)行差錯(cuò)檢驗(yàn)严望,就必須把數(shù)據(jù)劃分為幀多艇,每一幀都加上冗余碼,一幀接一幀地傳送像吻,然后在接收方逐幀進(jìn)行差錯(cuò)檢驗(yàn)峻黍。這也是為什么要封裝成幀來傳送的一個(gè)原因。

重點(diǎn)拨匆,在數(shù)據(jù)鏈路層若僅僅使用循環(huán)冗余檢驗(yàn)CRC差錯(cuò)檢測技術(shù)姆涩,則只能做到對幀的無差錯(cuò)接受,可以理解為凡是接收端數(shù)據(jù)鏈路層接受的幀均無差錯(cuò)惭每。
  傳輸差錯(cuò)可分為兩大類:
    一類就是前面所說的最基本的比特差錯(cuò)骨饿,
    另一類傳輸差錯(cuò)則更復(fù)雜些,這就是收到的幀并沒有出現(xiàn)比特差錯(cuò)台腥,但卻出現(xiàn)了幀丟失宏赘、幀重復(fù)或幀失序。
綜上:鏈路層所謂“可靠傳輸”可以近似認(rèn)為:凡是數(shù)據(jù)鏈路層接收端接收到的幀均無差錯(cuò)黎侈。

??說明一:[無比特差錯(cuò)]與[無傳輸差錯(cuò)]并不是同樣的概念察署。
  無差錯(cuò)傳輸理解為:在某一次傳輸任務(wù)(會(huì)有N多個(gè)數(shù)據(jù)幀進(jìn)行傳輸)中,接收端能準(zhǔn)確的接收到這次傳輸任務(wù)所表達(dá)的內(nèi)容峻汉。
  無比特差錯(cuò)理解為:某一個(gè)數(shù)據(jù)幀在傳輸?shù)臅r(shí)候贴汪,接收端接收到的數(shù)據(jù)幀是無差錯(cuò)的。
  也就是說俱济,在組裝數(shù)據(jù)幀的時(shí)候如果出現(xiàn)了問題例如幀丟失或者順序錯(cuò)誤的話嘶是,就不能認(rèn)為是無傳輸差錯(cuò)

??說明二:所以為了保證無傳輸差錯(cuò)在CRC檢錯(cuò)的基礎(chǔ)上,增加了幀編號(hào)蛛碌、確認(rèn)和重傳機(jī)制。收到正確的幀就要向發(fā)送端發(fā)送確認(rèn)辖源。發(fā)送端在一定的期限內(nèi)若沒有收到對方的確認(rèn)蔚携,就認(rèn)為出現(xiàn)了差錯(cuò),因而就進(jìn)行重傳克饶,直到收到對方的確認(rèn)為止酝蜒。
  這種方法在歷史上曾經(jīng)起到很好的作用。但現(xiàn)在的通信線路的質(zhì)量己經(jīng)大大提高了矾湃,由通信鏈路質(zhì)量不好引起差錯(cuò)的概率己經(jīng)大大降低亡脑。因此,現(xiàn)在互聯(lián)網(wǎng)就采取了區(qū)別對待的方法:
  對于通信質(zhì)量良好的有線傳輸鏈路,數(shù)據(jù)鏈路層協(xié)議不使用確認(rèn)和重傳機(jī)制霉咨,即不要求數(shù)據(jù)鏈路層向上提供可靠傳輸?shù)姆?wù)蛙紫。如果在數(shù)據(jù)鏈路層傳輸數(shù)據(jù)時(shí)出現(xiàn)了差錯(cuò)并且需要進(jìn)行改正,那么改正差錯(cuò)的任務(wù)就由上層協(xié)議(例如途戒,傳輸層的TCP協(xié)議)來完成坑傅。
  對于通信質(zhì)量較差的無線傳輸鏈路,數(shù)據(jù)鏈路層協(xié)議使用確認(rèn)和重傳機(jī)制喷斋,數(shù)據(jù)鏈路層向上提供可靠傳輸?shù)姆?wù)唁毒。


1.4 總結(jié)

以上只是概念性的說明,具體的實(shí)現(xiàn)有很多思路星爪,具體的需要根據(jù)當(dāng)前網(wǎng)絡(luò)使用的是什么協(xié)議來決定浆西。
  數(shù)據(jù)鏈路層使用的信道主要是點(diǎn)對點(diǎn)信道(PPP協(xié)議)廣播信道(CSMA/CD協(xié)議),具體就不展開做詳細(xì)介紹了顽腾,有興趣的同學(xué)可以自己查閱資料
  協(xié)議可以理解為解決某種問題的一種解決辦法近零,所以只要是類似的問題都可以使用這種辦法解決,后面再計(jì)算機(jī)知識(shí)的學(xué)習(xí)中崔泵,也會(huì)發(fā)現(xiàn)很多相似的協(xié)議秒赤。

參考資料


  • 《計(jì)算機(jī)網(wǎng)絡(luò)(第7版)》-謝希仁
  • 維基百科
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市憎瘸,隨后出現(xiàn)的幾起案子入篮,更是在濱河造成了極大的恐慌,老刑警劉巖幌甘,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潮售,死亡現(xiàn)場離奇詭異,居然都是意外死亡锅风,警方通過查閱死者的電腦和手機(jī)酥诽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皱埠,“玉大人肮帐,你說我怎么就攤上這事”咂鳎” “怎么了训枢?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忘巧。 經(jīng)常有香客問我恒界,道長,這世上最難降的妖魔是什么砚嘴? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任十酣,我火速辦了婚禮涩拙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耸采。我一直安慰自己兴泥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布洋幻。 她就那樣靜靜地躺著郁轻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪文留。 梳的紋絲不亂的頭發(fā)上好唯,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音燥翅,去河邊找鬼骑篙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛森书,可吹牛的內(nèi)容都是我干的靶端。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凛膏,長吁一口氣:“原來是場噩夢啊……” “哼杨名!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猖毫,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤台谍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后吁断,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趁蕊,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年仔役,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掷伙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡又兵,死狀恐怖任柜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沛厨,我是刑警寧澤乘盼,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站俄烁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏级野。R本人自食惡果不足惜页屠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一粹胯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辰企,春花似錦风纠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至潜索,卻和暖如春臭增,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竹习。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工誊抛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人整陌。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓拗窃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泌辫。 傳聞我的和親對象是個(gè)殘疾皇子随夸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容