使用廣播信道的數據鏈路層
廣播信道可以進行一對多通信。
局域網技術在計算機網絡中占有非常重要的地位。
局域網的數據鏈路層
局域網最主要的特點是:網絡為一個單位所擁有,且地理范圍和站點數目有限。局域網主要有如下一些主要優點:
- 具有廣博功能,從一個站點可以很方便的訪問全網。局域網上的主機可共享連接在局域網上的各種硬件資源和軟件資源。
- 便於系統的擴展和逐漸演變,各設備的位置可以靈活調整和改變。
- 提高了系統的可靠性,可用性和生存性。
局域網可以按照網絡拓撲進行分類,
適配器的作用
計算機與外界局域網的連接是通過通信適配器進行的,網絡接口卡又稱網卡。適配器與局域網之間的通信是通過電纜或者雙絞線以串行傳輸方式進行,適配器與計算機之間的通信是以並行方式進行通信,因此,適配器的一個重要功能就是進行數據串行傳輸和並行傳輸之間的轉換,除此之外,適配器還要實現以太網的協議
適配器在接受和發送各種數據幀的時候,不使用計算機的CPU,這時計算機中的CPU可以處理其他任務。當適配器收到有差錯的數據幀時,就把這個幀直接丟棄掉而並不通知計算機。當適配器收到正確的幀的時候,它會使用中斷來通知計算機,並交付協議棧中的網絡層,當計算機要發送IP數據報的時候,就由協議棧把IP數據包向下交給適配器(數據鏈路層),組裝成幀后發送到局域網。如圖3-15表示的是適配器的作用。我們需要特別注意的是,計算機的硬件地址就在適配器中的ROM中,而計算機的軟件地址IP地址則在計算機的存儲器中。
CSMA/CD協議
最早的以太網是許多計算機是連接在一根總線上,總線的特點是:當一個計算機發送數據時,總線上的計算機都能檢測到這個數據。這種就是廣播通信方式。但我們並不總是要在局域網中進行一對多的廣播通信。為了在總線上實現一對一的通信,可以使每一台計算機的適配器擁有與其他計算機都不同的地址。在發送數據幀時,在幀的首部寫明接收站的地址:當數據幀中的目的地址與適配器的ROM中存放的地址一致的時候,該適配器才能接收這個數據幀。適配器對不是發送給自己的數據幀就丟棄掉。這樣,具有廣播特性的總線上就實現了一對一的通信方式。
為了通信方便,以太網采取了一下兩種措施:
-
采用較為靈活的無連接的工作方式,即不避先建立連接就可以直接發送數據,適配器對發送的數據幀不進行編號,也不要求對方發回確認,這樣做可以使的以太網工作非常的簡單。而局域網的通信質量會非常的好。因通信質量而產生差錯的概率是非常低的。因此,以太網提供的服務是盡最大努力的交付,即不可靠交付。當目的站收到有差錯的幀的時候(例如使用CRC循環校驗查出有錯),就把該幀丟棄掉。其他什么也不做。對有差錯的幀是否重傳交給上層處理。
我們知道,總線上只要有一台計算機發送數據,總線的傳輸資源就會被占用。因此,在同一時間內只允許一台計算機發送數據,否則各個計算機之間就會互相干擾。使得所發送的數據會被破壞。因此,如何協調總線上各計算機的工作就是以太網要解決的一個重大問題。以太網采用的是CSMA/CD(載波監聽多點接入/碰撞檢測) -
第二,以太網發送的數據都是曼徹斯特編碼的信號(下降沿為1(前高后低),上升沿為0(前低后高)),缺點就是它所占用的頻帶寬度是基帶寬度的兩倍。
下面介紹CSMA/CD協議的要點
多點接入就是說明這是總線型網絡,許多計算機以多點接入的方式連接在一根總線上。
載波監聽就是用電子技術檢測總線上有沒有其他計算機在發送數據。其實就是檢測信道。不管在發送前,還是發送中,每個站點都必須不停的檢測信道。在發送前檢測信道是為了獲得發送權,如果檢測出已經有計算機發送數據了,則自己就暫時不能發送數據。必須要等待信道空閑后才能發送數據,如果在發送數據過程中檢測到信道發生了碰撞,則需要執行一系列的算法來處理。
碰撞檢測也就是邊發送邊監聽,即適配器邊發送數據邊檢測信道的信號電壓變化情況。一邊判斷自己在發送數據的時候其他站是否也在發送數據,當總線上幾個站在同時發送數據的時候,總線上的信號電壓變化幅度將會增大(互相疊加)。當適配器檢測到信號電壓超過一定的門限值時,就認為總線上至少有兩個站點在同時發送數據,表明產生了碰撞(沖突)。這時,總線上傳輸的信號產生了嚴重的失真,無法從中恢復出有利的信息來。因此,任何一個正在發送數據的站,一旦發現總線上出現了碰撞,其適配器就立即停止發送,免得繼續無效的發送。白白的浪費網絡資源。然后等待一段隨機時間再次發送。
既然每一個站在發送數據之前已經檢測到信道為空閑,那么為什么還會出現數據在總線上的碰撞呢?這是因為電磁波在總線上傳輸數據總是以有限的速率發送,電磁波在1KM的電纜上傳播時延為5微妙,設一端到另一端的時間為\(\tau\),發送數據的站希望盡早知道是否發生了碰撞。那么,A發送數據后,最持久要經過2\(\tau\)的時間(一個來回),由於互聯網上的任意兩個站點之間的而傳播時延是不一樣的,因此局域網就必須按照最壞的情況設計,假設當前兩個站點之間的距離最大,則取該兩端的傳播時延為所有端到端的傳播時延。
顯然,使用CSMA/CD協議的時候,一個站點不可能同時進行發送和接收數據(但必須邊發送邊監聽)因此使用CSMA/CD協議的以太網不可能進行全雙工通信而只能進行半雙工通信。下面是圖3-7中一些重要時刻:
在t=0時候,A發送數據,B檢測到信道空閑。
在t=\(\tau\)-\(\delta\)時,這里(\(\tau\)>\(\delta\)>0),A發送的數據還沒有到達B,由於B檢測到信道是空閑的,因此B發送數據。
在經過時間\(\delta\)/2的時候,即在t=\(\tau\)-\(\delta\)/2時候,A發送的數據和B發送的數據發生了碰撞。,但是A和B都不知道發生了碰撞。
在t=\(\tau\)時,B檢測到發生了碰撞,於是就停止發送數據。
在t=2\(\tau\)-\(\delta\)時,A也檢測到了發生了碰撞。因此也停止繼續發送數據。
A和B發送數據均失敗,它們都要推遲一段時間再重新發送。由此可見,每一個站在自己發送數據之后的一小段內,存在着遭遇碰撞的可能性,這一小段時間是不確定的。
在圖3-17中可以看出,最先發送數據幀的A站,在發送數據幀后至多經過時間2\(\tau\)就可以知道所發送的數據幀是否遭受到了碰撞,這就是\(\delta\)=0的情況下。因此以太網的端到端往返時間2\(\tau\)稱之為爭用期,它是一個很重要的參數。爭用期又稱之碰撞窗口,這是因為一個站在發送完數據后,只有通過爭用期的考驗,即經過爭用期這段時間還沒檢測到碰撞,才能肯定這次發送不會發生碰撞。
以太網使用的是截斷二進制指數退避算法來確定碰撞后重傳時間。這種算法讓發生碰撞的站在停止發生數據后確定重傳的時間。不是等待信道空空閑就立即發送數據。而是推遲/退避一個隨機時間,具體的退避算法如下:
-
協議規定了退避時間為爭用期2\(\tau\),具體的爭用期時間為512微秒,為了方便,也可以直接使用比特作為爭用期單位,爭用期為512bit,即爭用期為發送512比特所需的時間。
-
從離散的整數集合[0,1,...,(2k-1)]中隨機取出一個數,記為r。重傳應退后的時間為r倍的爭用期。,上面的參數k可以按照下面的公式進行計算:
k=Min(重傳次數,10)
可見,當重傳次數不超過10時,參數k等於重傳次數;但當重傳次數超過10時,K就不會增大而一直等於10。
- 當重傳達16次仍然不能成功,則丟棄該幀,並向上層報告。
例如,在第一次重傳時,k=1,隨機數r就從{0,1}中選一個數,因此重傳的站可選擇的重傳推遲時間是0或者2\(\tau\),在這兩個時間中隨機選擇一個。
同樣,若再次發生碰撞,則在第2次重傳時,則重傳為時k=2,隨機數就從正數{0,1,2,3}中隨機選一個數。因此重傳推遲的時間是在0,2\(\tau\),4\(\tau\),6\(\tau\)這幾個時間中隨即選一個。依次類推。
適配器每次發送一個新的幀,就要執行一次CSMA/CD算法。適配器對過去發生過的碰撞記憶並無記憶功能。因此,當好幾個適配器正在執行指數退避算時候,很可能有某一個適配器發送的新幀能夠恰好的插入到信道中,得到了發送全,而已經推遲好幾次發送的站,有可能很不巧,還要繼續執行退避算法,繼續等待。
現在考慮另一種情況。某個站點發送了一個很短的幀,但在發送完畢之前並沒有檢測出碰撞。假定這個幀在繼續向前傳播到達目的站和別的站發送的幀發送了碰撞,因為目的站將會收到有差錯的幀,可是發送站並不知道這個幀發生了碰撞,因為不會重傳這個幀,這種情況是我們不希望的。為了避免發生這種情況,以太網規定了一個最短幀長64字節,即512bit,如果要發送的數據非常的少,,那么必須加入一些填充字節,使得幀長度不小於64字節。
強化碰撞的概念:當發送數據的站點一旦發現發生了碰撞時,除了立即停止發送數據外,還要繼續發送發送32bit或者48bit的人為干擾信號,以便讓所有用戶都知道現在已經發生了碰撞。
根據以上討論,總結一下CSMA/CD協議的要點:
-
轉杯發送:適配器從網絡層獲得一個分組,加上以太網的首部和尾部組成以太網幀,放入到適配器的緩存中。但在發送前,必須先檢測信道。
-
檢測信道:若檢測到信道忙,則應不停的檢測,一直等待信道轉為空閑。若檢測到空閑信道,並在96bit時間內信道保持空閑(保證了幀間最小間隔),就發送該幀。
3.在發送過程中仍不停的檢測信道,即網絡適配器要邊發送邊監聽,這里只有2種可能性:
-
發送成功,在爭用期內一直未檢測到碰撞。這個幀肯定能夠發送成功,發送完畢后,什么也不做,然后回到(1)。
-
發送失敗:在爭用期內檢測到碰撞。這時立即停止發送數據,並按照規定發送人為干擾信號,等待r倍512比特時間后,返回步驟(2),繼續檢測信道。但若重傳16次仍未成功,則停止重傳而向上級報錯。
以太網每發送完一個幀,一定要把已發送的數據幀在暫時保存下來,如果在爭用期內檢測出發生了碰撞,那么還要再推遲一段時間把這個暫時保留的幀重傳一次。