目錄
數據鏈路層標准
數據鏈路層術語
信道
鏈路定義
三個基本問題
兩種重要的措施
CSMA/CD 協議
以太網提供的服務
MAC幀
擴展局域網
計算機通過適配器和局域網進行通信
集線器
網橋
網絡拓撲
交換機
虛擬局域網VLAN
虛擬局域網使用的以太網幀格式
發送一幀所需的平均時間
LAN 的無線協議
LAN 的以太網協議
WAN 的點對點協議
PPPoE 的點對點協議
數據鏈路層標准

數據鏈路層術語

信道
兩種信道方式:
點對點信道:
通信方式:
使用一對一的點對點通信方式
PPP協議:
幀首部:

應滿足的需求:
-
-
-
- 簡單(這是首要的要求)
- 封裝成幀
- 透明性
- 多種網絡層協議
- 多種類型鏈路
- 差錯檢測
- 檢測連接狀態
- 最大傳送單元
- 網絡層地址協商
- 數據壓縮協商
-
-
不需要的功能:
-
-
-
- 糾錯
- 流量控制
- 序號
- 多點線路
- 半雙工或單工鏈路
-
-
三個組成部分:
-
-
-
- 一個將 IP 數據報封裝到串行鏈路的方法.
- 鏈路控制協議 LCP (Link Control Protocol).
- 網絡控制協議 NCP (Network Control Protocol).
-
-
PPP 協議工作狀態:

透明傳輸問題:
字符填充:
-
-
-
- 將信息字段中出現的每一個0x7E字節轉變成為2字節序列(0x7D, 0x5E).
- 若信息字段中出現一個0x7D的字節,則將其轉變成為2字節序列(0x7D, 0x5D).
- 若信息字段中出現ASCII碼的控制字符(即數值小於0x20的字符),則在該字符前面要加入一個0x7D字節,同時將該字符的編碼加以改變.
-
-
零比特填充:
方法:
-
-
-
-
- 發送時,只要發現有5個連續1.則立即填入一個0
- 接受時,對幀中的比特流進行掃描.每當發現5個連續1時,就把這5個連續1后的一個0刪除
-
-
-
注意:
PPP協議用在SONET/SDH鏈路時,使用同步傳輸(一連串的比特連續傳送).這時PPP協議采用零比特填充方法來實現透明傳輸
廣播信道:
通信方式:使用一對多的廣播通信方式
注意:因此必須使用專用的共享信道協議來協調這些主機的數據發
信道划分:
- 靜態划分信道:
- 頻分復用
- 時分復用
- 波分復用
- 碼分復用
- 動態划分信道:
- 動態媒體接入控制(多點接入),隨機接入
- 動態媒體接入控制(多點接入),受控接入
鏈路定義
鏈路(link) 是一條無源的點到點的物理線路段,中間沒有任何其他的交換結點
數據鏈路(data link) 除了物理線路外,還必須有通信協議來控制這些數據的傳輸.若把實現這些協議的硬件和軟件加到鏈路上,就構成了數據鏈路.
三個基本問題
封裝成幀:
在一段數據的前后分別添加首部和尾部,然后就構成了一個幀.確定幀界限
透明傳輸:
定義:
數據在傳輸中為透明的
解決透明傳輸問題:
-
- 發送端的數據鏈路層在數據中出現控制字符"SOH"或"EOT"的前面插入一個轉義字符"ESC"(其十六進制編碼是 1B).
- 字節填充(byte stuffing)或字符填充(character stuffing)━接收端的數據鏈路層在將數據送往網絡層之前刪除插入的轉義字符
- 如果轉義字符也出現數據當中,那么應在轉義字符前面插入一個轉義字符.當接收端收到連續的兩個轉義字符時,就刪除其中前面的一個
差錯控制:
- 循環冗余檢驗
- 幀檢驗序列 FCS
兩種重要的措施
采用較為靈活的無連接的工作方式,即不必先建立連接就可以直接發送數據
以太網對發送的數據幀不進行編號,也不要求對方發回確認
CSMA/CD 協議
定義:
載波監聽多點接入/碰撞檢測CSMA/CD
沖突:

沖突受控:

沖突爭用:

