為什么以太網數據幀最小位64字節
以太網是無連接的,不可靠的服務,采用盡力傳輸的機制。以太網CSMA/CD我就不多講了,我相信大家都了解這個原理。
以太網是不可靠的,這意味着它並不知道對方有沒有收到自己發出的數據包,但如果他發出的數據包發生錯誤,他會進行重傳。以太網的錯誤主要是發生碰撞,碰撞是指兩台機器同時監聽到網絡是空閑的,同時發送數據,就會發生碰撞,碰撞對於以太網來說是正常的。
我們來看一下,假設A檢測到網絡是空閑的,開始發數據包,盡力傳輸,當數據包還沒有到達B時,B也監測到網絡是空閑的,開始發數據包,這時就會發生碰撞,B首先發現發生碰撞,開始發送碰撞信號,所謂碰撞信號,就是連續的01010101或者10101010,十六進制就是55或AA。這個碰撞信號會返回到A,如果碰撞信號到達A時,A還沒有發完這個數據包,A就知道這個數據包發生了錯誤,就會重傳這個數據包。但如果碰撞信號會返回到A時,數據包已經發完,則A不會重傳這個數據包。
我們先看一下,以太網為什么要設計這樣的重傳機制。首先,以太網不想采用連接機制,因為會降低效率,但他又想有一定的重傳機制,因為以太網的重傳是微秒級,而傳輸層的重傳,如TCP的重傳達到毫秒級,應用層的重傳更達到秒級,我們可以看到越底層的重傳,速度越快,所以對於以太網錯誤,以太網必須有重傳機制。
要保證以太網的重傳,必須保證A收到碰撞信號的時候,數據包沒有傳完,要實現這一要求,A和B之間的距離很關鍵,也就是說信號在A和B之間傳輸的來回時間必須控制在一定范圍之內。IEEE定義了這個標准,一個碰撞域內,最遠的兩台機器之間的round-trip time 要小於512bit time.(來回時間小於512位時,所謂位時就是傳輸一個比特需要的時間)。這也是我們常說的一個碰撞域的直徑。
512個位時,也就是64字節的傳輸時間,如果以太網數據包大於或等於64個字節,就能保證碰撞信號到達A的時候,數據包還沒有傳完。
這就是為什么以太網要最小64個字節,同樣,在正常的情況下,碰撞信號應該出現在64個字節之內,這是正常的以太網碰撞,如果碰撞信號出現在64個字節之后,叫 late collision。這是不正常的。
總結:最小數據幀的設計原因和以太網電纜長度有關,為的是讓兩個相距最遠的站點能夠感知到雙方的數據發生了碰撞;最遠兩端數據的往返時間就是爭用期,以太網的爭用期是51.2微妙,正好發送64byte數據。
注:為什么以太網的爭用期是51.2us?
在極限條件下,一個局域網中兩個收發器間(允許接4個中繼器)的最大距離為2500m,往返5000m,同軸電纜的時延特性為5us/km,即如遇沖突,端到端往返時延為25us。然而這是理想的時延,考慮到中繼器的額外時延,最壞情況下取估計時延為45us,再加上強化沖突需發送48bit,接受方要接受到48bit后才確認沖突,即在增加4.8us,共49.8us,所以通常以太網取51.2us為爭用期的時間長度(傳輸512bit,即64字節時間),即楨的長度至少為64字節。
補充資料
以太網的協議是包含了物理層和數據鏈路層協議的。進一步,數據鏈路層被細分為兩層,MAC(介質訪問控制) 和 LLC(邏輯鏈路控制)。
LLC 本身的作用是膠合層,主要是做復用。以太網的 MAC 層中沒有流控,ARQ 和糾錯碼功能的。也就是說,問題提的功能,以太網通通沒有。
這樣設計合理的關鍵前提是 Wired,以及 LAN,這樣的物理環境決定了誤碼率非常低。單跳傳輸很少出錯,如果出錯,以太網會直接把包吞掉,由上層自己探測丟包和重傳。
當然,上層重傳的開銷是遠大於鏈路層重傳的。例如,讓 TCP 做重傳,低效的地方在於,一是端到端的重傳明顯消耗更多的網絡容量,因為會走很多跳;二是 TCP 檢測的時機不如鏈路層及時,導致重傳的觸發往往是滯后的,影響了傳輸性能。
沒有流控,ARQ 和糾錯碼的以太網協議非常簡單,這樣能非常容易和高效地實現以太網硬件,大幅降低成本。也正是因為便宜夠用,以太網才會如此流行。
如果把目光移到 WAN 和無線網絡上,數據鏈路層就復雜得多。這個時候,長距離通信、無線信道都會導致誤碼率蹭蹭上升,如果數據鏈路層不做可靠傳輸,靠上層太過低效。例如 802.11 就有流控。如果是 3G、4G 這樣的移動通信,會更復雜。
參考鏈接
- https://www.zhihu.com/question/376620338/answer/1055321769
- http://blog.sina.com.cn/s/blog_564fc50a0100lypt.html