討論乙太網的幀長,就不得不先提一下乙太網的大名鼎鼎的csma/cd協議。
1.1 csma/cd協議
csma/cd是英文carrier sense multiple access/collision detected 的縮寫,可把它翻成「載波監聽多路訪問/衝突檢測」,或「帶有衝突檢測的載波偵聽多路訪問」。
所謂載波監聽(carrier sense),意思就是以太網路上的各個工作站在傳送資料前,都要監聽匯流排上有沒有資料正在傳輸。若有資料傳輸 (稱匯流排為忙),則不傳送資料,需要等待;若無資料傳輸(稱匯流排為空),可以立即傳送準備好的資料。
所謂多路訪問(multiple access),意思就是以太網路上的各個工作站在傳送資料時,共同使用一條匯流排,且傳送資料是廣播式的。
所謂衝突(collision),意思就是,若乙太網上有兩個或兩個以上工作站同時傳送資料,在匯流排上就會產生訊號的衝突;多個工作站都同時傳送資料,在匯流排上就會產生訊號的衝突,哪個工作站接收到的資料都辨別不出真正的資訊。這種情況稱衝突或者碰撞。
為了減少衝突發生的影響,工作站在傳送資料過程中還要不停地檢測自己傳送的資料,檢測自己傳輸過程中有沒有其他工作站在傳送資料,在傳輸過程中與其它工作站的資料發生衝突,這就是衝突檢測(collision detected)。
詳細見csma/cd協議介紹。
1.2 乙太網探測幀
當多個工作站均想向乙太網傳送資料時,如果匯流排處於忙的狀態,大家都等待,也不會有何爭議;但是如果匯流排處於空的狀態,而且工作站是依次監聽到空狀態,那麼各個工作站就會陸續向匯流排傳送資料,a工作站傳送的資料還未傳遞到另乙個要傳送資料的b工作站,那麼b工作站仍然認為匯流排為空的狀態,那麼b工作站也向匯流排注入資料;如果還有更多工作站向匯流排注入資料,原理一樣,只是更加複雜而已。
a工作站傳遞的資料與b工作站傳遞的資料就會在匯流排的某處傳送衝突,導致此次資料傳送失敗。那有什麼辦法可以提前判斷,使得工作站不必每次都源源不斷的向匯流排注入資料,其後又檢測到衝突,而重新等待,如此反覆,既浪費了寶貴的工作站資源與匯流排資源,又使得資料遲遲不能傳送出去。
先了解下碰撞訊號,就是連續的01010101或者10101010,十六進製制就是55或aa。乙太網實現原理是,假設某個工作站檢測到衝突發生,那就傳送碰撞訊號,使衝突更加明顯,使得所有工作站均能檢測到匯流排發生了衝突。
我們來看一下,假設a檢測到匯流排是空閒的,開始發資料報,盡力傳輸,當資料報還沒有到達b時,b也監測到匯流排是空閒的,開始發資料報,這時就會發生衝突。假設b 首先發現發生碰撞,開始傳送碰撞訊號。
這個碰撞訊號會返回到 a,如果碰撞訊號到達a時,a還沒有發完這個資料報,a就知道這個資料報發生了錯誤,就會重傳這個資料報。但如果碰撞訊號會返回到a時,資料報已經發完, 則a不會重傳這個資料報。
乙太網為什麼要設計這樣的重傳機制。首先,乙太網不想採用連線機制,這會降低傳輸效率,但他又想保證一定的傳輸效率。因為乙太網的重傳是微秒級,而傳輸層的重傳,如tcp的重傳達到毫秒級,應用層的重傳更達到秒級。我們可以看到越底層的重傳,速度越快,所以對於鏈路層發生的錯誤,乙太網必須有重傳機制。
要保證乙太網的重傳,必須保證a收到碰撞訊號的時候,資料報沒有傳完,要實現這一要求,a和b之間的距離很關鍵,也就是說訊號在a和b之間傳輸的來回時間 必須控制在一定範圍之內。
解決方法就是,每個想要傳送資料的工作站,檢測到匯流排為空狀態,在傳送資料之前,先傳送乙個探測幀,探測幀的傳送就圓滿的解決了上面的問題。而探測幀的長度既要達到最快速的傳遞到目的地,又要確保探測幀的傳遞時間足夠使得其他工作站能夠監聽到。這個探測幀的長度就是乙太網規定的最小幀長,就是乙個最小最長幀。
由於乙太網傳遞的幀,歸根結底還是由位元流組成。上面提到的傳輸速率,其實就是工作站的傳送速率,傳輸乙個幀還是乙個個的位元傳送出去。即,工作站傳送乙個幀的第乙個位元到達目的地,而此幀的最後乙個位元正好傳送出去。
2.1 碰撞槽時間
c代表光速,也就是20.3cm/ns(每納秒20.3厘公尺), c是30w。電子在銅介質(普通銅)中的移動速度是21w/s 。
假設公共匯流排**長度為s,幀在**上的傳播速度為0.7c(光速),網路的傳輸率為r(bps),幀長為l(bps),tphy為某站的物理層時延;
則有:碰撞槽時間=2s/0.7c+2tphy
因為lmin/r=碰撞槽時間
所以:lmin =(2s/0.7c+2tphy )×r
lmin 稱為最小幀長度。
碰撞槽時間在乙太網中是乙個極為重要的引數,有如下特點:
(1)它是檢測一次碰撞所需的最長時間。
(2)要求幀長度有個下限。(即最短幀長)
(3)產生碰撞,就會出現幀碎片。
(4)如發生碰撞,要等待一定的時間。t=rt。(t為碰撞槽時間)
假設:a、b兩地之間通過乙個單向傳送帶傳遞物品,傳送帶的傳輸速度是c(c代表光速),也就是20.3cm/ns(每納秒20.3厘公尺),a點有個人叫marcia,她要把一車荔枝一串一串的傳送給b點的那個人allen,現在marcia需要抉擇的是:我在傳送荔枝給allen的時候,如果allen同時也有荔枝傳給我,這個時候就會產生衝突,而衝突會把傳送中的荔枝撞碎,破碎的荔枝渣會通過傳送帶反送給我,我很想知道是哪一串荔枝被撞碎了,如何實現?乙個辦法就是:在我收到荔枝碎片的時候,我仍舊在傳著這串荔枝!比如有很多串荔枝,第1串,第2串等,當我傳送第3串荔枝的過程中,收了荔枝碎片,那肯定是第3串裡先發出的荔枝出現了碰撞,而不是第2串或第1串中的荔枝發生碰撞。
為了實現這一點,假如marcia到allen點的距離是2500公尺(250000厘公尺),傳送帶上的荔枝每納秒20.3厘公尺,那麼一串荔枝中的第乙個荔枝到達allen點的用時就是250000除以20.3=12500納秒,在加上碎片返回的時間是12500納秒,等於25000納秒,這個時間就是一串荔枝在傳送帶上必須持續的時間。
marcia高興的時候,往傳送帶上放荔枝的時候快,不高興的時候就慢。高興的時候每秒可以往傳送帶上放100mbit個荔枝,換算一下,也就是說放乙個荔枝用10納秒。不高興的時候每秒鐘只能往傳送帶上放10mbit個,也就是說放乙個荔枝用100納秒。
因為一串荔枝必須持續的時間25000納秒,那麼對於不高興的時候,25000除以100=250個荔枝,這個結果就是一串荔枝的數量。所以,理論上乙個10mbit/s的乙太網,最小幀長應該是250bit。但為了確保marcia在放荔枝的過程中不會被扎到手,放送荔枝間會有一定的延時,所以最小幀長被定義為512bit(64位元組)。
因為一串荔枝必須持續的時間25000納秒,對於高興的時候,25000除以10=2500個荔枝,這個結果就是一串荔枝的數量。所以,理論上乙個100mbit/s的乙太網,最小幀長應該是2500bit。但乙個2500bit的幀又太大了,上層來的資料報不可能這麼大。所以我們只能縮短a點到b點的距離為250公尺,乙個荔枝在傳送帶上往返的時間也變成了2500納秒。這時用2500除以10=250個荔枝,這個結果就是一串荔枝的數量。所以,理論上乙個100mbit/s的乙太網,最小幀長應該是250bit,網路最大有效距離是250公尺。但為了確保marcia在放荔枝的過程中不會被扎到手,放送荔枝間會有一定的延時,所以幀長被定義為512bit(64位元組)。
由此可見,mac層傳送的速度越快,乙太網的最大有效距離就越短。但對於1000mb/s的吉位元乙太網,mac層有兩種選擇,要麼保留csma/cd,要麼不用它。若保留csma/cd協議,必須面臨碰撞檢測問題,這就要再一次減小網路的最大有效傳輸距離到25公尺。當然您可以不縮短網路的距離,而是增加乙個幀的程度,就如我們開始分析100mb/s乙太網那樣,讓乙個幀持續足夠長的時間。但因為上層來的資料沒有這麼多,所以就需要在mac層進行一些無用資料的填充來滿足這個要求。
2.2 最優衝突時間
下面我們來估計在最壞情況下,檢測到衝突所需的時間
(1)a和b是網上相距最遠的兩個主機,設訊號在a和b之間傳播時延為τ,假定a在t時刻開始傳送一幀,則這個幀在t+τ時刻到達b,若b在t+τ-ε時刻開始傳送一幀,則b在t+τ時就會檢測到衝突,並發出阻塞訊號。
(2)阻塞訊號將在t+2τ時到達a。所以a必須在t+2τ時仍在傳送才可以檢測到衝突,所以一幀的傳送時間必須大於2τ。
(3)按照標準,10mbps乙太網採用中繼器時,連線最大長度為2500公尺,最多經過4個中繼器(乙太網中使用中繼器的5-4-3-2-1原則),因此規定對於10mbps乙太網規定一幀的最小傳送時間必須為51.2μs。
(4)51.2μs也就是512位資料在10mbps乙太網速率下的傳播時間,常稱為512位時。這個時間定義為乙太網時隙。512位時=64位元組,因此乙太網幀的最小長度為512位時=64位元組。
2.3 乙太網幀長
802.3-2002標準定了乙太網的頭結構為da(6)+sa(6)+len/type(2)=14位元組。幀校驗序列(fcs):4位元組,使用crc計算從目的mac到資料域這部分內容而得到的校驗和。
乙太網的幀開銷是18位元組,是「目的mac(6)+源mac(6)+type(2)+crc(4)」。乙太網最小幀長為64位元組,那麼ip報文最小為46位元組,而區域網規定ip最大傳輸單元1500位元組,實際上加上乙太網幀的18位元組,就是1518位元組。
ieee定義了這個標準,乙個碰撞域內,最遠的兩台機器之間的round-trip time 要小於512bit time。(來回時間小於512位時,所謂位時就是傳輸乙個位元需要的時間)。這也是我們常說的乙個碰撞域的直徑。
512個位時,也就是64位元組的傳輸時間,如果乙太網資料報大於或等於64個位元組,就能保證碰撞訊號到達a的時候,資料報還沒有傳完。
這就是為什麼乙太網要最小64個位元組,同樣,在正常的情況下,碰撞訊號應該出現在64個位元組之內,這是正常的乙太網碰撞,如果碰撞訊號出現在64個位元組之後,叫 late collision。這是不正常的。
cisco交換機有一種**方式叫fragment-free,叫無碎片**,他就是檢查64個位元組之內有沒有錯誤,有的話不**,這樣就排除了正常的乙太網錯誤包。
乙太網幀最小幀長與最大幀長
討論乙太網的幀長,就不得不先提一下乙太網的大名鼎鼎的csma cd協議。1.1 csma cd協議 csma cd是英文carrier sense multiple access collision detected 的縮寫,可把它翻成 載波監聽多路訪問 衝突檢測 或 帶有衝突檢測的載波偵聽多路訪問...
乙太網幀格式
一 ethernet位址 為了標識乙太網上的每台主機,需要給每台主機上的網路介面卡 網路介面卡 分配乙個唯一的通訊位址,即ethernet位址或稱為網絡卡的實體地址 mac位址。ieee負責為網路介面卡製造廠商分配ethernet位址塊,各廠商為自己生產的每塊網路介面卡分配乙個唯一的ethernet...
乙太網幀格式
乙太網幀格式,即在乙太網幀頭 幀尾中用於實現乙太網功能的域。圖2 ieee802.3以太幀頭 欄位字段長度 位元組 目的前導碼 preamble 7同步 幀開始符 sfd 1標明下乙個位元組為目的mac欄位 目的mac位址 6指明幀的接受者 源mac位址 6指明幀的傳送者 長度 length 2幀的...