做法:
第一步,先聽后發(每個站在發送數據前先要檢測一下總線上是否有其他計算機在發送數據)
第二步,邊聽邊發(每個站在發送數據時要檢查是否發送碰撞)
第三步,沖突停止(當發生碰撞時候雙方要立馬停止發送數據,並發送人為干擾信號)
第四步,隨機重發(然后依據退避算法重新發送數據)
傳播時延對載波監聽:

人為干擾信號:

特點:
- 一個站點不可能同時發送數據和接收數據
- 多計算機以多點接入的方式連接在一根總線上
退避算法:
- 確定基本退避時間,一般是取為爭用期 2τ
- 定義重傳次數 k,k = Min[重傳次數, 10].從整數集合[0,1,…, (2的k-1次方減去1)]中隨機地取出一個數記為r.重傳所需的時延就是r 倍的的退避時間
- 當重傳達 16 次仍不能成功時即丟棄該幀,並向高層報告
爭用期:
- 從發送方傳送數據到接受方,並由接收方返回數據到發送方的時間
- 以太網取51.2s 為爭用期的長度,在爭用期內可發送512 bit,即 64 字節.在爭用期內可發送數據若前 64 字節沒有發生沖突,則后續的數據就不會發生沖突,若接受到的幀小於64字節直接丟棄
CSMA/CD 發送流程:

CSMA/CD 接收流程:

以太網提供的服務
以太網提供的服務是不可靠的交付,即盡最大努力的交付.當目的站收到有差錯的數據幀時就丟棄此幀,其他什么也不做.差錯的糾正由高層來決定.如果高層發現丟失了一些數據而進行重傳,但以太網並不知道這是一個重傳的幀,而是當作一個新的數據幀來發送.
MAC幀
MAC幀格式:

