乙太網的CSMA/CD協議
乙太網
Ethernet的核心的技術就是載波偵聽訪問協議(carrier sense Multiple access with collision detection,CSMA/CD)
CSMA/CD協議
基本原理:站在傳送資料之前,先偵聽通道上是否有其他站傳送的載波訊號,若有,說明通道正在忙;若沒有,通道是空閒的,然後根據預定的策略決定;
- 若通道空閒,是否立即傳送;
- 若通道正忙,是否繼續偵聽
一.即使通道是空閒的,若立即傳送仍然可能會發生衝突。
一種情況是遠端的站剛開始傳送,載波訊號尚未傳到偵聽站,這時候若偵聽站立即傳送,就會和遠端的站發生衝突;另一種情況是雖然暫時沒有站傳送,但是碰巧兩個站都看到了這種情況,都開始傳送資料,這樣也會發生衝突。所以,上面的控制策略的第1點就是想要避免這種情況雖然稀少,但仍然有可能發生的衝突。二. 若通道正忙,如果堅持偵聽,傳送的站一旦停止就立即搶佔通道,但是有可能幾個站同時偵聽,同時都搶佔通道,從而發生衝突
載波偵聽只能減少衝突的概率,不能完全避免衝突。當兩個幀發生衝突之後,若繼續傳送,將會浪費網路頻寬。如果幀比較長,對頻寬的浪費就很可觀了。為了進一步改進頻寬的利用率,傳送站應採取邊傳送邊偵聽的衝突檢測方法。即
- 傳送期間同時接收,並把接收的資料與站中儲存的資料進行比較;
- 若比較結果一致,若結果一致,說明沒有衝突,重複(1);
- 若比較結果不一致,說明發生衝突,立即停止傳送,併發送一個簡短的干擾訊號(Jamming),是所有站點都停止傳送。
- 傳送Jamming訊號後,等待一段隨機長的時間,重新偵聽,然後再嘗試著著重新發送。
帶衝突檢測的CSMA演算法把浪費頻寬的時間減少到檢測衝突的時間。對於區域網來說這個時間很短。如下圖所示,說明了檢測衝突需要的最長時間。
設圖中的兩端的站A和B相聚1KM,用同軸電纜相連。電磁波再1KM電纜中的傳播時延約為5微秒,因此,A向B發出的資料,在約5微秒後才能傳送到B。換句話說,B若在A傳送的資料到達B之前傳送自己的資料幀(因為這時B的載波偵聽不到A傳送的資訊),則必然在某一個時間和A傳送的資料幀產生衝突。衝突的結果是兩個幀都變得無用。在區域網分析中,常把總線上的單程端到端的傳播時延記為T。從圖中可以看出,這樣,當A傳送資料之後,最遲要經過2T才可以判斷自己傳送的資料可其他站傳送的資料是否有衝突。由於區域網上任意兩個站之間的時延有長有短,因此區域網必須按最壞的情況打算,所以T取匯流排兩端的兩個站之間傳播時延(這兩個站之間的距離最大)。
顯然,在使用CSMA/CD協議的時候,一個站不可能同時接收和傳送。
因為在每次傳送過程中,接收模組被用於偵聽衝突了。因此使用CSMA/CD協議的乙太網不可能進行全雙工通訊,而只能採用半雙工通訊。
下面是上圖的一些重要的時刻。
- 在t=0時,A傳送資料。B檢測到通道為空閒。
- 在t=T-Q時(這裡T>Q>0),A傳送的資料還沒有到達B時,由於B檢測到通道是空閒的,因此B傳送資料。
- 經過時間Q/2後,即在t=T-Q/2時,A傳送的資料和B發生的資料發生了衝突。但是這時A和B都不知道發生了衝突。
- 在t=T時,B檢測到發生了衝突,於是停止傳送資料。
- 在t=2T-Q時,A也檢測到發生了衝突,於是也停止傳送資料。
由此可見,每一個站點自己傳送資料之後的一小段時間內,存在著遭遇衝突的可能性,並且這一小段時間是不確定的,它取決於另一個傳送資料的站到本站的距離。因此,乙太網並不能保證某一段時間之內一定能夠把自己的資料幀成功的傳送出去(因為存在產生衝突的可能)。乙太網的這一特點稱為傳送的不確定性。如果希望在乙太網上產生衝突的機會很小,必須使整個乙太網的平均通訊量遠小於乙太網的最高資料率。因此,乙太網的端到端往返時間2T稱為爭用期(contention period),爭用期又稱為衝突視窗(collision window),這是因為一個站在傳送完資料後,只有通過爭用期的“考驗”,即經過爭用期這段時間還沒有檢測到衝突,才能肯定這次傳送不會發生衝突。
與衝突檢測相關的引數是最小幀長。設想在圖中的A站傳送的幀比較短,在2r內已經發送完畢,這樣的A站在整個傳送期間檢測不到衝突,從而錯誤的以為已經成功地傳送出去了。為了避免發生這種衝突,所有的幀至少需要2r才能傳送完畢。這樣可以保證當衝突回到傳送方的時候,傳送過程仍在執行,網路標準中根據設計的資料速率和最大網段長度規定了最小幀長
Lmin=2R*d/v
式中R為網路的速度;d為最大網路段長度;v為訊號傳播速度。
從公式中可以看出,隨著網路速度R的提高,要保證等式成立,要麼最小幀長Lmin成比例的增加,要麼最大網段的長度d成比例縮短。
對於一個最大網路段長為2500m(由粗同軸電纜構成),具有4箇中繼器的10MpbsLAN來說,在最差情況下,往返一來回的時間大約為50微秒,其中包括了通過4箇中繼器所需要的時間。這樣在10Mpbs的情況下,一位需要100ns,所以50微秒要求幀至少為500位(50微秒/100ns),考慮到加上一點安全餘量,該數字被增加到512位,或者說64B。這樣乙太網的爭用期變為了51.2微秒(512b/10Mpbs)。對於小於64B的幀,可以通過填充域來擴充到64B長。
由此可以看出,乙太網在傳送資料時,如果幀的前64B沒有發生衝突,那麼後續的資料就不會發生衝突。換句話說,如果發生衝突,就一定是在傳送的前64B之內。由於一檢查到衝突就會立即終止傳送,這時,已經發送出去的資料一定是小於64B的,因此乙太網闖關規定凡長度小於64B的幀都是由於衝突而異常終止的無效幀。接收站對收到的幀要檢查長度,小於最小幀長的幀被認為是衝突碎片而被丟棄。
採用CSMA/CD演算法檢測到衝突之後,除了立即停止傳送資料外,還要傳送一個干擾訊號(Jamming),以便讓所有使用者都知道現在發生了衝突。這裡的干擾訊號為32位元或者48位元。然後後退一段時間重新發送,後退時間的多少對於網路的穩定性有很大影響。特別在負載很重的情況下,為了避免很多站連續發生衝突,需要設計有效的後退演算法。截斷二進位制指數退避演算法讓發生衝突的站在停止傳送資料後,不是等待通道變為空閒就立即傳送資料,而是推遲一個隨機的時間,這樣做的目的是為了重傳時再發生衝突的概率很小。具體的退避演算法如下:
- 確定基本退避時間,就是他的爭用期為2T,乙太網把爭用期定為51.2微秒。
- 從離散的整數集合【0,1,...,(2(k)次方-1)】中隨機取出一個數,記為r。重傳應退後的時間就是r倍的爭用期。上面的引數K按下面的公式計算:
K=Min【重傳次數,10】
由此可見,當重次數不超過10次,引數K等於重傳次數;當重傳次數超過10次,引數K 的值為10。
- 當重傳達到16次仍然不能成功時(這表明同時打算髮送資料的站太多,以至連續發生衝突),則丟失該幀,並向高層報告。
例如,在第一次重傳時,k=1,隨機數r從整數{0,1}中隨機選擇一個數,因此重傳的站可選擇的重傳推遲時間為0或2T,在這兩個時間中隨機選擇一個。
若在發生衝突,選擇第2次重傳,k=2,隨機數r從整數{0,1,2,3}中選擇一個數,因此重傳推遲的時間從0,2T,4T,6T中隨機的選擇一個。
若在發生衝突,選擇第三次重傳,K=3,隨機數r從整數{0,1,2,3,4,5,6,7}中隨機的選擇一個數,因此重傳推遲的時間從0,2T,4T,6T,8T,10T,12T,14T,在這些時間中隨機的選擇一個。
乙太網還規定了幀間的最小間隔為9.6微秒,相當於96位元時間。這樣做是為了使剛剛收到的資料幀的站的接收快取來得及清理,做好接收下一幀的準備。