磕磕絆絆我來到了網(wǎng)絡(luò)接口層道伟,從我這幾天寫筆記的感悟,我覺得把自己很明白的東西清楚的講給別人才是真的難拄轻。
從概述里面我們知道了網(wǎng)絡(luò)接口層解決的是比較近距離的通訊就像我們?nèi)齼蓚€(gè)人直接對話一樣颅围。
在這一篇里面我們要探究下鏈路層協(xié)議一些共有的特征,然后這篇文章主要參考的是謝希人先生的《計(jì)算機(jī)網(wǎng)絡(luò)》也就是我們的課本恨搓。
我們?nèi)粘υ挵稍捍伲辽僖袃蓚€(gè)人吧這是一種情況,還有一種情況就是三個(gè)人及其以上斧抱。
反正不管是哪種情況他們要解決的問題就是以下這幾點(diǎn)
- 封裝成幀
- 透明傳輸
- 差錯(cuò)檢測
另外我覺得還要加上第四點(diǎn)
- 對上層協(xié)議的支持
我們分別來談?wù)勥@幾點(diǎn)的意思
封裝成幀:
封裝成幀是什么意思呢常拓?從我們?nèi)藖碇v,不管我們的對話是哪種情況吧辉浦,至少你要能聽清楚對方說的完整的話吧弄抬,我們知道在計(jì)算機(jī)之間傳輸?shù)氖潜忍亓?可能這么說不對吧不太懂通訊)我們的信息從應(yīng)用層、運(yùn)輸層宪郊、網(wǎng)絡(luò)層交下來然后以01比特流傳輸?shù)牡嗨。热纾?/p>
01001011101
但是我們發(fā)了兩條信息,那就應(yīng)該是這樣的:
0100101110101000011101
假如我們發(fā)了三條信息呢弛槐?那就會是這樣:
010010111010100001110101111101
這計(jì)算機(jī)還能分出完整的話來嗎懊亡?當(dāng)然就不能了啊,于是我們的先輩們發(fā)明了封裝成幀乎串。封裝成幀的意思是:在一個(gè)完整的信息前面取幾位作為信息開始的標(biāo)志店枣,在這個(gè)完整的信息后面取幾位作為信息結(jié)束的標(biāo)志。例如我們以01作為開始位,同時(shí)又以01作為結(jié)束位鸯两,那么上面的例子就變成了:
01001011101
01001011101 01000011101
01001011101 01000011101 01111101
謝希人先生在計(jì)算機(jī)網(wǎng)絡(luò)中舉的例子是這個(gè):以字符SOH(十六進(jìn)制是01二進(jìn)制是00000001)作為幀的開始以字符EOT(十六進(jìn)制是04二進(jìn)制是00000100)作為幀的結(jié)束闷旧,如圖:
可能這個(gè)時(shí)候就會有朋友說了:你那個(gè)例子
01001011101
如果這么分割呢?
01001 0111101
如果信息內(nèi)部也出現(xiàn)標(biāo)志位的話那就會對信息的傳輸造成困擾钧唐,別急先輩們又發(fā)明了:透明傳輸
透明傳輸
我們上面提到了透明傳輸是為了解決標(biāo)志位在要傳輸?shù)男畔⒅谐霈F(xiàn)的問題
然后先輩們想到解決方案是字節(jié)填充或字符填充:什么是字符填充呢發(fā)送端數(shù)據(jù)插入一個(gè)轉(zhuǎn)義字符“ESC”(其十六進(jìn)制編碼是1B忙灼,二進(jìn)制是00011011)。而在接收端的數(shù)據(jù)鏈路層在把數(shù)據(jù)送往網(wǎng)絡(luò)層之前刪除這個(gè)插入的轉(zhuǎn)義字符逾柿。如果轉(zhuǎn)義字符也出現(xiàn)在數(shù)據(jù)當(dāng)中缀棍,那么解決方法仍然是在轉(zhuǎn)義字符的前面插入一個(gè)轉(zhuǎn)義字符。如圖:
差錯(cuò)檢測
數(shù)據(jù)在通訊過程中是會產(chǎn)生錯(cuò)誤的比如說在一串比特流中0變成1或者1變成0机错,為了檢測出錯(cuò)誤然后那幫偉大的探索者們發(fā)明了一種叫做循環(huán)冗余檢驗(yàn)CRC(Cyclic Redundancy Check)的檢測技術(shù)爬范。
它的做法是這樣的:
在要發(fā)送的數(shù)據(jù)M后面添加n個(gè)零。得到的(k + n)位的數(shù)除以收發(fā)雙方事先商定好的長度為(n+1)位的除數(shù)P弱匪,得出商是Q而余數(shù)是R(n位青瀑,比P少一位)萧诫。這種為了進(jìn)行檢錯(cuò)而添加的冗余碼常稱為幀檢驗(yàn)序列FCS(Frame Check Sequence)帘饶。接收端把接受到的數(shù)據(jù)進(jìn)行CRC檢驗(yàn):把收到的數(shù)據(jù)都除以同樣的除數(shù)P(模2運(yùn)算)镀裤,然后檢查得到的除數(shù)R。如果R=0,則數(shù)據(jù)沒有出現(xiàn)差錯(cuò)傅联。
一般的除數(shù)P都通過這種方法來產(chǎn)生: