轉換成ADSL也已經好幾天了,昨天上網路找了一些資料,針對使用PPPoE時MTU的設定怎樣才是最佳化,在下將心得整理成文章希望對大家有幫助。如有錯誤,歡迎各位指正。
先來說說什麼是MTU好了,MTU為Maximum Transmission Unit的縮寫。字面解釋為「最大傳輸單位」,也就是我們電腦所送出網路封包的最大長度。過大時,可能在途中需分解,分別到達目的地後再組合起來,效率反而變差。但過小時,一定長度的資料需要分更多次來傳送,效率也無法提高。
看看下面那張圖1應可以比較清楚,圖中可以看出MTU就是你從軟體送出的封包的最大長度值,最大是1500 bytes,這是針對Ethernet時的狀況。
圖1. Ethernet封包示意圖
那使用PPPoE時又是怎樣的情形呢?因為PPPoE需要 6 bytes 的空間儲存資訊,而PPPoE本身就是PPP的衍生,所以PPP所耗用的空間他也一併接收,一般辨識用的資訊會耗用掉 2 bytes ,如果有其他資訊的話最多可以耗用 4 bytes,Mutilink PPP的資訊最多 4 bytes ,最後儲存壓縮和加密的資訊最多也是 4 bytes 所以加一加最多最多會耗用 20 bytes不過一般情形都是如圖2,也就是只有PPPoE和PPP identifies所以共耗用 8 bytes。
圖2. PPPoE封包示意圖
翻查資料的結果,目前大概分成兩派,一派人針對MTU的大小,覺得是大就是好,而PPPoE因為需要耗用 8 bytes 所以MTU的最大值就是1492,他們認為設為1492是最佳的值,不過目前沒有找到有哪一篇提出相關理論基礎的實證,所以有待商榷。而另一派則是認為1454是最佳值,為什麼呢?針對這點,我們先看看下面圖3,至於圖3最下面的值就是我們等會要討論的。
圖3. PPPoE與ISP連接示意圖
圖3中可以看到,當我們的ADSL數據機要跟ISP那邊溝通時是透過ATM(Asynchronous Transfer Mode,非同步傳輸模式)協定來達成,關於ATM的相關問題在此不多作贅述,有興趣各位可以自行參閱相關書籍或資料。這裡我們把焦點放在ATM網路的Cell的大小,從圖4中我們可以知道,一個ATM Cell的大小是固定為 53 bytes 而真正存放資料的部分是 48 bytes。
圖4. ATM Cell示意圖
接下來就是我們要來探討,為什麼MTU設為 1454 bytes時是最佳值,因為ATM Cell是固定的 53 bytes ,而資料是 48 bytes,所以當你的資料要進入ATM網路是會被分成若干個 48 bytes 的區塊,而不足 48 bytes 則是補上PADDING,但因為不足的那一個一定是最後一個,而在ATM架構中的AAL5(ATM Adaptation Layer 5)中,最後一個Cell的最後面必須加上 8 bytes 的SAR(segmentation and re-assembly)就是儲存如何把分割後的這些Cell還原的資訊。
這樣看來的話當你的MTU設定為1492時,你傳送到ATM的實際資料大小是:
TCP/IP Payload(就是你的MTU)+ PPP Headers + PPPoE Headers + Ethernet Headers = 1492 + 2 + 6 + 18 = 1518
而你的封包必須被分成 48 bytes一個等分,所以1518 / 48 = 31 餘 30,最後一個Cell就會如圖5上半部所示,30 + 8(SAR) + 10(Padding)= 48。也就是每個封包會多使用 10 bytes 的空間,10 / 1452 = 0.68% 的空間浪費,為何是1452而不是1492,因為你本身還需要耗掉 40 bytes 來放置TCP/IP的資訊,也就是圖1、圖2中你真正資料的所在MSS。
那MTU設為1454的時候呢?
TCP/IP Payload + PPP Headers + PPPoE Headers + Ethernet Headers = 1454 + 2 + 6 + 18 = 1480
1480 / 48 = 30 餘 40
所以最後一個Cell的如圖5下半部所示,40 + 8(SAR)= 48,不需要浪費任何空間給padding。各位如有注意到圖上的字樣,NTS的Enternet軟體所採用的MTU就是 1454 bytes。
圖5. MTU為 1492 bytes 和 1454 bytes時的分割結果
綜合以上所說,我認為在MTU設為 1454 bytes 時會有比較好的效能。
書籤