MAC 幀類型字段值及其意思:
- 0x0000 - 0x05DC IEEE 802.3 長度
- 0x0101 - 0x01FF 實驗
- 0x0600 XEROX NS IDP
- 0x0660
- 0x0661 DLOG
- 0x0800 網際協議(IP)
- 0x0801 X.75 Internet
- 0x0802 NBS Internet
- 0x0803 ECMA Internet
- 0x0804 Chaosnet
- 0x0805 X.25 Level 3
- 0x0806 地址解析協議(ARP : Address Resolution Protocol)
- 0x0808 幀中繼 ARP (Frame Relay ARP) [RFC1701]
- 0x6559 原始幀中繼(Raw Frame Relay) [RFC1701]
- 0x8035 動態 DARP (DRARP:Dynamic RARP)反向地址解析協議(RARP:Reverse Address Resolution Protocol)
- 0x8037 Novell Netware IPX
- 0x809B EtherTalk
- 0x80D5 IBM SNA Services over Ethernet
- 0x80F3 AppleTalk 地址解析協議(AARP:AppleTalk Address Resolution Protocol)
- 0x8100 以太網自動保護開關(EAPS:Ethernet Automatic Protection Switching)
- 0x8137 因特網包交換(IPX:Internet Packet Exchange)
- 0x814C 簡單網絡管理協議(SNMP:Simple Network Management Protocol)
- 0x86DD 網際協議v6 (IPv6,Internet Protocol version 6)
- 0x880B 點對點協議(PPP:Point-to-Point Protocol)
- 0x880C 通用交換管理協議(GSMP:General Switch Management Protocol)
- 0x8847 多協議標簽交換(單播) MPLS:Multi-Protocol Label Switching <unicast>)
- 0x8848 多協議標簽交換(組播)(MPLS, Multi-Protocol Label Switching <multicast>)
- 0x8863 以太網上的 PPP(發現階段)(PPPoE:PPP Over Ethernet <Discovery Stage>)
- 0x8864 以太網上的 PPP(PPP 會話階段) (PPPoE,PPP Over Ethernet<PPP Session Stage>)
- 0x88BB 輕量級訪問點協議(LWAPP:Light Weight Access Point Protocol)
- 0x88CC 鏈接層發現協議(LLDP:Link Layer Discovery Protocol)
- 0x8E88 局域網上的 EAP(EAPOL:EAP over LAN)
- 0x9000 配置測試協議(Loopback)
- 0x9100 VLAN 標簽協議標識符(VLAN Tag Protocol Identifier)
- 0x9200 VLAN 標簽協議標識符(VLAN Tag Protocol Identifier)
- 0xFFFF 保留
Mac地址
地址分配:
-
- IEEE 的注冊管理機構RA負責向廠家分配地址字段的前三個字節(即高位24位)
- 地址字段中的后三個字節(即低位24位)由廠家自行指派,稱為擴展標識符,必須保證生產出的適配器沒有重復地址
定義:
硬件地址又稱為物理地址,或 MAC 地址
MAC幀:
-
- 單播(unicast)幀(一對一)
- 廣播(broadcast)幀(一對全體)
- 多播(multicast)幀(一對多)
- 以太網配適器還可以設置為一種特殊方式,混雜范式,既工作時,只要聽到有幀在以太網上傳輸都悄悄的接收下來
兩種標准:
-
- DIX Ethernet V2 標准(最常用的 MAC 幀是以太網 V2 的格式)
- IEEE 的 802.3 標准
無效的 MAC 幀:
-
- 數據字段的長度與長度字段的值不一致
- 幀的長度不是整數個字節
- 用收到的幀檢驗序列 FCS 查出有差錯
- 數據字段的長度不在 46 ~ 1500 字節之間
幀間最小間隔:
-
- 定義: 幀間最小間隔為9.6 s,相當於96 bit的發送時間
- 目的: 一個站在檢測到總線開始空閑后,還要等待9.6 s 才能再次發送數據.這樣做是為了使剛剛收到數據幀的站的接收緩存來得及清理,做好接收下一幀的准備
擴展局域網
在物理層擴展局域網(用集線器擴展局域網)
優點:
-
- 使原來屬於不同碰撞域的局域網上計算機能夠進行跨碰撞域的通信
缺點:
-
- 碰撞域增大了,但總的吞吐量並未提高
- 若不同碰撞域使用不同數據率,則就不能用集線器將它們互連起來
在數據鏈路層擴展局域網(用網橋擴展局域網)
優點:
-
- 擴大了局域網覆蓋的地理范圍
- 過濾通信量
- 擴大了物理范圍
- 提高了可靠性
- 可互連不同物理層,不同MAC子層和不同速率(如10 Mb/s和100Mb/s以太網)的局域網
- 網橋使各網段成為隔離開的碰撞域
缺點:
-
- 存儲轉發增加了時延
- 在MAC 子層並沒有流量控制功能
- 具有不同MAC子層的網段橋接在一起時時延更大
- 網橋只適合於用戶數不太多(不超過幾百個)和通信量不太大的局域網,否則有時還會因傳播過多的廣播信息而產生網絡擁塞.這就是所謂的廣播風暴
在物理層上和在數據鏈路層上擴展局域網的不同:
- 集線器在轉發幀時,不對傳輸媒體進行檢測
- 網橋在轉發幀之前必須執行CSMA/CD 算法.若在發送過程中出現碰撞,就必須停止發送和進行退避
計算機通過適配器和局域網進行通信

集線器

網橋
轉發表中登記以下三個信息:
- 源地址
- 接口號
- 時間
透明網橋自學習算法:
處理接收到的數據幀流程:

