參考文獻:
https://blog.csdn.net/loveCC_orange/article/details/79177129
一、認識以太網
最早的以太網是將許多計算機都連接到一根總線上。
使用總線如何通信呢?
當一台計算機發送數據的時候,總線上的所有計算機都能檢測到這個數據。這就是廣播通信方式。當我們需要在總線上進行一對一通信的時候,就需要使每一台計算機的網卡擁有一個與其他網卡都不同的地址。這個時候,我們在發送數據幀時,就需要表明數據幀接收站的地址。只有網卡地址與其相同時,才接受數據幀,否則丟棄幀。
以太網的實現方式:
-
采用較為靈活的無連接的工作方式,即不必建立連接就可以直接發送數據。網卡對發送的數據幀不進行編號,也不要求對方發回確認。這樣做可以使以太網工作起來非常簡單。以太網所提供的服務是盡最大努力的交付,即不可靠的服務。
-
以太網發送的數據都是使用曼徹斯特編碼的信號,使用曼徹斯特編碼的優點是可以很方便的解決接收端接收連續的0或者1時無法提取同步信號的問題;缺點就是因為曼徹斯特編碼的規則導致每秒需要傳輸的碼元數量增加了一倍,所以它占的頻帶寬度也比原始的基帶信號增加了一倍。
二、CSMA/CD(多點接入載波監聽/沖突檢測)協議
多點接入說明是總線型網絡,計算機以多點接入的方式連接在一根總線上,協議的實質是“載波監聽”和“碰撞檢測”。
1.載波監聽
載波監聽就是利用電子技術檢測總線上有沒有其他計算機也在發送。載波監聽實際上就是檢測信道。在發送前,每個站不停地檢測信道,是為了獲得發送權;在發送中檢測信道,是為了及時發現有沒有其他站的發送和本站發送的碰撞,這就是碰撞檢測。總之,載波監聽是全程都在進行的。
2.碰撞檢測
碰撞檢測就是邊發送邊監聽。就是網卡邊發送數據邊檢測新島上的信號電壓的變化情況,以便判斷自己在發送數據的時候其他站是否也在發送數據。當幾個站同時在總線上發送數據時,總線上的信號電壓變化幅度將會增大(互相疊加),當網卡檢測到的信號電壓超過一定的門限值時,說明總線上至少有兩個站同時在發送數據,表明產生了碰撞(沖突),所以也稱為沖突檢測。這時,由於接收的信號已經識別不出來,所以任何一個正在發送的站就會立即停止發送數據,然后等待一段隨機事件以后再次發送。
3.傳播時延對碰撞檢測的影響
因為網卡只有在接收到電壓幅度不正常的信號以后才能判斷是否產生了沖突,所以它在接收到信號之前會認為信道是空閑的。但是信號傳播會有延遲,比如下圖:
如圖為兩台計算機A、B,假設二者指甲距離為一公里,如果A、B同時發送數據,則會在線路中間發生碰撞,那么A、B檢測到碰撞的時間為圖中單程端到端的傳播時延t;若A先發,B后發,那么A最長時間檢測到碰撞的時間為2t。
注:電磁波在1km電纜的傳播時延約為5us(需要記住!)
在使用CSMA/CD協議時,一個站不可能同時進行發送和接收,進行的是半雙工通信。
從圖中可以看出,每個站在自己發送數據之后的一小段時間內,存在着遭遇碰撞的可能性。(這個時間是2t,t由兩站之間的距離決定)這是以太網發送的不確定性。正是這種不確定性使得以太網的平均通信量遠小於以太網的最高數據率。
以太網端到端的往返時間2t稱為爭用期(碰撞窗口)
三、截斷二進制指數退避算法
以太網使用截斷二進制指數退避算法來確定碰撞后重傳的時機。這種算法讓發生碰撞的站在停止發送數據后,不是等待信道變為空閑后立即再發送數據,而是退避一個隨機的時間。一以減小再次發生碰撞的概率。具體算法如下:
- 協議規定了基本退避時間為2t,具體的爭用期時間通常取51.2us,對於10Mb/s的以太網,在爭用期內可發送512bit,即64字節。
- 從離散的整數集合【0,1,……(2^k-1)】中隨機取一個數,記為r,重傳應推后的時間就是r倍的爭用期。
k=Min[重傳次數,10]
- 當重傳次數不超過10時,參數k等於重傳次數;當重傳次數超過10時,k就不再增大一直等於10。
- 當重傳16次仍然不能成功時(這表明同時打算發送數據的站太多,以致連續發生沖突),則丟棄該幀,並向高層報告。
例如:
- 在第一次重傳時,k=1,隨機數從{0,1}中選一個數。所以重傳的推遲時間可以是0或者2t,隨機選擇。
- 第二次發生碰撞,k=2,隨機數從{0,1,2,3}中選一個,所以重傳的推遲時間可以是0,2t,4t,6t隨機選擇一個。
- 以此類推。。
可能會出現這樣一種情況就是:
某個站發送了一個很短的幀,但發生了碰撞,但發生了碰撞,不過在這個幀發送完畢后才檢測到發生了碰撞。已經沒有辦法中止幀的發送,因為已經發送完了。這個時候即使發生了碰撞,那么剛才的幀也無法進行重傳,就會產生錯誤。
注:數據幀能夠重傳的一個條件:以太網要實現重傳,必須保證這個站在收到沖突信號的時候這個幀沒有傳完。
所以基於這種情況,以太網規定了一個最短幀的長度為64個字節,即512bit。因為64字節正好是爭用期長度,如果在爭用期內沒有發生碰撞,那么就不會發生碰撞了。因此,凡長度小於64字節的幀都是由於沖突而異常停止的無效幀。接收端收到這種幀會直接丟棄。(對於10Mb/s傳統以太網而言!!!)
我們知道信號在以太網上傳播1km需要5us,以太網上最大的端到端的時延必須小於爭用期的一半(25.6us),相當於以太網的最大端到端長度約為5km。實際上的以太網覆蓋范圍遠沒有這么大。因此實際的以太網都能在爭用期51.2us內檢測到可能發生的碰撞。以太網確定以51.2us作為爭用期,不僅考慮了端到端時延,而且還考慮了好多其他因素。
強化碰撞
當發送數據的站一旦發現發生了碰撞時,除了立即停止發送數據外,還要再繼續發送32比特或48比特的人為干擾信號,以便讓所有用戶都知道發生了碰撞。以太網還規定了幀間最小間隔為9.6us,相當於96比特時間,這樣做是為了使剛剛收到數據幀的站的接收緩存來得及清理,做好接收下一幀的准備。
以太網建立重傳機制的原因:
首先,以太網不想采用連接機制,因為會降低效率,但他又想有一定的重傳機制,因為以太網的重傳是微秒級,而傳輸層的重傳,如TCP的重傳達到毫秒級,應用層的重傳更達到秒級,我們可以看到越底層的重傳,速度越快,所以對於以太網錯誤,以太網必須有重傳機制。
四、CSMA/CD協議的工作過程(重要)
-
准備發送:適配器從網絡層獲得一個分組,加上以太網的首部和尾部,組成以太網幀,,放入網卡的緩存中,但在發送之前,必須先檢測信道。
-
檢測信道:不停地檢測信道,一直等待信道空閑,並在96比特時間內信道保持空閑(保證了幀間最小時間間隔),就發送這個幀。
-
在發送過程中仍不停地檢測信道,即網絡適配器要邊發送邊監聽。這里只有兩種可能性:
- 發送成功:在爭用期內一直未檢測到碰撞,這個幀發送成功,回到(1)
- 發送失敗:在爭用期內檢測到碰撞,這是立即停止發送數據,並按規定發送認為干擾信號。適配器接着就執行指數退避算法,等待r倍512比特時間后,返回到步驟(2),繼續檢測信道。若重傳16次仍不能成功,則停止重傳向上報錯。
以太網每發完一幀,一定要把已經發送的幀暫時保留一下。如果在爭用期內檢測出發生了碰撞,那么還要在推遲一段時間后再把這個幀重傳一次。