1. 程式人生 > >計算機網絡【三】:數據鏈路層 【轉】

計算機網絡【三】:數據鏈路層 【轉】

緩存 strong mac 幾分鐘 tcp協議 tran 可靠性 如何 wid

轉自:http://blog.chinaunix.net/uid-26275986-id-4104189.html

按照TCP/IP協議由下往上的順序,今天我們來學習一下數據鏈路層,數據鏈路層位於物理層和網絡層之間,其設計的初衷就是順利為網絡層提供數據服務,不考慮可靠性,可靠性的部分由傳輸層的TCP協議實現。我們可以從下面的圖中簡單地了解一下數據鏈路層在網絡傳遞中的地位,假設在通信的過程中需要通過路由器的話,那麽數據的具體流動過程就像下面圖中箭頭的示意:
技術分享
其中路由器負責路由轉發,因此需要最高到網絡層進行IP協議的分析;我們也可以在邏輯上將整個通信過程看成是兩端數據鏈路層之間點對點的通信:
技術分享

數據鏈路的信道主要有兩種模式:
1. 點對點信道:這種信道使用一對一的點對點通信方式;
2. 廣播信道:這種信道使用一對多的廣播通信方式,因此過程比較復雜。

一、點對點的數據鏈路層
1. 區分“鏈路”與“數據鏈路”
之前自己常常說“鏈路層”,其實鏈路的真正意思是從一個結點到相鄰結點的一段物理線路,其中沒有任何其他的交換結點。數據鏈路則是指在物理線路上添加上控制數據傳輸的協議的硬件和軟件。因此數據鏈路是比鏈路更為深刻的內涵。
2. 數據鏈路層的數據傳輸單元我們一般稱之為幀,數據鏈路層的任務就是將上層的數據封裝成幀交給物理層傳輸,以及分析物理層提交的數據幀,提取出上層數據交給網絡層。具體來說就是:
a. 信源的數據鏈路層把網絡層交下來的IP數據報添加首部和尾部封裝成幀;
b. 信源把封裝好的數據幀發送給信宿的數據鏈路層;
c. 若新宿的數據鏈路層收到的幀無差錯,則從收到的幀中提取出IP數據報上交給網絡層,否則丟棄這個幀;
技術分享


3. 數據鏈路層的三個基本問題
數據鏈路層的協議有很多種,但有三個基本的問題是共同的,那就是:封裝成幀、透明傳輸和差錯控制
a. 封裝成幀 數據鏈路層的主要工作是添加一個幀頭部和幀尾部,不同的數據鏈路層協議可能格式不同,但是基本的格式都試類似的:
技術分享
這裏的數據部分,一般有一個最大程度,我們稱為MTU,在MAC裏一般是1500個字節,後面會詳細介紹。這裏要說的是,當數據是由可打印的ASC2碼組成的文件時,可以使用特殊的幀定字符來標明一個幀的開始和結束。比如使用SOH(Start Of Header)--0x01和EOT(End Of Transmission)--0x04來表示,這樣數據鏈路層就可以識別出幀的開始和結束。
b. 透明傳輸 如果我們提供任何數據輸入,數據鏈路層都可以成功傳遞,那麽我們稱之為透明傳輸,即數據鏈路層的功能對於網絡層和上層是透明的。比如上例的文本字符數據輸入,SOH和EOT都可以很好的工作,因為二者沒有交集。但是對於二進制數據輸入來說,就有可能在數據中出現0x01和0x04,導致幀意外地中斷和丟棄。因此,我們需要一種機制來處理這種情況,最經典、最常用的就是字節填充
的方式,比如在SOH和EOT的前面分別插入一個轉義字符ESC-0x1B,在接收端的數據鏈路層在將數據送往網絡層之前刪除這個插入的轉義字符,這就叫做字符填充。
技術分享
c. 錯誤檢測
現實的通信鏈路都不會是理想的,這就是說,傳輸過程中有可能1變成0,0變成1,這種情況就叫做比特差錯。數據鏈路層提供了循環冗余檢驗CRC方法來檢測比特差錯,其主要使用了幀檢驗序列FCS來檢測比特錯誤。發送數據前先計算幀的數據部分得出FCS添加在數據部分後,接收端收到數據後添加上FCS後計算驗證。
需要註意的是數據鏈路層並沒有向網絡層提供可靠傳輸服務,傳輸差錯一類是比特差錯,還有一類是幀丟失、幀重復或幀失序。完整的傳輸錯誤控制是在TCP中實現的。

4. 點對點協議PPP
現在使用最為廣泛的就是PPP(Point-to-Point Protocol)協議,其主要負責用戶計算機到ISP進行通信時所使用的數據鏈路層協議:
技術分享
a. PPP協議的特點
-1. 簡單:PPP的首要需求就是“簡單”,不需要考慮糾錯、序號,這提供了很好的互操作性;
-2. 封裝成幀:PPP協議必須定義幀界定字符
-3. 透明傳輸
-4. 多種網絡層協議:PPP協議必須能夠支持多種網絡層協議,如IP、IPX等;
-5. 多種類型鏈路:支持串行/並行、同步/異步等;
***4/5其實是說PPP要對上對下都有很好的支持兼容性***
-6. 差錯控制
-7 檢測連接狀態:PPP協議要具有一種機制能夠及時(不超過幾分鐘)自動檢測鏈路是否處於正常工作狀態,當出現故障的鏈路隔了一段時間後重新恢復正常工作時,就特別需要有這種及時檢測功能。
-8 最大傳送單元MTU
-9 網絡層地址協商
-10 數據壓縮協商
不需要考慮糾錯、流量控制、序號、多點線路和半雙工或單工鏈路,PPP只支持全雙工鏈路。
b. PPP的幀格式
在繼續學習PPP之前,先來看看PPP協議的幀格式吧!
技術分享
其中PPP協議的幀界定字符由F-0x7E表示,A和C作為地址字段和控制字段,現在已經沒有實際意義。首部的兩個字節的協議字段指明數據中的協議類型,0x0021-IP數據報;0xC021-LCP數據;0x8021-NCP數據等。
為了實現透明傳輸,我們依然要使用字節填充的方法,只不過對於同步和異步傳輸方式不同。對於異步傳輸來說,我們還是使用一個轉義字符0x7D來進行;對於異步傳輸,由於是連續的比特流,我們使用零比特填充法,即每連續出現6個比特-1則添入一個比特-0,避免出現‘F‘,即
技術分享
c. PPP協議的組成
PPP協議主要分為三個部分:
-1. 將IP數據報封裝到串行鏈路的辦法,因為計算機內的I/O通信是並行的,而鏈路傳輸則是按比特流的串行,因此需要協議的封裝轉換,一般由網絡適配器完成;
-2. 一個用來建立、配置和測試數據鏈路連接的鏈路控制協議LCP(Link Control Protocol),通信雙方可以協商一些選項;
-3. 一套網絡控制協議NCP(Network Control Protocol),用於支持上層的不同的網絡協議;
PPP協議的工作狀態起止於鏈路靜止狀態,這時在用戶PC機和ISP的路由器之間並不存在物理層的連接。整個過程如圖:
技術分享
一個正常的工作過程開始於用戶通過選擇網絡連接的選項,然後用戶的PC機通過調制解調器呼叫路由器,路由器就能夠檢測到調制解調器發出的載波信號,在雙方建立了物理層的連接之後,PPP協議就進入“鏈路建立”狀態,其目的是建立鏈路層的LCP連接。
此時LCP開始發送配置請求幀,進行協商一些配置選項,包括鏈路上的最大幀長、所使用的鑒別協議,以及不適用的PPP幀中的地址和控制字段等。LCP的配置請求幀依舊是一個PPP幀,其協議字段置為LCP對應的代碼,而信息字段包含特定的配置請求。鏈路的另一端可以發送以下幾種響應中的一種:
-配置確認幀:所有選項都接受;
-配置否認幀:所有選項都理解但不能接受;
-配置拒絕幀:選項有的無法識別或不能接受,需要協商;
協商結束後雙方建立了LCP鏈路,接著就進入鑒別階段,在這一狀態下,只允許傳送LCP協議的分組、鑒別協議的分組以及監測鏈路質量的分組。若鑒別失敗,則轉到“鏈路終止”狀態,成功則進入“網絡層協議”狀態。
在“網絡層協議”狀態,PPP鏈路兩端的網絡控制協議NCP根據網絡層的不同協議互相交換網絡層特定的網絡控制分組,總之也許PPP協議兩端的網絡層可能運行不同的網絡層協議,但是都可以使用一個PPP協議進行通信。

二、使用廣播信道的以太網。
這裏我們主要來看看局域網的相關技術。由於以太網已經是事實上的局域網標準,我們就主要介紹以太網。廣播網絡的一個重要問題時當所有結點共享通信鏈路時,如何避免沖突,一般有隨機接入和受控接入兩種。實際中我們更多的使用是隨機接入,因此重點來介紹前者。這裏的核心只有一個:CSMA/CD。
CSMA/CD,即載波監聽多點接入/碰撞檢測的縮寫,
-多點接入:說明這是個總線網絡,許多計算機以多點接入的方式連接在一根總線上,協議的實質是“載波監聽”和“碰撞監測”;
-載波監聽:即“發送前先監聽”,每個站在發送數據前要先檢測一下總線上是否有其他站在發送數據,如果有,暫時不發送數據,等待信道空閑時再發送,總線上沒有“載波”,這裏只是一個習慣稱呼;
-碰撞檢測:即“邊發送邊監聽”,適配器邊發送數據邊檢測信道上的信號電壓,以便判斷自己在發送數據時其他站是否也在發送數據。
如果考慮上信號在鏈路上的傳播時延,那麽過程類似這樣;
技術分享
由上圖我們可以看出:
-1. CSMA/CD不可能同時進行發送和接受,因此是半雙工協議,即雙向交替通信;
-2. 每一個端點在自己發送數據之後的一小段時間內,存在著遭遇碰撞的可能性,這段時間最長為兩個單程最長時間,將這個時間成為“爭用期”,只有通過爭用期的“考驗”,才能肯定這次發送不會發生碰撞。
-3. 以太網把爭用期定位51.2微秒,如果是一個標準10M/s的帶寬的話,大概是512比特,也就是64字節,因此以太網規定了爭用期大小的幀為最小長度,所有比這小的幀都認為是碰撞導致的丟棄幀,因此以太網的幀最小為64字節。
CSMA/CD的要點為:
-1. 適配器從網絡層獲得一個分組,加上以太網的首部和尾部,組成以太網幀,放入適配器的緩存中,準備發送;
-2. 若適配器檢測到信道空閑,即在發送間隙9.6微秒約96個比特時間內沒有檢測到信道上有信號,就發送這個幀;若檢測到信道忙,則繼續檢測並等待信道轉為空閑(加上96比特時間),然後發送這個幀;
-3. 在發送過程中繼續檢測信道,若一直未檢測到碰撞,就順利把這個幀成功發送完畢;若檢測到碰撞,則中止數據發送,並發送人為幹擾信號;
-4. 在中止發送後,適配器就執行指數退避算法,等待r被的512比特時間後,返回到步驟(2);

計算機網絡【三】:數據鏈路層 【轉】