要求:
每隔一段時間內更新下轉發表
生成樹算法:
-
- 方法:
- 互連在一起的網橋在進行彼此通信后,就能找出原來的網絡拓撲一個子集.在這個子集里,整個連通的網絡中不存在回路,即在任何兩個站之間只有一條路徑
- 為了得出能夠反映網絡拓撲發生變化時的生成樹,在生成樹上的根網橋每隔一段時間還要對生成樹的拓撲進行更新
- 目的:
- 為了避免產生轉發的幀在網絡中不斷地兜圈子
- 方法:
源路由網橋:
- 目的:
- 找出最佳路由路徑
- 方法:
- 源站以廣播方式向欲通信的目的站發送一個發現幀,每個發現幀都記錄所經過的路由
- 發現幀到達目的站時就沿各自的路由返回源站
- 源站在得知這些路由后,從所有可能的路由中選擇出一個最佳路由
- 凡從該源站向該目的站發送的幀的首部,都必須攜帶源站所確定的這一路由信息
網絡拓撲
星形拓撲:
由於集線器的出現和雙絞線大量用於局域網,此拓撲結構非常廣泛得到應用
環形拓撲:
- 在邏輯環拓撲中,各節點依次接收幀.若幀並非發往該節點,它將把幀傳遞到下一節點.這將允許環使用一種受控介質訪問控制技術,稱為令牌傳遞
- 邏輯環拓撲中的節點從環中取下幀,檢查地址,如果它並非發往該節點則將它發回環上
- 在環中,源節點和目的節點之間的環一周的所有節點都會檢查該幀
總線拓撲:
- 使多個節點可通過使用相同的共享介質相互通信
- 一個時刻只有一個終端在發送數據
- 每個節點都可以看見介質上的所有幀,但是只有幀的目的節點可處理幀內容
- 使用的介質訪問控制方法通常為 CSMA/CD或 CSMA/CA
點對點拓撲:
- 點對點拓撲將兩個節點直接連接在一起
- 虛電路是在網絡中的兩個網絡設備間創建的邏輯連接
交換機
交換式集線器常稱為以太網交換機(switch)或第二層交換機(表明此交換機工作在數據鏈路層)以太網交換機通常都有十幾個接口.因此,以太網交換機實質上就是一個多接口的網橋,可見交換機工作在數據鏈路層
虛擬局域網VLAN
由一些局域網網段構成的與物理位置無關的邏輯組
每一個VLA 的幀都有一個明確的標識符,指明發送這個幀的工作站是屬於哪一個VLAN
利用以太網交換機實現虛擬局域網
這些網段具有某些共同的需求
虛擬局域網使用的以太網幀格式

發送一幀所需的平均時間

LAN 的無線協議

LAN 的以太網協議


WAN 的點對點協議

PPPOE協議
前言
PPPOE(PPP over Ethernet, RFC2516,值得注意的是此RFC不是Standard而是Information類型的)定義了如何在以太網上傳輸PPP數據包的方法,目前流行的寬帶類型
ADSL就是通過PPPoE實現的.
通信過程概述
建立PPPOE通道(ADSL撥號)分兩個階段:發現階段和PPP會話階段.
在發現階段,以太網上的客戶機要找到一個訪問集中器(AC,Access Concentrator),就是ADSL MODEM,一般家用時一般就只有一個AC;但如果是一個以太網內可能會有多條ADSL,就會有多個AC,這時客戶機就從中選擇一個.發現階段完成后,客戶機和AC都得到要在以太網上建立PPP通道的相關信息.
發現階段是無狀態的,也就是兩邊都不用保存以前的狀態信息;只有PPP會話開始后,雙方就要建立一個虛擬的PPP通信接口,具體在Linux下會有ppp0網卡,在windows下網絡連接中增加ADSL的接口.
協議頭格式
協議值
PPPOE數據是直接在以太頭數據之上的,其等級和ARP、IP等是相同的,在以太頭的類型字段中,用0x8863 表示是PPPOE發現階段數據,用0x8864表示PPP會話階段數據,如下所示.(類比:0x0800表示IP數據,0x0806表示ARP數據)

PPPOE協議頭

PPPOE協議頭有6個字節,正好和14字節的以太頭實現了4字節對齊,包括以下字段:
-
-
- VER版本號,4位,必須為0x01
- TYPE類型,4位,必須是0x01
- CODE:8位,在發現階段和PPP會話階段有不同的定義
- SESSION_ID回話標識:16位,用來定義一個PPP會話,在發現過程中定義
- LENGTH:16位,表示負載長度,不包括以太頭和PPPOE頭.
-
發現階段
PPPOE發現階段數據的以太類型是0x8863.
TAG
在發現階段用於交換客戶機和AC的信息,建立PPPOE通道,負載信息都是PPPOE信息,並沒有上層協議數據.
發現階段的負載稱為TAG,一個TAG信息格式如下,負載信息中可能會包含多個TAG:

TAG_TYPE:16位,TAG類型(TAG_TYPE可取以下值(注意第一字節為2表示是錯誤信息))
-
-
- 0x0000 End-Of-List
- 0x0101 Service-Name
- 0x0102 AC-Name
- 0x0103 Host-Uniq
- 0x0104 AC-Cookie
- 0x0105 Vendor-Specific
- 0x0110 Relay-Session-Id
- 0x0201 Service-Name-Error
- 0x0202 AC-System-Error
- 0x0203 Generic-Error
-
TAG_LENGTH:16位,表示TAG_VALUE部分的長度TAG_VALUE:TAG值
PPPOE主動發現初始包
PPPOE主動發現初始包(PPPoE Active Discovery Initiation, PADI)由客戶機發出,以太頭中的目的地址是以太廣播地址FF:FF:FF:FF:FF:FF,PPPOE頭中的CODE為0x09,SESSION_ID值必須為0,負載部分必須只包含一個Service-Name類型的TAG表示請求的服務類型,另外可以包含其他TAG,整個PPPOE包不能超過1484字節,這樣省出的16字節可以由ADSL中繼設備添加中繼TAG.
一個PADI包的例子為:

