移動寬帶路由器MTU值是1500時某些app無網絡,改成1480時解決是什麼原因?

不想飛的餘


出問題的APP,使用手機默認MTU =1500來發送TCP報文。到達寬帶路由器WAN出口時,由於WAN口需要添加8個字節PPPoE協議頭等,使得

TCP報文總長度為1508+字節, 大於WAN接口的MTU值, 1500字節

迫使寬帶路由器需要將TCP報文分片,這裡又分兩種情況:

  • 分片失敗

IP報文頭DF=1,路由器無法分片,只好丟棄處理。隨後給APP所在手機發送ICMP出錯消息。

ICMP消息到達APP手機所在的IP層,IP層將消息傳遞給TCP處理。但是,

TCP並沒有將重傳隊列的報文修改為更小尺寸,而是繼續發送“重傳隊列”裡原始報文!!!

很顯然,重傳的原始報文依然會被丟棄,最終導致通信的障礙!

  • 分片成功

IP報文頭DF=0,路由器分片處理,分成2片。2個分片愉快到達目的地,但目的地對分片很敏感,認為是不懷好意的碎片攻擊報文,一丟了之。這同樣會導致通信的障礙!

<strong>

<strong>

讀者會有疑問,為何其它APP可以通信?

分兩種情況:

  • 較小的MSS尺寸

沒出問題的APP使用較小的TCP報文尺寸,比如536-1440,所以一切正常。

  • 正常的MSS(1460)尺寸

儘管也會遭遇分片,但是目的地的服務器對分片很友好,沒有鄙視而丟棄。而是將分片重組完成,並提交給應用程序,通信完全沒有問題,儘管性能會有所下降。

重點來了,為何修改MTU到1480就沒有問題了?

手機APP會說,你寬帶路由器修改MTU和我有啥關係,風馬牛不相及啊!?

寬帶路由器鄙夷臉:你的流量經過我家門口時,我不可以修改你的MSS?

手機APP好像有點懂了。哦,原來你會偷偷修改我的MSS值,將它改小。當你的接口MTU = 1480時,你會將我的MSS修改成 1480 -20 -20 =1440 字節。我的TCP報文撐死也不會超過1480字節,不會被分片,不會受到歧視,對嗎?

對的!寬帶路由器露出欣慰的笑臉。。。

謝謝你的耐心解釋!手機APP很誠懇地說道。

不客氣!如果你聽明白了,點贊並分享給你的小夥伴!


車小胖談網絡


mtu是最大傳輸單元的意思,設置多少是要跟局端路由器相同,一般局端是1500或者1485,如果局端是1485的話,那你設置1500那就不通了…


分享到:


相關文章: