Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題

上次換完Cisco Switch之後果真內網網速非常穩定,再也沒有暴跌內外網網速的問題

但另外一個問題浮現了,應該說本來就存在,只是換了Cisco Switch更凸顯了這個問題

也就是內網電腦上網際網路時,常常無法Load完整個網頁,嚴重一點(例如雅虎新聞就是)是完全無法看到頁面

 

等到最後是Browser送你一個101錯誤碼…

 

這問題很不好查,之前就是不知道從那兒下手,所以一直沒正視這個問題

畢竟其他網路功能是正常的,速度也沒影響…常去的網站也是ok

 

直到了昨天晚上我實在太想當蝙蝠俠,實在很想看那一篇新聞內容…但卻一直無法上去

奇摩子有夠ooxx,自己蝦弄DNS…當然不會成功,不過也造就了我上一篇文章的誕生,也不是一件壞事啦…

 

最後CALL OUT竹竿格格幫忙支援,果然他之前懷疑MTU是對的,不過一直沒有給他搞個徹底XD

昨天下了一條iptables就解決了

 

 ///下面刪除線的地方可能資訊有誤

原因是出在MTU大小(Maximum Transmission Unit) 錯了,不是MTU的問題@@

PPPoE的MTU是1492byte,但Ethernet是1500Byte

所以當我內網要送封包經由Linux Router透過PPPoE出去時,會出代誌…封包將會被切割

不過講到這裡,不禁回想起當初使用pppoeconf這隻指令在設定PPPoE連線時不是應該要自動把MTU調整為1492嗎?

 

是的,他會調整到對的MTU,但是跟著MTU的還有一個叫做MSS的東西

它們兩個是有關係的,MTU=MSS+IP HEADER(20Byte)+TCP HEADER(20Byte) 所組成的

所以通常MSS的大小是MTU大小減掉40Byte

 

MSS是Router告訴連線對象要傳來的Layer 4 TCP Segment 大小不能超過所設定的值

超過的話在PPPOE出去會出現問題

 

真正的問題在於Client(內網的電腦)到Linux Router這一段,MSS設定值上並沒有變成PPPoE規範的1452Byte轉送出去

而是直接維持1460Mbyte到ppp0出去,所以封包會被切割

 ///以下都沒錯,請安心服用

 

而MSS又是什麼東西呢?

是Maximum Segmet Size的縮寫,其實就是實際傳輸資料量

下面這張圖可以看到TCP Segmet的結構,刪除TCP Header(32Byte)之後,Data部分就是MSS(為變量可調)

 

但今天不知道為甚麼pppoeconf設定MTU的同時卻沒有跟著連動MSS

所以導致MSS大小可能過大(或許還在1460Byte,小於符合與MTU的差距),造成通過封包切割

 

簡而言之,標題下的有點複雜,簡單來說發生封包被切割的時候可能會出現以下問題

1.如果有些封包不允許被切割(擁有DF bit 也就是don’t fragmet 不准切割的封包),再傳送出去網際網路之前,將會被丟棄,導致內網無法開啟一些網頁或者服務

2.不知道為甚麼Ubuntu 的 pppoeconf沒有一起調整MSS

 

今天就是要教大家怎麼手動調整MSS

ifconfig或者ip link可以看到MTU大小

 

但MSS不行,所以要確保MSS與MTU間保持40Byte的差距時

手動強制設置MSS的大小

 

因為我的環境是pppoe聯外的Linux Server(當router)

所以都是以pppoe的最佳化MTU跟MSS

 

封包大小是個很重要的問題,因為除了pppoe會遇到

做Tunnel跟VPN還有IPsec等不同的情況下會有不同的MTU值,如果我上面講的都看得懂

要自己算出最佳數值不是問題

 

 

至於pppoe封包為何是1492Byte,與一般ethernet的封包1500Byte少了8Byte,這裡竹竿格格也有解釋

這裡稍作整理~

 

Layer-2 的 Frame Size最大允許為1518Byte

而Frame Header占掉18Byte

所以扣除Frame Header,得到Layer-3的 IP Packet 最大大小為1500Byte

 

而pppoe則是把IP Packet 再裝進一個 PPP Frame裡面

所以會多出PPP Frame的Header,佔8Byte

整個裝進IP Packet的PPP Packet不能超過原先的1500Byte,所以剩下來可以裝載其他部分的就剩下1492Byte也就是PPPoE的MTU

 

 

廢話不多說(靠杯是說很多了吧…),其實今天實做的步驟很簡單,只要一條iptables:

iptables -t mangle -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –set-mss 1440

 

可以很明顯看得出來該改哪邊吧~~

我是把這條一樣放在之前那幾篇網誌做的腳本再一起~,自行參考放置位置了!

 

這篇科普的成分比較多,不過要了解背景知識再來應用才是對的喔~

 

thx for:

竹竿格格

http://david50.pixnet.net/blog/post/748196-%E4%BD%95%E8%AC%82%22mtu%22

http://cappella.dante.com.tw/GuestBook/show.asp?Id=3420

http://www.kume.idv.tw/tags-MTU.html

http://en.wikipedia.org/wiki/Maximum_segment_size

http://en.wikipedia.org/wiki/Maximum_transmission_unit

http://blog.xuite.net/beavisliu/blog/15106473

http://ranjanbhandari.blogspot.tw/2010/07/tcp-explained.html

http://youadmin.wikispaces.com/SEC_NET_theory_tcp+packet (圖片出處)

21 Comments

  1. voyance gratuite en direct

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  2. http://www.voyantpartelephone.org

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  3. Suzuki GSXR

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  4. jeu de tarot gratuit

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  5. tarot gratuit en ligne

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  6. voyance gratuite amour

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  7. voyant

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  8. match en direct

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  9. match en direct

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  10. 20.00ok.kr

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  11. voyance amour

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  12. voyance discount

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  13. voyance gratuite par mail

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  14. voyance amoureuse

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  15. voyance gratuite audiotel

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  16. Website URL

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  17. pompe a chaleur geothermie

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  18. installation pompe à chaleur

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  19. pac air eau

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  20. pompe à chaleur piscine

    Linux防健忘日誌No.68-Ubuntu 12.04 調整Linux Router PPPoE的MTU解決封包破碎的問題 @ Nathaniel-終端機人生 :: 痞客邦 PIXNET ::

  21. this content

    linux防健忘日誜no.68-ubuntu 12.04 調整linux router pppoe的mtu解決封圅破碞的問顜 @ nathaniel-終端?人? :: 痞客邦 pixnet ::

Leave a comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料