第04章 數據鏈路層
4.1 數據鏈路層要解決的三個基本問題
4.1.1 數據鏈路和幀
鏈路和數據鏈路的區別
鏈路(Link)是指的從一個節點到相鄰節點的一段物理線路(有線或無線),而中間沒有任何其他的交換節點。
數據鏈路(Data Link)則是另一個概念,這是因為當需要在一條線路上傳送數據時,除了必須有一條物理線路外,還必須有一些必要的通信協議來控制這些數據的傳輸。
數據鏈路和幀
數據鏈路層把網絡層交下來的數據封裝成幀發送到鏈路上,以及把接收到的幀中的數據取出並上交給網絡層。在因特網中,網絡層協議數據單元就是IP數據報(或簡稱為數據報、分組或包)。數據鏈路層封裝的幀,在物理層變成數字信號在鏈路上傳輸。
本章探討數據鏈路層,就不考慮物理層如何實現比特傳輸的細節,我們就可以簡單的認為數據幀通過數據鏈路由節點A發送到節點B。
4.1.2 數據鏈路層三個基本問題
封裝成幀
封裝成幀,就是在將網絡層的IP數據報的前后分別添加首部和尾部,這樣就構成了一個幀。
不同的數據鏈路層協議的幀的首部和尾部包含的信息有明確的規定,幀的首部和尾部有幀開始符和幀結束符,稱為幀定界符。接收端收到物理層傳過來的數字信號讀取到幀開始字符一直到幀結束字符,就認為接收到了一個完整的幀。
在數據傳輸中出現差錯時,幀定界符的作用更加明顯。
每一種數據鏈路層協議都規定了所能夠傳送的幀的數據部分長度的上限--即最大傳輸單元MTU(Maximum Transfer Unit),以太網的MTU為1500個字節。
封裝成幀,就是在將網絡層的IP數據報的前后分別添加首部和尾部,這樣就構成了一個幀。
不同的數據鏈路層協議的幀的首部和尾部包含的信息有明確的規定,幀的首部和尾部有幀開始符和幀結束符,稱為幀定界符。接收端收到物理層傳過來的數字信號讀取到幀開始字符一直到幀結束字符,就認為接收到了一個完整的幀。
在數據傳輸中出現差錯時,幀定界符的作用更加明顯。
每一種數據鏈路層協議都規定了所能夠傳送的幀的數據部分長度的上限--即最大傳輸單元MTU(Maximum Transfer Unit),以太網的MTU為1500個字節。
透明傳輸
幀開始符和幀結束符最好是不會出現在幀的數據部分的字符,通常我們電腦鍵盤能夠輸入的字符是ASCII字符代碼表中打印字符,在ASCII字符代碼表中,還有非打印控制字符,在非打印字符中有兩個字符專門用來做幀定界符,代碼SOH(Start Of Header)作為幀開始定界符,對應的二進制編碼為0000 0001,代碼EOT(End Of Transmission)作為幀結束定界符。
ASCII字符碼表
ASCII字符集中“頭標開始”和“傳輸結束”是非打印控制字符。
避免在用戶使用鍵盤輸入幀開始字符和幀結束字符。
當數據部分是非ASCII字符代碼表的文本文件時(比如二進制代碼的計算機程序或圖像等),情況就不同了。如果數據中的某一段二進制代碼正好和SOH或EOT幀定界符編碼一樣,接收端就會誤認為這就是幀的邊界。
現在就要想辦法讓接收端能夠區分幀中EOT或SOH是數據部分還是幀定界符,我們可以在數據部分出現的幀定界符編碼前面插入轉義字符,
如果傳輸的數據中,出現了幀開始字符和真結束字符,要添加轉義字符,告訴接收端后面是數據。
接收端收到后去掉轉義字符,收到發送數據,這就是透明傳輸。
不同的數據鏈路層協議,定義的轉義字符不一樣。
差錯檢驗
現實的通信鏈路都不會是理想的。這就是說,比特在傳輸過程中可能會產生差錯:1可能會變成0,而0也可能變成1,這就叫做比特差錯。
為了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須采用各種差錯檢測措施。目前在數據鏈路層廣泛使用了循環冗余檢驗CRC(Cyclic Redundancy Check)的差錯檢驗技術。
要想讓接收端能夠判斷幀在傳輸傳輸過程是否出現差錯,需要在傳輸的幀中包含用於檢測錯誤的信息,這部分信息就稱為幀校驗序列FCS(Frame Check Sequence)。
CRC運算示例
首先在要校驗的二進制數據M=101001后面添加n位0,再除以收發雙方事先商定好的n+1位的除數P,得出的商是Q,而余數是R(n位,比除數少一位),這個n位余數R就是計算出的FCS。
假如要得到3位幀校驗序列,就要在M后面添加3個0,就成為101001000,假定事先商定好的除數P=1101(4位),如圖4-10所示,做完除法運算后余數是001,001將會添加到幀的尾部作為幀校驗序列FCS,得到商Q=110101,這個商並沒什么用途。
4.2點到點信道的數據鏈路
點到點信道是指的一條鏈路上就一個發送端和接收端的信道,通常用在廣域網鏈路。
4.2.1 PPP協議的特點
簡單 不提供可靠傳輸,出錯后扔掉
封裝成幀 首部和尾部 幀開始符 幀結束符
透明傳輸 加轉義字符 收到后去掉轉移字符
差錯檢測 CRC計算FCS
支持多種網絡層協議 IPv4和IPv6網絡層協議都可以封裝到PPP幀中
多種類型鏈路 光纖 銅線 同步傳輸 異步傳輸 串行、並行鏈路均可
檢測連接狀態 檢測連接狀態
最大傳送單元 最大傳輸單元 1500字節
網絡層地址協商 能夠為撥號的一段分配IP地址,子網掩碼 網關和DNS
數據壓縮協商
4.2.2 PPP協議的組成
PPP協議有三個組成部分:
4.2.3 同步傳輸和異步傳輸
同步傳輸
同步傳輸(Synchronous Transmission)以數據幀為單位傳輸數據,可采用字符形式或位組合形式的幀同步信號,在短距離的高速傳輸中,該時鍾信號可由專門的時鍾線路傳輸,由發送端或接收端提供專用於同步的時鍾信號。計算機網絡采用同步傳輸方式時,常將時鍾同步信號(前同步碼)植入數據信號幀中,以實現接收端與發送端的時鍾同步。
前同步碼讓接收端找到碼元的邊界。
異步傳輸
異步傳輸(Asynchronous Transmission)以字符為單位傳輸數據,發送端和接收端具有相互獨立的時鍾(頻率相差不能太多),並且兩者中任一方都不向對方提供時鍾同步信號。
相對於同步傳輸,沒有一口氣傳,而是一段一段的傳,每一段帶有起始位和結束位。最后接收端也要組裝成完整的幀,交給網絡層。
4.2.4抓包查看PPP的幀首部
PPP首部三個字段
Address是地址字段
Control是控制字段
Protocol是協議字段
4.2.5 PPP協議幀格式
Address字段的值為0xff,0x表示后面的ff為十六進制數,寫成二進制為1111 1111,占一個字節的長度。點到點信道PPP幀中的地址字段形同虛設,可以看到沒有源地址和目標地址。
Control字段的值為0x03,寫成二進制為0000 0011,占一個字節長度。最初曾考慮以后對地址字段和控制字段的值進行其他定義,但至今也沒給出。
Protocol字段占2個字節,不同的值用來標識PPP幀內信息是什么數據。
4.2.6 PPP幀填充方式-透明傳輸
同步傳輸 以幀為單位傳輸PPP協議使用0比特填充
異步傳輸 以字節為單位傳輸PPP協議使用字符填充
異步傳輸使用字節填充
在異步傳輸的鏈路上,數據傳輸以字節為單位,PPP幀的轉義符定義為0x7D,並使用字節填充。
把信息字段中出現的每一個0x7E字節轉變成為2字節序列(0x7D,0x5E)。
若信息字段中出現一個0x7D的字節(即出現了和轉義字符一樣的比特組合),則把0x7D轉變成為2字節序列(0x7D,0x5D)。
同步傳輸使用零比特填充
在同步傳輸的鏈路上,數據傳輸以幀為單位,PPP協議采用零比特填充方法來實現透明傳輸。大家把PPP協議幀界定符0x7E寫成二進制01111110,也就是可以看到中間有連續的6個1,只要想辦法在數據部分不要出現連續的6個1,就肯定不會出現這界定符。具體辦法就是“零比特填充法”。
如果數據原來就是5個1+0,方面處理之后會有5個1+2個0
4.3廣播信道的數據鏈路
4.3.1 廣播信道的局域網
最初的局域網使用同軸電纜進行組網,總線型拓撲。
廣播信道使用帶沖突檢測的載波偵聽多路訪問( CSMA/CD )機制通信。CSMA/CD就是廣播信道使用的數據鏈路層協議,使用CSMA/CD協議的網絡就是以太網。
點到點鏈路就不用沖突檢測,因此沒必要使用CSMA/CD協議。
局域網是是范圍不大的網絡,以太網使用這種機制的叫以太網。
使用集線器組建的局域網也是廣播信道,是總線型拓撲,比總線結構更可靠,不會一會一處斷掉而影響其他。
4.3.2 以太網標准
以太網(Ethernet)是一種計算機局域網組網技術。IEEE制定的IEEE 802.3標准給出了以太網的技術標准,即以太網的介質訪問控制協議(CSMA/CD)及物理層技術規范(包括物理層的連線、電信號和介質訪問層協議的內容)。
在IEEE 802.3標准中,為不同的傳輸介質制定了不同的物理層標准,在這些標准中前面的數字表示傳輸速度,單位是“Mbps”,最后的一個數字表示單段網線長度(基准單位是100m),Base表示“基帶”的意思。
4.3.3 CSMA/CD協議
總線型網絡使用CSMA/CD協議進行通信,即帶沖突檢測的載波偵聽多點接入技術。
即便檢測出總線上沒有信號,開始發送數據后也有可能和迎面而來的信號在鏈路上發生碰撞。
比如,A計算機發送的信號和B計算機發送的信號在鏈路C處發生碰撞,碰撞后的信號相互疊加,在總線上電壓變化幅度將會增加,發送方檢測到電壓變化超過一定的門限值時,就認為發生沖突,這就是沖突檢測。
使用CSMA/CD協議的以太網不可能進行全雙工通信而只能進行雙向交替通信(半雙工通信)。
4.3.4 以太網最短幀
為了能夠檢測到正在發送的幀在總線上是否產生沖突,以太網的幀不能太短,如果太短就有可能檢測不到自己發送的幀產生了沖突。下面咱們探討以太網的幀最短應該是多少字節。
下圖因為幀太短不能檢測到自己發的幀是否發生了沖突
以太網設計最大端到端長度為5km(實際上的以太網覆蓋范圍遠遠沒有這么大),單程傳播時延為大約為25.6μs,往返傳播時延為51.2μs,10M標准以太網最小幀為:
10Mb/s×51.2μs =107b/s×51.2×10-6s=512b
512比特也就是64字節,這就意味着以太網發送數據幀如果前64字節沒有檢測出沖突,后面發送的數據就一定不會發生沖突。換句話說,如果發生碰撞,就一定在發送前64字節之內。由於一旦檢測出沖突就立即終止發送,這時發送的數據一定小於64字節,因此凡是長度小於64字節的幀都是由於沖突而異常終止的無效幀,只要收到了這種無效幀,就應當立即將其終止。
4.3.5 沖突解決方法--退避算法
總線型網絡中的計算機數量越多,在鏈路上發送數據產生沖突機會就多。
計算機要想知道發送的幀在鏈路上是否發生碰撞必須等待2τ,2τ稱為爭用期。
以太網使用截斷二進制指數退避(truncated binary exponential backoff)算法來解決碰撞問題。
1)確定基本退避時間,它就是爭用期2τ。以太網把爭用期定為51.2μs。對於10Mb/s以太網,在爭用期內可發送512bit,即64字節。也可以說爭用期是512比特時間。1比特時間就是發送1比特所需的時間。所以這種時間單位與數據率密切相關。
2)從離散的整數集合[0,1,…,(2k-1)]中隨機取出一個數,記為r。重傳應推后的時間就是r倍的爭用期。上面的參數k按下面的公式計算:
k=Min[重傳次數,10]
可見當重傳次數不超過10時,參數k等於重傳次數;但當重傳次數超過10時,
k就不再增大而一直等於10。
3)當重傳達16次仍不能成功時(這表明同時打算發送數據的站太多,以致連續發生沖突),則丟棄該幀,並向高層報告。
4.3.6 以太網幀格式
常用的以太網MAC幀格式有兩種標准,一種是EthernetV2標准(即以太網V2標准),另一種是IEEE的802.3標准。使用得最多的是以太網V2的MAC幀格式。
Ethernet II的幀比較簡單,由五個字段組成。
以太網沒有幀結束符
前兩個字段分別為6字節長的目的MAC地址和源MAC地址字段。
第三個字段是2字節的類型字段,用來標志上一層使用的是什么協議,以便把收到的MAC幀的數據上交給上一層的這個協議。第四個字段是數據字段,其長度在46到1500字節之間。
最后一個字段是4字節的幀檢驗序列FCS(使用CRC檢驗)
以太網沒有幀結束符,由曼徹斯特編碼可知結束
當數據字段的長度小於46字節時,數據鏈路層就會在數據字段的后面加入一個整數字節的填充字段,以保證以太網的MAC幀長不小於64字節,接收端還必須能夠將添加的字節去掉。
IEEE802.3標准規定凡出現下列情況之一的即為無效的MAC幀:
-
幀的長度不是整數個字節。
-
用收到的幀檢驗序列FCS查出有差錯。
-
收到的幀的MAC客戶數據字段的長度不在46-1500字節之間。考慮到MAC幀首部和尾部的長度共有18字節,可以得出有效的MAC幀長度為64-1518字節之間。
對於檢查出的無效MAC幀就簡單地丟棄。以太網不負責重傳丟棄的幀。
4.3.7 以太網信道利用率
利用率是指的發送數據的時間占整個時間的比例。
如圖所示,平均發送一幀所需要的時間,經歷了n倍爭用期2τ,T0為發送該幀所需時間,τ為該幀傳播時延。
有沖突時信道利用率為:
從公式可以看出,要想提高信道利用率最好是n為0,這就意味着以太網上的各個計算機發送數據不會產生碰撞(這顯然已經不是CSMA/CD,而需要一種特殊的調度方法),並且能夠非常有效的利用網絡的傳輸資源,即總線一旦空閑就有一個站立即發送數據。這種情況算出來的信道利用率是極限信道利用率。
要想提高極限信道利用率就要降低公式中的
比值。
τ值和以太網連線的長度有關,這就意味着τ值要小, 以太網網線的長度就不能太長。帶寬一定的情況下T0和幀的長度有關,這就意味着,以太網的幀不能太短,信道利用率低。
4.3.8 網卡的作用
網卡是工作在鏈路層和物理層的網絡組件,是局域網中連接計算機和傳輸介質的接口,不僅能實現與局域網傳輸介質之間的物理連接和電信號匹配,還涉及幀的發送與接收、幀的封裝與拆封、幀的差錯校驗、介質訪問控制(以太網使用CSMA/CD協議)、數據的編碼與解碼以及數據緩存的功能等。
4.3.9 MAC地址
在廣播信道實現點到點通信,這就需要網絡中的每個網卡有一個地址。這個地址稱為物理地址或MAC地址(因為這種地址用在MAC幀中)。IEEE802標准為局域網規定了一種48位的全球地址。
這種6字節的MAC地址已被固化在網卡的ROM中。因此,MAC地址也叫作硬件地址(hardware address)或物理地址。當這塊網卡插入(或嵌入)到某台計算機后,網卡上的MAC地址就成為這台計算機的MAC地址了。
網卡有過濾功能,適配器從網絡上每收到一個MAC幀就先用硬件檢查MAC幀中的目的地址。如果是發往本站的幀則收下,然后再進行其他的處理。否則就將此幀丟棄,不再進行其他的處理。這樣做就不浪費主機的處理機和內存資源。這里“發往本站的幀”包括以下三種幀:
-
單播(unicast)幀(一對一),即收到的幀的MAC地址與本站的硬件地址相同。
-
廣播(broadcast)幀(一對全體),即發送給本局域網上所有站點的幀(全1地址)。
發廣播問10.7.87.23的MAC地址,使用ARP協議
- 多播(multicast)幀(一對多),即發送給本局域網上一部分站點的幀。
4.3.10 實戰:查看和更改MAC地址
4.4擴展以太網
4.4.1集線器
傳統以太網最初是使用粗同軸電纜,后來演進到使用比較便宜的細同軸電纜,最后發展為使用更便宜和更靈活的雙絞線。
1990年IEEE制定出星形以太網10BASE-T的標准802.3i。“10”代表10Mb/s的數據率,BASE表示連接線上的信號是基帶信號,T代表雙絞線。
10BASE-T以太網的通信距離稍短,每個站到集線器的距離不超過100m。
集線器和網線一樣工作在物理層,相當於把信號廣播到所有端口。
4.4.2計算機數量和距離上擴展
獨立的沖突域
可以將多個集線器連接在一起形成一個更大的以太網,這不僅可以擴以太網中計算機的數量,還可以擴展以太網的覆蓋范圍。使用主干集線器連接教室中集線器,形成一個大的以太網,計算機之間的最大距離可以達到400米。
要是兩個集線器的距離超過100米,還可以光纖從將兩個集線器連接起來,集線器之間通過光纖連接,可以將相距幾千米的集線器連接起來,需要通過光電轉換器,實現光信號和電信號的相互轉換。
4.4.3使用網橋優化以太網
大的沖突域
利用網橋優化以太網
A與B通信的時候,D與E可以通信,想成兩個沖突域,但是增加了延遲。
網橋特點
4.4.4網橋自動構建MAC地址表
使用網橋優化以太網,對於網絡中的計算機是沒有感覺的,也就是以太網中的計算機是不知道網絡中有網橋存在,也不需要網絡管理員配置網橋的MAC地址表,因此我們稱網橋是透明橋接。
網橋接入以太網時,MAC地址表示空的,網橋會在計算機通信過程中自動構建MAC地址表,這稱為“自學習”。
(1)自學習
網橋的接口收到一個幀,就要檢查MAC地址表中與收到的幀源MAC地址有無匹配的項目,如果沒有,就在MAC地表中添加該接口和該幀的源MAC地址對應關系以及進入接口的時間,如果有,則把原有的項目進行更新。
(2)轉發幀
網橋接口收到一個幀,就檢查MAC地址表中有沒有該幀目標MAC地址對應端口,如果有,就會將該幀轉發到對應的端口,如果沒有,則將該幀轉發到全部端口(接收端口除外)。
4.4.4網橋自動構建MAC地址表
4.4.5多接口網橋--交換機
隨着技術的發展,網橋接口增多,網橋的接口就直接連接計算機了,網橋就發展成現在的交換機。
使用交換機組網與集線器組網相比有以下特點:
獨享帶寬
交換機的每個端口獨享帶寬,10M交換機,則每個端口帶寬是10M,24口10M交換機,交換機的總體交換能力是240M,這和集線器不同。
安全
使用交換機組建的網絡比集線器安全,比如計算機A給計算機B發送的幀,以及計算機D給計算機C發送的幀,交換機根據MAC地址表只轉發到目標端口,E計算機根本收不到其他計算機的通信的數字信號,即便安裝了抓包工具也沒用。
全雙工通信
交換機接口和計算機直接相連,計算機和交換機之間的鏈路可以使用全雙工通信。
全雙工不再使用CSMA/CD協議
交換機接口和計算機直接相連接,使用全雙工通信數據鏈路層就不需要使用CSMA/CD協議,但我們還是稱交換機組建的網絡是以太網,是因為幀格式和以太網一樣。
接口可以工作在不同的速率
轉發廣播幀到所有端口
集線器是沖突域
交換機是廣播域
路由器隔絕廣播
4.4.6實戰:查看交換機MAC地址表
交換機能夠學習根據幀的源MAC地址構造MAC地址表
4.5高速以太網
4.5.1 100M以太網
100BASE-T是在雙絞線上傳送100Mb/s基帶信號的星型拓撲的以太網,仍使用IEEE802.3的CSMA/CD協議,它又稱為快速以太網(FastEthernet)。
使用交換機組建的100BASE-T以太網,可在全雙工方式下工作而無沖突發生。因此,CSMA/CD協議對全雙工方式工作的快速以太網是不起作用的。因為其幀格式和以太網一樣,所以依然稱交換機組件的網絡為以太網。
以太網的最短幀和帶寬和鏈路長度有關,100M以太網比10M以太網速率提高10倍,要想和10M以太網兼容,就要確保最短幀也是64字節,那就將電纜最大長度由1000m降到100m,因此以太網的爭用期依然是5.12μs,最短幀依然是64字節。
快速以太網100M帶寬,有以下標准:
4.5.2吉比特以太網
吉比特以太網的標准IEEE802.3 z有以下幾個特點:
允許在1Gb/s下全雙工和半雙工兩種方式工作。
使用IEEE802.3協議規定的幀格式。
在半雙工方式下使用CSMA/CD協議(全雙工方式不需要使用CSMA/CD協議)。
與10BASE-T和100BASE-T技術向后兼容。
吉比特以太網1000M帶寬,有以下標准:
吉比特以太網工作在半雙工時,就必須進行碰撞檢測,數據速率提高了,要想和10M以太網兼容,就要確保最短幀也是64字節,這只能減少最大電纜長度,以太網最大電纜長度就要縮短到10m,短到幾乎沒有什么實用價值。吉比特以太網為了增加最大傳輸距離,將最短幀增加到4096比特。
當數據幀長度小於512字節(即4096比特)時,在FCS域后面添加“載波延伸” 域。主機發送完短數據幀之后,繼續發送載波延伸信號,沖突信號傳回來時,發送端就能感知到了。
如果發送的數據幀都是64字節的短報文,那么鏈路的利用率就很低,因為“載波延伸”域將占用大量的帶寬。
千兆以太網標准中,引入了“分組突發”(packet bursting)機制來改善這個問題。這就是當很多短幀要發送時,第一個短幀采用上面所說的載波延伸的方法進行填充,隨后的一些短幀則可以一個接一個發送,它們之間只需要留有必要的幀間最小間隔即可。
4.5.3 10吉比特以太網
10GE的幀格式與10Mb/s,100Mb/s和1Gb/S以太網的幀格式完全相同。10GE還保留了802.3標准規定的以太網最小和最大幀長。
由於數據率很高,10GE不再使用銅線而只使用光纖作為傳輸媒體。它使用長距離(40km)的光收發器與單模光纖接口,以便能夠工作在廣域網和城域網的范圍。
10GE只工作在全雙工模式,因此不存在爭用問題,也不使用CSMA/CD協議。這就使得10GE的傳輸距離不再受碰撞檢測的限制而大大提高了。
10GE的物理層有以下標准: