簡介
CSMA /CD(Carrier Sense Multiple Access with Collision Detectio)即帶碰撞檢測的載波監聽多路訪問技術,是一種爭用型的介質訪問控制協議,采用半雙工通信,最早應用於總線型局域網。在傳統的共享以太網中,所有的節點共享傳輸介質。如何保證傳輸介質有序、高效地為許多節點提供傳輸服務,就是以太網的介質訪問控制協議要解決的問題。也被稱為共享介質的靈魂。
CS:載波偵聽: 在發送數據之前進行監聽,以確保線路空閑,減少沖突的機會。
MA:多點接入: 每個站點發送的數據,可以同時被多個站點接收。
CD:碰撞檢測: 邊發送邊檢測,發現沖突就停止發送,然后延遲一個隨機時間之后繼續發送。沖突的檢測由於兩個站點同時發送信號,經過疊加后,會使線路上電壓的擺動值超過正常值一倍。據此可判斷沖突的產生。
原理
1、終端設備不停的檢測共享線路的狀態,只有在空閑的時候才發送數據,如果線路不空閑則一直等待。
2、發送過程中,若其他設備也同時發送數據,則其發送的數據必然產生碰撞,導致線路上的信號不穩定,終端設備檢測到這種不穩定之后,馬上停上發送自己的數據,然后再發送一連串干擾脈沖,然后等待一段時間之后再進行發送。
缺點:帶寬窄,沖突檢測機制,傳輸時間必須大於延遲時間導致物理長度限制51.2μs的沖突檢測窗口,1位在2500m,加上四個中繼器的往返時間。幀長最小字節數64,剛好512位。
簡單總結為:先聽后發,邊發邊聽,沖突停發,隨機延遲后重發。
發生沖突的原因
既然每一個站在發送數據之前已經監聽到信道為“空閑”,那么為什么還會出現數據在總線上的碰撞呢?這是因為電磁波在總線上總是以有限的速率傳播的。這和我們開討論會時相似。一聽見會場安靜,我們就立即發言,但偶爾也會發生幾個人同時搶着發言而產生沖突的情況。如圖所示的例子可以說明這種情況。設圖中的局域網兩端的站A和B相距1km,用同軸電纜相連。電磁波在1km電纜的傳播時延約為5μs。因此,A向B發出的數據,在約5us后才能傳送到B。換言之,B若在A發送的數據到達B之前發送自己的幀(因為這時B的載波監聽檢測不到A所發送的信息),則必然要在某個時間和A發送的幀發生碰撞。碰撞的結果是兩個幀都變得無用。在局域網的分析中,常把總線上的單程端到端傳播時延記為τ。發送數據的站希望盡早知道是否發生了碰撞。那么,A發送數據后,最遲要經過多長時間才能知道自己發送的數據和其他站發送的數據有沒有發生碰撞?從圖中不難看出,這個時間最多是兩倍的總線端到端的傳播時延2τ,或總線的端到端往返傳播時延。由於局域網上任意兩個站之間的傳播時延有長有短,因此局域網必須按最壞情況設計,即取總線兩端的兩個站之間的傳播時延(這兩個站之間的距離最大)為端到端傳播時延。
退避算法:
(1)協議規定了基本退避時間為爭用期2τ具體的爭用期時間是51.2μs。對於10Mis以太網,在爭用期內可發送512bit,即64字節。也可以說爭用期是512比特時間。1比特時間就是發送1比特所需的時間。所以這種時間單位與數據率密切相關。為了方便,也可以直接使用比特作為爭用期的單位。爭用期是512bit,即爭用期是發送512bi所需的時間。
(2)從離散的整數集合[0,1,…,(2^k-1)中隨機取出一個數,記為r。重傳應推后的時間就是r倍的爭用期。上面的參數k按公式k=Min[重傳次數,10]可見當重傳次數不超過10時,參數k等於重傳次數;但當重傳次數超過10時,k就不再增大而一直等於10。
(3)當重傳達16次仍不能成功時(這表明同時打算發送數據的站太多,以致連續發生沖突),則丟棄該幀,並向高層報告。
例如,在第1次重傳時,k=1,隨機數r從整數0,1}中選一個數。因此重傳的站可選擇的重傳推遲時間是0或2τ,在這兩個時間中隨機選擇一個數。
若再發生碰撞,則在第2次重傳時,k=2,隨機數r就從整數{0,1,2,3}中選一個數。因此重傳推遲的時間是在0,2τ,4τ和6τ這4個時間中隨機地選取一個。
其他
隨機性:
我們還應注意到,適配器每發送一個新的幀,就要執行一次 CSMA /CD算法。適配器對過去發生過的碰撞並無記憶功能。因此,當好幾個適配器正在執行指數退避算法時,很可能有某一個適配器發送的新幀能夠碰巧立即成功地插入到信道中,得到了發送權,而已經退避好幾次發送的站,有可能很不巧,還要繼續執行退避算法,繼續等待。
規定最小幀長:
現在考慮一種情況。某個站發送了一個很短的幀,但在發送完畢之前並沒有檢測出碰撞。假定這個幀在繼續向前傳播到達目的站之前和別的站發送的幀發生了碰撞,因而目的站將收到有差錯的幀(當然會把它丟棄)。可是發送站卻不知道這個幀發生了碰撞,因而不會重傳這個幀。為了避免發生這種情況,以太網規定了一個最短幀長64字節,即512bit。如果要發送的數據非常少,那么必須加入一些填充字節,使幀長不小於64字節。對於10Mbit/s以太網,發送512bit的時間需要51.2μs,也就是上面提到的爭用期。由此可見,以太網在發送數據時,如果在爭用期(共發送了64字節)沒有發生碰撞,那么后續發送的數據就一定不會發生沖突。換句話說,如果發生碰撞,就一定是在發送的前64字節之內。由於一檢測到沖突就立即中止發送,這時已經發送出去的數據一定小於64字節,因此凡長度小於64字節的幀都是由於沖突而異常中止的無效幀。只要收到了這種無效幀,就應當立即將其丟棄。信號在以太網上傳播1km大約需要5μs。以太網上最大的端到端時延必須小於爭用期的一半(即25.6μs),這相當於以太網的最大端到端長度約為5km。實際上的以太網覆蓋范圍遠遠沒有這樣大。因此,實用的以太網都能在爭用期51.2μs內檢測到可能發生的碰撞。以太網的爭用期確定為51.2μs,不僅考慮到以太網的端到端時延,而且還包括其他的許多因素,如存在的轉發器所增加的時延,以及下面要講到的強化碰撞的干擾信號的持續時間等。
規定幀間最小間隔:
以太網規定最小幀間隔為9.6μs,相當於96比特時間,這樣做是為了剛剛收到數據幀的站的接收緩存來得及處理,做好接收下一幀的准備。
強化碰撞:
這就是當發送數據的站一旦發現發生了碰撞時,除了立即停止發送數據外,還要再繼續發送32比特或48比特的人為干擾信號,以便讓所有用戶都知道現在已經發生了碰撞。對於10Mbis以太網,發送32(或48)比特只需要32(或48)μs。
CSMA /CD協議的要點歸納
(1)准備發送:適配器從網絡層獲得一個分組,加上以太網的首部和尾部,組成以太網幀,放入適配器的緩存中。但在發送之前,必須先檢測信道。
(2)檢測信道:若檢測到信道忙,則應不停地檢測,一直等待信道轉為空閑。若檢測到信道空閑,並在96比特時間內信道保持空閑(保證了幀間最小間隔),就發送這個幀。
(3)載波監聽:在發送過程中仍不停地檢測信道,即網絡適配器要邊發送邊監聽。這里只有兩種可能性:
①發送成功:在爭用期內一直未檢測到碰撞。這個幀肯定能夠發送成功。發送完畢后,其他什么也不做。然后回到(1)。
②發送失敗:在爭用期內檢測到碰撞。這時立即停止發送數據,並按規定發送人為干擾信號。適配器接着就執行指數退避算法,等待r倍512比特時間后,返回到步驟(2),繼續檢測信道。但若重傳達16次仍不能成功,則停止重傳而向上報錯。以太網每發送完一幀,一定要把已發送的幀暫時保留一下。如果在爭用期內檢測出發生了碰撞,那么還要在推遲一段時間后再把這個暫時保留的幀重傳一次。
使用集線器的星型拓撲
集線器的一些特點:
(1)從表面上看,使用集線器的局域網在物理上是一個星形網,但由於集線器使用電子器件來模擬實際電纜線的工作,因此整個系統仍像一個傳統以太網那樣運行。也就是說,使用集線器的以太網在邏輯上仍是一個總線網,各站共享邏輯上的總線,使用的還是 CSMA /CD協議(更具體些說,是各站中的適配器執行 CSMA /CD協議)。網絡中的各站必須競爭對傳輸媒體的控制,並且在同一時刻至多只允許一個站發送數據。
(2)一個集線器有許多接口,例如8至16個,每個接口通過RJ45插頭,用兩對雙絞線與一台計算機上的適配器相連(這種插座可連接4對雙絞線,實際上只用2對,即發送和接收各使用一對雙絞線)。因此,一個集線器很像一個多接口的轉發器。
(3)集線器工作在物理層,它的每個接口僅僅簡單地轉發比特——收到1就轉發1,收到0就轉發0,不進行碰撞檢測。若兩個接口同時有信號輸入(即發生碰撞),那么所有的接口都將收不到正確的幀。
(4)集線器采用了專門的芯片,進行自適應串音回波抵消。這樣就可使接口轉發出去的較強信號不致對該接口接收到的較弱信號產生干擾(這種干擾即近端串音)。每個比特在轉發之前還要進行再生整形並重新定時。