PPPOE主動發現提議包
PPPOE主動發現提議包(PPPoE Active Discovery Offer, PADO)由AC發出,用來回應客戶機的PADI包,以太頭中的目的地址是客戶機的MAC地址,PPPOE頭中的CODE為0x07,SESSION_ID值必須為0,負載部分必須包含一個AC-Name類型的TAG,用來指示本AC的名稱,一個在PADI包中指定的Service-Name的TAG,另外可以包含其他Service-Name的TAG.如果AC不對該客戶機提供服務,AC就不回應PADO包. 一個PADO包的例子為:

PPPOE主動發現請求包
PPPOE主動發現請求包(PPPoE Active Discovery Request, PADR)由客戶機發出,因為可能會有多個AC對客戶機發出的PADI包回應了PADO包,客戶機從回應的PADO包中選擇一個AC發送PADR包,以太頭中的目的地址是該AC的MAC地址,PPPOE頭中的CODE為0x19,SESSION_ID值必須為0,負載部分必須只包含一個Service-Name類型的TAG表示請求的服務類型,另外可以包含其他TAG.
PPPOE主動發現會話確認包
PPPOE主動發現會話確認包(PPPoE Active Discovery Session-confirmation, PADS)由AC發出,收到客戶機的PADR包后,AC將產生一個SEESSION_ID值用來標志本次PPP會話,以PADR包方式發送給客戶機.以太頭中的目的地址是客戶機的MAC地址,PPPOE頭中的CODE為0x65,SESSION_ID值必須為所生成的那個SESSION_ID,負載部分必須只包含一個Service-Name類型的TAG,表示該服務類型被AC接受,另外可以包含其他TAG.如果AC不接受PADR中的Server-Name,PADS中則包含一個Service-Name-Error類型的TAG,這時SESSION_ID設置為0.
PPPOE主動發現停止包
PPPOE主動發現停止包(PPPoE Active Discovery Terminate, PADT)表示PPPOE會話過程的結束,AC和客戶機都可以主動發出.以太頭中的目的地址是對方的MAC地址,PPPOE頭中的CODE為0xa7,SESSION_ID值必須為PPPOE會話過程的SESSION_ID,不需要TAG.
PPP會話階段
在PPP會話階段,PPP包被封裝在PPPOE以太幀中,以太包目的地址都是單一的,以太協議為0x8864,PPPOE頭的CODE必須為0,SESSION_ID必須一直為發現階段協商出的SEESION_ID值,PPPOE的負載是整個PPP包,PPP包前是兩字節的PPP協議ID值.
一個PPPOE會話過程包的例子為:

注意:由於PPPOE頭是6字節,PPP協議ID號兩個字節,一共要占用8個字節,而以太網的MTU值為1500,所以上層PPP負載數據不能超過1492字節,所以PPP協商時協商的最大接收單元值不能超過1492字節,也就是相當於在PPPOE環境下的MTU是1492字節.
ADSL撥號過程簡述
客戶機啟動撥號程序,發送PADI包,ADSL MODEM回應PADO包,客戶機再發送PADR包,ADSL MODEM回應PADS包后建立PPPOE通道,隨后客戶機進行普通的PPP協議撥號過程,不過PPP數據包都是包裝進以太幀中的,撥號成功后客戶機和服務器之間建立了PPP通道,ADSL MODEM起到將以太幀轉換為PPP包的作用.ADSL雖然是用電話線,但所用頻率不是通話用的頻率,所以ADSL撥號不影響打電話.通信結束后,會發送PADT斷開PPPOE通道.
結論
由於ADSL的大面積使用,PPPOE也隨之應用,了解其通信協議和數據格式對於底層驅動的開發、協議分析、訪問控制等是必要的,現在不論在windows還是linux下都可以很好地支持PPPOE.
