- 數(shù)據(jù)鏈路層定義幀的開始和結(jié)束,檢驗開始和結(jié)束之間的數(shù)據(jù)傳輸是否正確。
- 數(shù)據(jù)鏈路層使用的信道有兩種:點(diǎn)對點(diǎn)信道和廣播信道。
- 鏈路是一條點(diǎn)對點(diǎn)的物理線路,中間沒有任何其他交換站點(diǎn)。一條鏈路只是一條通路的一個組成部分。
- 數(shù)據(jù)鏈路除了物理線路外,還必須有通信協(xié)議來控制這些數(shù)據(jù)的傳輸。若把實(shí)現(xiàn)這些協(xié)議的硬件和軟件加到鏈路上,就構(gòu)成了數(shù)據(jù)鏈路。
- 在數(shù)據(jù)鏈路層中稱這種數(shù)據(jù)塊為幀(frame),幀是數(shù)據(jù)鏈路層的傳送單位。數(shù)據(jù)鏈路層給數(shù)據(jù)報加上幀頭、幀尾、物理層地址和檢驗值。
幀的傳輸
三個基本問題
1、封裝成幀
封裝成幀就是在一段數(shù)據(jù)前后分別添加首部和尾部,然后構(gòu)成一個幀。封裝成幀確定幀的界限。首部和尾部的作用就是進(jìn)行幀定界。
2、透明傳輸
透明傳輸是指不管所傳數(shù)據(jù)是什么樣的比特組合,都應(yīng)當(dāng)能夠在鏈路上傳送。當(dāng)所傳數(shù)據(jù)中的比特組合恰巧與某一個控制信息完全一樣時,就必須采取適當(dāng)?shù)拇胧菇邮辗讲粫⑦@樣的數(shù)據(jù)誤認(rèn)為是某種控制信息。這樣才能保證數(shù)據(jù)鏈路層的傳輸是透明的。
若傳輸?shù)臄?shù)據(jù)是ASCII碼中“可打印字符(共95個)”集時,一切正常。若傳輸?shù)臄?shù)據(jù)不是僅由“可打印字符”組成時,就會出現(xiàn)問題,SOH表示幀開始符,EOT表示幀結(jié)束符,如圖所示:
解決方法:
- 發(fā)送端的數(shù)據(jù)鏈路層在數(shù)據(jù)中出現(xiàn)控制字符“SOH”或“EOT”的前面加一個轉(zhuǎn)義字符“ESC”(十六進(jìn)制編碼是1B)。
- 字節(jié)填充或字符填充:接收端的數(shù)據(jù)鏈路層在將數(shù)據(jù)送往網(wǎng)絡(luò)層前刪除插入的轉(zhuǎn)義字符。
-
如果轉(zhuǎn)義字符也出現(xiàn)在數(shù)據(jù)中,就在轉(zhuǎn)義字符前也插入一個轉(zhuǎn)義字符。當(dāng)接收端收到連續(xù)兩個轉(zhuǎn)義字符時,就刪除前一個轉(zhuǎn)義字符。
字節(jié)填充
3、差錯控制
傳輸過程中可能產(chǎn)生比特差錯:1可能變成0,0可能變成1。
在一段時間內(nèi),傳輸錯誤的比特占所傳輸比特總數(shù)的比例成為誤碼率BER(Bit Error Rate)。誤碼率與信噪比有很大關(guān)系。因此需要采用差錯檢測。
在A向B發(fā)送數(shù)據(jù)的鏈路中間會經(jīng)過多個路由器,路由器在數(shù)據(jù)鏈路層檢測數(shù)據(jù)是否正確,如果錯誤就丟棄這個幀,以保證通過這個路由器傳輸過去的(不包括丟棄的)都是正確的幀。
鏈路層只進(jìn)行差錯檢驗,不進(jìn)行差錯糾正,差錯糾正由傳輸層進(jìn)行,由傳輸層進(jìn)行可靠傳輸。鏈路層丟棄錯誤的幀后,發(fā)送端長期得不到幀接收確認(rèn)信息,就會重新發(fā)送一次該幀。
循環(huán)冗余校驗CRC
數(shù)據(jù)鏈路層傳輸中廣泛使用了循環(huán)冗余校驗CRC。
- 在發(fā)送端,先把數(shù)據(jù)劃分為組,每組k個比特。
- 假設(shè)待傳送的一組數(shù)據(jù)M=101001(k=6),我們在M的后面再添加供差錯檢測用的n位冗余碼一起發(fā)送。
冗余碼的計算:
- 在二進(jìn)制M后面添加n個0。假設(shè)n=3,則M變?yōu)椋╧+n)位的101 001 000.
-
把(k+n)位的數(shù)除以事先選定好的長度為(n+1)位的除數(shù)P,得到商是Q,余數(shù)是R,R為n位,也就是M的CRC冗余校驗碼。把余數(shù)R作為冗余碼添加在數(shù)據(jù)M的后面發(fā)送過去。發(fā)送數(shù)據(jù)是 101 001 001,共(k+n)位。
Paste_Image.png
注:可以用生成多項式來表示循環(huán)冗余的除數(shù),例如P(X)=X3+X2+1可以表示1101這個除數(shù)。
在數(shù)據(jù)后面添加上的冗余碼稱為幀校驗序列FCS(Frame Check Sequence)。循環(huán)冗余檢驗CRC和幀檢驗序列FCS并不等同:
- CRC是一種常見的檢錯方法,而FCS是添加在數(shù)據(jù)后面的冗余碼。
- FCS可以用CRC這種方法得出,但CRC并非用來獲得FCS的唯一方法。
CRC檢測不能確定究竟是哪一個或哪幾個比特出現(xiàn)了差錯,也不能保證如果出現(xiàn)錯誤就一定能檢測出來(錯誤數(shù)據(jù)也可能得到正確的余數(shù)),但是只要經(jīng)過嚴(yán)格的挑選,并使用位數(shù)足夠多的除數(shù)P,那么出現(xiàn)檢測不到的差錯的概率就很小很小。
PPP協(xié)議實(shí)現(xiàn)無差錯接收(錯誤的就丟掉),但不實(shí)現(xiàn)可靠傳輸。
數(shù)據(jù)鏈路層點(diǎn)到點(diǎn)協(xié)議PPP
現(xiàn)在全世界使用得最多的數(shù)據(jù)鏈路層協(xié)議是點(diǎn)對點(diǎn)協(xié)議PPP(Point-to-Point Protocol),用戶使用撥號電話線接入因特網(wǎng)時,一般都是使用PPP協(xié)議。
標(biāo)志字段F=0x7E標(biāo)志了幀的開始和結(jié)束。
地址字段A只置為0xFF,由于是點(diǎn)對點(diǎn)通信,實(shí)際上并不起什么作用。
控制字段C通常置為0x03,沒有什么特殊含義。
PPP協(xié)議的透明傳輸(字節(jié)填充):
1. 字節(jié)填充
- 將信息字段中出現(xiàn)的每個0x7E字節(jié)變成2字節(jié)序列(0x7D,0x5E)。
- 若信息字段中出現(xiàn)一個0x7D的字節(jié),則將其轉(zhuǎn)變?yōu)?字節(jié)序列(0x7D,0x5D)。
- 若信息字段中出現(xiàn)ASCII碼的控制字符(數(shù)值小于0x20的字符),則在該字符前加入一個0x7D字節(jié),同時將該字符的編碼加以改變。
2. 零比特填充
PPP協(xié)議用在SONET/SDH鏈路時,使用同步傳輸(一連串的比特連續(xù)傳遞,不保證是字節(jié)的整數(shù)倍)。這時PPP協(xié)議采用零比特填充方法來實(shí)現(xiàn)透明傳輸。
在發(fā)送端,只要發(fā)現(xiàn)信息部分有5個連續(xù)1,則立即填入一個0.接收端對幀中的比特流進(jìn)行掃描,每當(dāng)發(fā)現(xiàn)5個連續(xù)1時,就把這5個連續(xù)1后面的一個0刪除。
廣播信道的數(shù)據(jù)鏈路層
以太網(wǎng)
以太網(wǎng)提供的服務(wù)是不可靠的交付,即盡最大努力的交付。
當(dāng)接收站收到有差錯的數(shù)據(jù)幀時就丟棄此幀,其他什么也不做。差錯的糾正由高層來決定。如果高層發(fā)現(xiàn)丟失了一些數(shù)據(jù)而進(jìn)行重傳,但以太網(wǎng)并不知道這是一個重傳的幀,而是當(dāng)做一個新的數(shù)據(jù)幀來發(fā)送。
信道利用率
一個幀從開始發(fā)送,經(jīng)可能發(fā)生的碰撞后,將再重傳數(shù)次,到發(fā)送成功且信道轉(zhuǎn)為空閑(即再經(jīng)過t時間使得信道上無信號在傳播)時為止,是發(fā)送一幀所需的平均時間
MAC層(媒體訪問控制層)
MAC地址,又稱硬件地址或物理地址,48位,前三字節(jié)(高位24位)由IEEE的注冊管理機(jī)構(gòu)RA向廠家分配,后三字節(jié)(低24位)由廠家自行指派,必須保證生產(chǎn)出的適配器沒有重復(fù)地址。這種48位地址稱為MAC-48,通用名稱為EUI-48.
MAC地址不可更改,但是可以更改通信時的MAC地址,也相當(dāng)于“更改”了MAC地址。
- 類型字段用來標(biāo)識上一層使用的是什么協(xié)議,以便把收到的MAC幀的數(shù)據(jù)上交給上一層的這個協(xié)議。
- 數(shù)據(jù)字段的正式名稱是MAC客戶數(shù)據(jù)字段
最小長度64字節(jié) - 18字節(jié)的首部和尾部 = 數(shù)據(jù)字段的最小長度46字節(jié)
當(dāng)數(shù)據(jù)字段的長度小于46字節(jié)時,應(yīng)在數(shù)據(jù)字段的后面加入整數(shù)字節(jié)的填充字段,以保證以太網(wǎng)的MAC幀長不小于64字節(jié)。 - 為了達(dá)到比特同步,在傳輸媒體上實(shí)際傳送的要比MAC幀還多8字節(jié)。在幀前面插入的8字節(jié)中第一個字段共7個字節(jié),是前同步碼,用來迅速實(shí)現(xiàn)MAC幀的比特同步。第二個字段是幀開始定界符,表示后面的信息就是MAC幀。
無效的MAC幀:
1)幀長度不是整數(shù)個字節(jié);
2)用收到的幀檢驗序列FCS查出有差錯;
3)數(shù)據(jù)字段的長度不在46~1500字節(jié)內(nèi)。
幀最小間隔:
幀間隔最小間隔為9.6 us,相當(dāng)于96 bit的發(fā)送時間(10M以太網(wǎng))。一個站在檢測到總線開始空閑后,還要等待9.6 us才能再次發(fā)送數(shù)據(jù)。這樣做是為了使剛剛收到數(shù)據(jù)幀的站的接收緩存來得及清理,做好接收下一幀的準(zhǔn)備。
百兆以太網(wǎng)(100Base-T)的幀最小間隔為0.96 us