1. 程式人生 > >以太網數據幀(802.3)最大與最小長度

以太網數據幀(802.3)最大與最小長度

自己 閱讀 發生 eee 一定的 bps 使用 目的 驅動

以太網數據幀(802.3)最大與最小長度
2017年03月20日 19:40:01 Farmwang 閱讀數:5370更多
個人分類: TCP/IP
以太網(IEEE 802.3)幀格式:

1、前導碼:7字節0x55,一串1、0間隔,用於信號同步
2、幀起始定界符:1字節0xD5(10101011),表示一幀開始
3、DA(目的MAC):6字節
4、SA(源MAC):6字節
5、類型/長度:2字節,0~1500保留為長度域值,1536~65535保留為類型域值(0x0600~0xFFFF)
6、數據:46~1500字節
7、幀校驗序列(FCS):4字節,使用CRC計算從目的MAC到數據域這部分內容而得到的校驗和。

據RFC894的說明,以太網封裝IP數據包的最大長度是1500字節,也就是說以太網最大幀長應該是以太網首部加上1500,再加上7字節的前導同步碼和1字節的幀開始定界符,具體就是:7字節前導同步嗎+1字節幀開始定界符+6字節的目的MAC+6字節的源MAC+2字節的幀類型+1500+4字節的FCS。

按照上述,最大幀應該是1526字節,但是實際上我們抓包得到的最大幀是1514字節,為什麽不是1526字節呢?原因是當數據幀到達網卡時,在物理層上網卡要先去掉前導同步碼和幀開始定界符,然後對幀進行CRC檢驗,如果幀校驗和錯,就丟棄此幀。如果校驗和正確,就判斷幀的目的硬件地址是否符合自己的接收條件(目的地址是自己的物理硬件地址、廣播地址、可接收的多播硬件地址等),如果符合,就將幀交“設備驅動程序”做進一步處理。這時我們的抓包軟件才能抓到數據,因此,抓包軟件抓到的是去掉前導同步碼、幀開始分界符、FCS之外的數據,其最大值是6+6+2+1500=1514。

以太網規定,以太網幀數據域部分最小為46字節,也就是以太網幀最小是6+6+2+46+4=64。除去4個字節的FCS,因此,抓包時就是60字節。當數據字段的長度小於46字節時,MAC子層就會在數據字段的後面填充以滿足數據幀長不小於64字節。由於填充數據是由MAC子層負責,也就是設備驅動程序。


以CSMA/CD作為MAC算法的一類LAN稱為以太網。CSMA/CD沖突避免的方法:先聽後發、邊聽邊發、隨機延遲後重發。一旦發生沖突,必須讓每臺主機都能檢測到。關於最小發送間隙和最小幀長的規定也是為了避免沖突。

考慮如下的情況,主機發送的幀很小,而兩臺沖突主機相距很遠。在主機A發送的幀傳輸到B的前一刻,B開始發送幀。這樣,當A的幀到達B時,B檢測到沖突,於是發送沖突信號。假如在B的沖突信號傳輸到A之前,A的幀已經發送完畢,那麽A將檢測不到沖突而誤認為已發送成功。由於信號傳播是有時延的,因此檢測沖突也需要一定的時間。這也是為什麽必須有個最小幀長的限制。

按照標準,10Mbps以太網采用中繼器時,連接的最大長度是2500米,最多經過4個中繼器,因此規定對10Mbps以太網一幀的最小發送時間為51.2微秒。這段時間所能傳輸的數據為512位,因此也稱該時間為512位時。這個時間定義為以太網時隙,或沖突時槽。512位=64字節,這就是以太網幀最小64字節的原因。

512位時是主機捕獲信道的時間。如果某主機發送一個幀的64字節仍無沖突,以後也就不會再發生沖突了,稱此主機捕獲了信道。

由於信道是所有主機共享的,如果數據幀太長就會出現有的主機長時間不能發送數據,而且有的發送數據可能超出接收端的緩沖區大小,造成緩沖溢出。為避免單一主機占用信道時間過長,規定了以太網幀的最大幀長為1500。

100Mbps以太網的時隙仍為512位時,以太網規定一幀的最小發送時間必須為5.12μs。

1000Mbps以太網的時隙增至512字節,即4096位時,4.096μs。

以太網數據幀(802.3)最大與最小長度