資料鍊路層的基本概念
資料發送的模型
主機H1向H2發送資料
每一次經過一次路由器,路由器都會進行解釋,資料會從實體層到資料鍊路層再網絡層到路由器,路由器解析完後看看這資料應該走哪一個接口出去,然後再對資料進行封裝,然後從網絡層到資料鍊路層到實體層發給下一個路由器進行接收
資料鍊路層的信道類型
點對點信道:這種信道使用一對一的點對點通信方式,比如兩台主機直接由一條網線進行連接配接起來的,這就是點對點信道
廣播信道:這種信道使用一對多的廣播通信方式,是以過程比較複雜。廣播信道上連接配接的主機很多,是以必須使用專用的共享信道協定來協調這些主機的資料發送。如果是一個內建器給很多主機連接配接,那麼這種就是廣播信道
鍊路與資料鍊路
鍊路link
是一條點到點的實體線路段,中間沒有任何其他的交換結點。就比如一條網線,一條鍊路隻是一條通路的一個組成部分。
資料鍊路data link
除了實體線路外,還必須有通信協定來控制這些資料的傳輸。若把實作這些協定的硬體和軟體加到鍊路上,就構成了資料鍊路。
現最常用的方法是使用擴充卡即網卡來實作這些協定的硬體和軟體。
一般的擴充卡都包括了資料鍊路層和實體層這兩層的功能。
幀
資料鍊路層傳送的就是幀,幀有幀頭和幀尾
資料鍊路層像個數字管道
常常在兩個對等的資料鍊路層之間畫出一個數字管道,而在這條數字管道上傳輸的資料機關是幀。
資料鍊路層的三個基本問題
封裝成幀
透明傳輸
差錯控制
封裝成幀
封裝成幀(framing)就是在一段資料的前後分别添加首部和尾部,然後就構成了一個幀。确定幀的界限。
首部和尾部的一個重要作用就是進行幀定界。
MTU就是最大傳輸單元,以太網最大傳輸單元不能超過1500個子節
這個幀就好比如我們說話,幀比喻成一句話一句話,一句話我們知道這句話的開頭,這句話的結尾,幀也是在前面加了頭,後面加了尾,確定這個幀傳輸的完整性
比如:接收端隻接收到幀的開頭或者隻接收到結尾的一段,接收端都會抛棄着不完整的幀的
透明傳輸
傳輸使用的都是可列印字元的(鍵盤能打出來的),而幀頭和幀尾使用的是不可列印的字元
若傳輸的資料是ASCl碼中“可列印字元(共95個)”集時,一切正常。
若傳輸的資料不是僅由“可列印字元”組成時,就會出問題,
用位元組填充法解決透明傳輸的問題
發送端的資料鍊路層在資料中出現控制字元“SOH”或“EOT”的前面插入一個轉義字元“ESC”(其十六進制編碼是1B)。
位元組填充(byte stufing)或字元填充(character stuffing):接收端的資料鍊路層在将資料送往網絡層之前删除插入的轉義字元。
如果轉義字元也出現資料當中,那麼應在轉義字元前插入一個轉義字元。當接收端收到連續的兩個轉義字元時,就删除其中前面的一個。
差錯控制
傳輸過程中可能會産生比特差錯:1可能會變成0而0也可能變成1。在一段時間内,傳輸錯誤的比特占所傳輸比特總數的比率稱為誤碼率BER(Bit Error Rate)。
誤碼率與信噪比有很大的關系。
為了保證資料傳輸的可靠性,在計算機網絡傳輸資料時,必須采用各種差錯檢測措施。
循環備援檢驗CRC
在資料鍊路層傳送的幀中,廣泛使用了循環備援檢驗CRC的檢錯技術。
在發送端,先把資料劃分為組。假定每組k個比特。
假設待傳送的一組資料M=101001(現在k=6)。我們在M的後面再添加供差錯檢測用的n位備援碼一起發送。
備援碼的計算
用二進制的模2運算進行2^n乘M的運算,這相當于在M後面添加n個0。
得到的(k+n)位的數除以事先標明好的長度為(n+1)位的除數P,
得出商是Q而餘數是R,餘數R比除數P少1位,即R是n位。
然後将這個餘數R填寫在M後面添加的n個0的位置上,
檢驗:使用k+n的數(就是本來的那個需要傳輸的數字加上餘數後的數字)除以除數P,如果餘數是0,證明傳輸沒有出差錯,餘數不是0就是出差錯
例如:
被除數和除數之間相除的時候,上下相減的時候,相同得0,不同得1
還有這裡除數是資料鍊路層協定定義好的,網卡之間知道除數是什麼的
需要傳輸的資料:101001
除數:1101
兩個相除得:001
最後傳輸的資料是101001001
幀檢驗序列FCS
在資料後面添加上的備援碼稱為幀檢驗序列FCS(Frame Check Sequence)。循環備援檢驗CRC和幀檢驗序列FCS并不等同。
CRC是一種常用的檢錯方法,而FCS是添加在資料後面的備援碼。
FCS可以用CRC這種方法得出,但CRC并非用來獲得FCS的唯一方法。
接收端對收到的每一幀進行CRC檢驗,
若得出的餘數R=0,則判定這個幀沒有差錯,就接受(accept)。
若餘數R0,則判定這個幀有差錯,就丢棄。
但這種檢測方法并不能确定究竟是哪一個或哪幾個比特或者哪一個路由器出現了差錯。
隻有經過嚴格的挑選,并使用位數足夠多的除數P,那麼出現檢測不到的差錯的機率就很小很小。
缺點
僅用循環備援檢驗CRC差錯檢測技術隻能做到無差錯接受(accept)。
無差錯接受是指:“凡是接受的幀(即不包括丢棄的幀),我們都能以非常接近于1的機率認為這些幀在傳輸過程中沒有産生差錯”。也就是說:“凡是接收端資料鍊路層接受的幀都沒有傳輸差錯”(有差錯的幀就丢棄而不接受)。
要做到“可靠傳輸”(即發送什麼就收到什麼)就必須再加上确認和重傳機制。考慮:幀重複、幀丢失、幀亂序的情況,但是CRC不處理這些問題
CRC是一種無比特差錯,而不是無傳輸差錯的檢測機制
OSI/RM模型的觀點:資料鍊路層要做成無傳輸差錯的!但這種理念目前不被接受!
使用點對點信道的資料鍊路層
PPP協定使用場合
需要向别人申請IP位址
現在全世界使用得最多的資料鍊路層協定是點對點協定PPP(Point-to-Point Protocol)。
使用者使用撥号電話線接入網際網路時,一般都是使用PPP協定。
PPP協定應該滿足的要求:
簡單(這是首要的要求)
封裝成幀
透明性
多種網絡層協定:支援很多的協定,能區分不同協定
多種類型鍊路:支援光纖,網線,同軸電纜
差錯檢測
檢測連接配接狀态:連接配接不上報具體的錯
最大傳送單元
網絡層位址協商:不同的使用者給可用的IP位址
資料壓縮協商:将資料進行壓縮
PPP協定有三個組成部分
資料鍊路層協定可以用于異步串行或同步串行媒體。
它使用LCP(鍊路控制協定)建立并維護資料鍊路連接配接。負責賬号的驗證之類的
網絡控制協定(NCP)允許在點到點連接配接上使用多種網絡層協定
PPP協定幀格式
協定裡面的内容就是告訴接收端,資訊部分裡面的東西代表的是什麼,有下面的這些字段:
标志字段F=0X7E(符号“0x”表示後面的字元是用十六進制表示。十六進制的7E的二進制表示是01111110)。
位址字段A隻置為0xFF。位址字段實際上并不起作用。因為PPP本來就是點對點的,而這個A就是寫接收端的位址,使用實際沒有用.
控制字段C通常置為0x03。
PPP是面向位元組的,所有的PPP幀的長度都是整數位元組。
位元組填充
問題:資訊字段中出現了标志字段的值,可能會被誤認為是“标志”,怎麼辦?
将資訊字段中出現的每個 0x7E 位元組轉變成為 2 位元組序列(0x7D, 0x5E)。
若資訊字段中出現一個 0x7D 的位元組, 則将其轉變成為 2 位元組序列(0x7D, 0x5D)。
若資訊字段中出現 ASCII 碼的控制字元(即數值小于 0x20 的字元),則在該字元前面要加入一個 0x7D 位元組,同時将該字元的編碼加以改變。
零比特填充方法
前面使用PPP協定的時候,傳輸的時候傳輸的都是位元組位元組地傳輸,現在用在SONET/SDH 鍊路,是一段一段比特流地傳輸
PPP 協定用在 SONET/SDH 鍊路時,是使用同步傳輸(一連串的比特連續傳送)。這時 PPP 協定采用零比特填充方法來實作透明傳輸
在發送端,隻要發現有 5 個連續 1,則立即填入一個 0。接收端對幀中的比特流進行掃描。每當發現 5 個連續1時,就把這 5 個連續 1 後的一個 0 删除.為什麼這樣呢?
因為頭部和尾部以示差別地7E二進制就是01111110,裡面如果需要傳輸的話就會被誤認為是字段F,表示結束或者開始的,是以就在五個1後面加一個0來區分開來
不使用序号和确認機制(所有的資料鍊路層都不使用)
PPP 協定之是以不使用序号和确認機制是出于以下的考慮:
- 在資料鍊路層出現差錯的機率不大時,使用比較簡單的 PPP 協定較為合理。
- 在網際網路環境下,PPP 的資訊字段放入的資料是 IP 資料報。資料鍊路層的可靠傳輸并不能夠保證網絡層的傳輸也是可靠的。
- 幀檢驗序列 FCS 字段可保證無差錯接受。
PPP協定的工作狀态
當使用者撥号接入 ISP 時,路由器的數據機對撥号做出确認,并建立一條實體連接配接。
PC 機向路由器發送一系列的 LCP 分組(封裝成多個 PPP 幀)。
這些分組及其響應選擇一些 PPP 參數,和進行網絡層配置,NCP 給新接入的 PC機配置設定一個臨時的 IP 位址,使 PC 機成為網際網路上的一個主機。
通信完畢時,NCP 釋放網絡層連接配接,收回原來配置設定出去的 IP 位址。接着,LCP 釋放資料鍊路層連接配接。最後釋放的是實體層的連接配接。
使用廣播信道的資料鍊路層
區域網路的特點與優點
區域網路最主要的特點是:網絡為一個機關所擁有,且地理範圍和站點數目均有限。
區域網路具有如下的一些主要優點:
具有廣播功能,從一個站點可很友善地通路全網。區域網路上的主機可共享連接配接在區域網路上的各種硬體和軟體資源。
便于系統的擴充和逐漸地演變,各裝置的位置可靈活調整和改變。
提高了系統的可靠性、可用性和生存性。
共享通信的媒體
-
靜态劃分信道:頻分複用,時分複用,波分複用,碼分複用
這種靜态劃分接入的方式,每一次接入一台電腦,就需要人工配置設定一個頻分或者時分等等,這樣很不友善
-
動态媒體接入控制(多點接入):
随機接入(主要被以太網采用!)
認識以太網
最初的以太網是将許多計算機都連接配接到一根總線上。當初認為這樣的連接配接方法既簡單又可靠,因為總線上沒有有源器件。
總線上的每一個工作的計算機都能檢測到 B 發送的資料信号。由于隻有計算機 D 的位址與資料幀首部寫入的位址一緻,是以隻有 D 才接收這個資料幀。 其他所有的計算機(A, C 和 E)都檢測到不是發送給它們的資料幀,是以就丢棄這個資料幀而不能夠收下來。
但是這種接法,在這條總線上,同一時間隻能有一個發送端一個接收端,
還有就是如果B和D進行通訊,但是A自己修改網卡,将他們之間發送的資料進行全部接收,這樣就會造成安全隐患
以太網使用CSMA/CD協定
也叫載波監聽多點接入/碰撞檢測
CSMA/CD 表示 Carrier Sense Multiple Access with Collision Detection。
多點接入表示許多計算機以多點接入的方式連接配接在一根總線上。
載波監聽是指每一個站在發送資料之前先要檢測一下總線上是否有其他計算機在發送資料,如果有,則暫時不要發送資料,以免發生碰撞。 那什麼時候發呢?就是随機一個時間後在進行發送
“載波監聽”就是用電子技術檢測總線上有沒有其他計算機發送的資料信号。
碰撞檢測就是計算機邊發送資料邊檢測信道上的信号電壓大小。
當幾個站同時在總線上發送資料時,總線上的信号電壓擺動值将會增大(互相疊加)。
當一個站檢測到的信号電壓擺動值超過一定的門限值時,就認為總線上至少有兩個站同時在發送資料,表明産生了碰撞。
所謂“碰撞”就是發生了沖突。是以“碰撞檢測”也稱為“沖突檢測”。
檢測到碰撞後
在發生碰撞時,總線上傳輸的信号産生了嚴重的失真,無法從中恢複出有用的資訊來。
每一個正在發送資料的站,一旦發現總線上出現了碰撞,就要立即停止發送,免得繼續浪費網絡資源,然後等待一段随機時間後再次發送。
電磁波在總線上的有限傳播速率的影響
當某個站監聽到總線是空閑時,也可能總線并非真正是空閑的。
A 向 B 發出的資訊,要經過一定的時間後才能傳送到 B。
B 若在 A 發送的資訊到達 B 之前發送自己的幀(因為這時 B 的載波監聽檢測不到 A 所發送的資訊),則必然要在某個時間和 A 發送的幀發生碰撞。
碰撞的結果是兩個幀都變得無用。
由上面的圖,如果是在極限的情況下,就是A發送的資料很接近B的時候,但是B還沒接收到,這時B檢測到信道是空閑的,是以開始發送資料,發了一會就發現碰撞,停止發送,A檢測到碰撞的時間就接近2t(兩倍的端到端往返時延)(是以以太網一般不超過100米)
使用 CSMA/CD 協定的以太網不能進行全雙工通信而隻能進行雙向交替通信(半雙工通信)。
每個站在發送資料之後的一小段時間内,存在着遭遇碰撞的可能性。
這種發送的不确定性使整個以太網的平均通信量遠小于以太網的最高資料率。
首先
重傳次數 1 2 3 4
k 1 2 3 4
r 0-1 0-3 0-7 0-15
随機時間 r*2t
是以這個整數集合會越來越大,那麼這兩個重傳所需要的時間相同的可能性就越來越小