乙太網的最小幀和最大幀長的意義

2021-08-28 06:06:56 字數 3155 閱讀 3222

乙太網是無連線的,不可靠的服務,採用盡力傳輸的機制。乙太網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位元組。

ip頭total length為兩個byte,理論上ip packet可以有65535 byte,加上ethernet frame頭和尾,可以有65535 +14 + 4 = 65553 byte。如果在10mbps乙太網上,將會占用共享鏈路長達50ms,這將嚴重影響其它主機的通訊,特別是對延遲敏感的應用是無法接受的。

由於線路質量差而引起的丟包,發生在大包的概率也比小包概率大得多,所以大包在丟包率較高的線路上不是乙個好的選擇。

但是如果選擇乙個比較小的長度,傳輸效率又不高,拿tcp應用來說,如果選擇乙太網長度為218byte,tcp payload = 218 - ethernet header - ip header - tcp header = 218 - 18 - 20 - 20 = 160 byte

那有效傳輸效率= 160 / 218 = 73%

而如果乙太網長度為1518,那有效傳輸效率= 1460 / 1518 = 96%

==通過比較,選擇較大的幀長度,有效傳輸效率更高==,而更大的幀長度同時也會造成上述的問題,於是最終選擇乙個折衷的長度:1518 byte ! 對應的ip packet 就是 1500 byte,這就是最大傳輸單元mtu的由來。

最早的乙太網是通過hub或集線器來工作的,在任意時刻只能有一台主機傳送,這種共享方式傳送效率很低,而現代高速交換機則讓每個連線交換機的主機工作在獨佔模式,頻寬獨享,可以同時收發,而且現在早已不是早期的10mbps的頻寬,而是1000m、10000m,即使傳送大包也不會影響別的主機,影響的只是交換機的接收和傳送佇列,既然傳送大包效率要比小包效率搞,而且特定的應用也有發大包的需求,比如nfs檔案系統,那為什麼不把介面mtu提高一些,再高一些呢?

這是乙個好主意,於是網絡卡、交換機、路由器網路介面可以實現更大的mtu,可以達到> 9000位元組的大小,==我們稱這種遠大於標準以太幀尺寸的幀為巨型幀jumbo frame 。==

於是網路介面提供可以修改mtu的配置命令,比如預設為1500,可以修改為1508以支援qinq,或者1512以支援802.1q mpls label,這樣既可以支援終端使用者標準1500 位元組ip packet,又可以避免分片。

有一點需要說明,二層交換機的介面,我們可以看成一塊普通的網絡卡,網絡卡工作在資料鏈路層,所以分片不是它的職責,如果乙個幀需要從交換機乙個介面傳送出去,而幀的長度>介面mtu,怎麼辦?丟棄!會發什麼訊息告訴源主機吧?不會的,默默地丟,當作什麼都沒有發生,這種情況最難以排查,如果traceroute可以看到端對端使通的,而傳送資料就是會失敗。

==所以切記,一台交換機要保證介面mtu的一致性。如果在乙個vlan上、或整個交換機都採用同樣的mtu,就不會發生上述情況。而如果入介面是9000位元組,而出介面是1500,就會發生上述問題。==

如果一條物理鏈路的兩端mtu不一致,則會發生什麼情況,比如一側是1500,一側是9000,1500一側發出來的資料肯定沒有問題,但是如果從9000側發給1500呢?

資料也背默默地丟了。為什麼呢?我們來談另外乙個很少提及的詞彙:mru,最大接收單元。

我們一直談的最大傳輸單元mtu是關於出方向的流量處理,而mru恰恰相反,是關於入方向的流量處理。

一般情況下mtu = mru,但比如9000側的資料到達1500,由於9000 > mru,所以直接默默丟棄。

所以在配置鏈路時,要確保兩側的裝置mtu要匹配,無論各家廠商對mtu理解如何、實現如何,一定要保證兩端匹配,==即各自允許在乙太網線上傳送、接收的資料流,乙太網幀的最大長度一樣!==

乙太網 突破最大幀長 乙太網幀最小幀長與最大幀長

討論乙太網的幀長,就不得不先提一下乙太網的大名鼎鼎的csma cd協議。1.1 csma cd協議 csma cd是英文carrier sense multiple access collision detected 的縮寫,可把它翻成 載波監聽多路訪問 衝突檢測 或 帶有衝突檢測的載波偵聽多路訪問...

乙太網幀最小幀長與最大幀長

討論乙太網的幀長,就不得不先提一下乙太網的大名鼎鼎的csma cd協議。1.1 csma cd協議 csma cd是英文carrier sense multiple access collision detected 的縮寫,可把它翻成 載波監聽多路訪問 衝突檢測 或 帶有衝突檢測的載波偵聽多路訪問...

乙太網資料幀最短幀長問題

1.乙太網幀的最短長度為64位元組,或者幀中的資料不得少於46個位元組,其中乙太網幀頭有18位元組 乙太網2的值為 mac 2型別 4crc,注意,如果是802.3的規範,它支援snap和802.3以太,其中的2個位元組的型別欄位就變為幀的長度 小於以上長度的幀或資料需要在幀中加入 填充資料 pad...