以太網幀長度為什么不能小於64字節?


0 引言

以太網幀長度不能小於64字節這個要求很多人都知道,但是要問為什么,應該有些人就答不上來了,用就是了唄~這樣不好,我們要知其然還要知其所以然。
咳咳,不裝B。其實在下也是最近把《計算機網絡》翻出來看,正好看到了,就拿出來記錄一波。

問:到底為什么以太網幀長度不能小於64字節呢?
答:為了避免以太網中信號碰撞。

1 何為碰撞檢測?

碰撞檢測是CSMA/CD(Carrier Sense Multiple Access with Collision Detection)協議的一個要點。這個協議又是啥個東東呢?各位都知道TCP/IP體系結構最下面一層是網絡接口層,這一層在OSI七層體系結構中又划分為數據鏈路層和物理層。這里說的CSMA/CD協議就是以太網在數據鏈路層使用的協議。

碰撞檢測也就是局域網中某個站點(也就是主機)在發送數據時,其適配器(通俗點講就是網卡)會檢測信道上是否有其他站在發送數據,檢測到則中止幀的發送。因為多個站點同時發送數據,總線上信號疊加會造成信號失真,不能正常解析。所以我們要避免多個站點同時發送數據的沖突,也即避免發生信號碰撞。

2 何為爭用期?

首先,大家記住一個數據,電磁波在1km電纜的傳播時延約為5μs

如下圖所示,A向B發送數據, τ后到達B(單程端到端傳播時延,記為τ)。若B在A的數據到達之前,發送自己的數據(這時B檢測信道是空閑的,因為它沒收到任何數據),則必然會與A的數據在信道中發生碰撞。而A在開始發送后多久才能知道發生碰撞了呢?要等到B的數據到達A,而A還未結束發送。

假設一個極端情況,當圖中所示的時間差δ(δ為B發送數據時刻與A數據到達B的時刻的時間差)趨向於0,則A檢測到發生碰撞的時間2τ-δ = 2τ,當超過這個時間都未檢測到碰撞,則A發送出的數據就一定不會產生碰撞了。以太網中端到端的往返時間2τ稱為爭用期,也叫碰撞時間。只有經過爭用期這段時間還未檢測到碰撞,才能肯定這次發送不會發生碰撞,這時就可以放心把這一幀發送完畢。

3 爭用期為多少?

按照標准,10Mbps以太網采用中繼器時,連接的最大長度是2500米,最多經過4個中繼器(這個數據百度得來,說的是粗纜以太網的連接)。按照之前的電磁波在1km電纜的傳播時延約為5μs計算,可以得到最大往返時間為((4*2500)/1000)*5μs = 50μs,但實際以太網爭用期確定為51.2μs,不僅考慮到以太網的端到端時延,而且還包括其他的許多因素,如存在的轉發器所增加的時延,以及強化碰撞的干擾信號(這個概念本文就不解釋了,讀者自行查閱)的持續時間。

4 以太網幀最小長度

有了爭用期51.2μs和以太網傳輸速率10Mbps(本文討論的是傳統以太網標准),我們可以得出10Mbps*51.2μs=512bit=64Byte,這個數據長度就是以太網幀最小長度。
各位讀者想通了嗎?當幀長度小於64Byte時,爭用期還沒結束,幀就已經發送完畢,即使檢測到碰撞也不能中止幀的發送。一個異常幀就這么傳輸出去,顯然不是我們想要的。
當規定幀最小長度為64Byte時,只要小於64Byte的幀就被丟棄,大於等於64Byte又一定能檢測到是否發生碰撞(發生碰撞即中止發送,沒有結束符的幀也會被丟棄)。

5 結語

以上就是以太網幀長度為什么不能小於64字節的原因了,文中內容基本都是從《計算機網絡》摘錄的知識,自己整理了一下,如有錯誤歡迎指正~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM