BATMAN-Advanced 之 MTU 與封包分割

Bycodeant

BATMAN-Advanced 之 MTU 與封包分割

BATMAN Advanced在處理封包的過程中,必須加上自定義的表頭來進行資料傳遞,在處理的過程中會有Maximum Transmission Unit(MTU)值太大的問題;

因為Ethernet的MTU值為1500 Bytes,此一數值也普遍被一般的網路裝置做為預設值,而BATMAN Advanced也以此值作為其預設的MTU值,因此再加上BATMAN Advanced的自定義表頭的長度後,就會超出MTU值,為了解決此一問題,BATMAN Advanced會進行封包分割(Packet Fragmentation)的動作,這部分被實作在unicast.c檔案中;要解決因MTU值過大而造成封包分割的問題,有下列二個方法:

1.    加大負責實際傳輸的網路裝置的MTU值,這個方法可以用在802.11或其他可允許MTU超過1524 Bytes(BATMAN Advanced的建議值)的裝置上使用,但在Ethernet裝置上並不適用。

2.    縮小BATMAN Advanced本身的MTU值,將MTU調整至1476 Bytes(BATMAN Advanced的建議值)以下,此方法可用於Ethernet裝置上。

如果來源端進行了封包分割的動作,目的端就必須進行封包聚合(Packet Aggregation)的動作,這樣的行為會加重系統的負擔;以封包分割來說,必須先分配記憶體(Memory Allocate),然後進行將資料複製到新分配的記憶體空間(Memory Copy),這些動作都會需要額外的作業時間(Operating Time)來完成;而BATMAN Advanced自定義的表頭長度不一,廣播封包的表頭長度為14 Bytes,單點直播封包的表頭長度為10 Bytes,一但進行封包分割,就會改用分割封包的表頭,其長度為20 Bytes,表頭耗損(Header Consumption)會加大,由10-14 Bytes變成40 Bytes,傳輸的封包總數也會大幅增加。

下圖說明為何BATMAN Advanced會遇上MTU值太大的問題:

batman-adv-mtu

About the author

codeant administrator

Leave a Reply