關於×××鏈路中的MTU傳輸問題

 
 
 
 
一、問題概述:
在我們的實際組網中經常遇到此類問題:
1)        某些網站瀏覽沒有問題,而某些網站瀏覽非常慢甚至無法瀏覽。QQ等正常沒有任何問題。
2)        無法下載大的文件。
3)        EMAIL無法發大附件。
二、問題分析:
一般所來是由於路徑MTU不匹配的緣故,特別是在經過了×××鏈路的時候,譬如ADSL PPPOE撥號,L2TP,PPTP,IPSEC,GRE隧道等情況。下面就以GRE隧道爲例來說明MTU的問題,其他隧道協議類似只是頭部字節不同而已。
拓撲結構:
點擊在新窗口查看全圖
CTRL+鼠標滾輪放大或縮小


×××網關1和2之間建立了一條GRE隧道,×××1 ×××2的外網口均爲以太網口,MTU爲1500。PC與SERVER通過該GRE隧道互訪。
分析過程:
        PC在ping –f –l 1448 SERVER 的時候可以ping 通,而ping –f –l 1449 SERVER的時候卻收到報文不可分片錯誤。
        PC出來的IP報文長度爲1448+8(ICMP)+20(IP),到達×××網關1,×××網關1發到GRE隧道口,封裝GRE頭(4),再加上外層IP頭,到達×××網關外層以太口,這時IP報文的長度已經變爲:1448+8+20+4+20=1500字節,剛好等於以太口的MTU,於是被順利傳送。而ping 1449時,到達外層以太口爲1501字節,超出了1500的MTU,又因爲報文DF位被設置,於是就只能丟棄改報文,並返回DF錯誤。
上述實驗中出現此結果是因爲DF被置位,導致無法分片。但是如果DF沒有置位則可以正常的通過但是會出現分片的現象。不過現在很多服務器譬如WEB爲了提高效率以及安全問題等所發出的包是不允許分片的。並且大多防火牆、IPS等設備,這些設備通常也是不允許分片通過的。因此就出現了有些網站無法瀏覽,大文件無法傳輸的情況。

解決方法:
假設PC建立了到SERVER的HTTP連接,PC希望從SERVER下載一個大的網頁。SERVER接收到PC的請求後開始發送大網頁文件,其IP的DF位置1,不允許分片,IP報文長度爲1500字節。到達×××網關2的外網口(以太)後,×××網關2發現其長度超過了1500個字節,於是將其丟棄,並給SERVER發回一個目的地址不可達的ICMP信息,同時指出“MTU of next hop: 1500”。PC接收到該消息後,又按照1500字節對外發送,又被丟棄,於是就形成了循環,無法通訊。
根據上述的分析,很容易得到如下解決方式,在×××網關2的出接口設置MTU爲1500-4-20=1476,這樣×××網關2返回ICMP不可達消息時將給出”MTU of next hop: 1476”。SERVER將以1476作爲自己的最大MTU對外發送,到達×××網關1,封裝GRE和外層IP頭後就不會超過1500而順利發到對端。這個是下載問題的解決,如果要解決上傳的問題,在相應方向的接口修改MTU即可。當然也可以修改TCPMSS,不過這個是影響到TCP的windows從而減小了包的長度。另外修改操作系統的最大MTU值也是可行的,不過比較麻煩。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章