网络诊断:将宽带路由器MTU从1500修改成1480,为何可以解决某些app无网络问题?

2020-04-1320:14:35 评论 1,425

 

问题描述

移动宽带路由器MTU=1500时某些app无网络,改成1480就解决了,是什么原因造成的?

 

网络诊断:将宽带路由器MTU从1500修改成1480,为何可以解决某些app无网络问题? 1

 

 

正文

出问题的APP,使用手机默认MTU =1500来发送TCP报文。到达宽带路由器WAN出口时,由于WAN口需要添加8个字节PPPoE协议头等,使得TCP报文总长度为1508+字节, 大于WAN接口的MTU值, 1500字节

 

迫使宽带路由器需要将TCP报文分片,这里又分两种情况:

 

  • 分片失败

IP报文头DF=1路由器无法分片,只好丢弃处理。随后给APP所在手机发送ICMP出错消息。

 

网络诊断:将宽带路由器MTU从1500修改成1480,为何可以解决某些app无网络问题? 2

 

ICMP消息到达APP手机所在的IP层,IP层将消息传递给TCP处理。但是,TCP并没有将重传队列的报文修改为更小尺寸,而是继续发送“重传队列”里原始报文!!!

 

很显然,重传的原始报文依然会被丢弃,最终导致通信的障碍!

 

  • 分片成功

IP报文头DF=0,路由器分片处理,分成2片。2个分片愉快到达目的地,但目的地对分片很敏感,认为是不怀好意的碎片攻击报文,一丢了之。这同样会导致通信的障碍!

 

 

读者会有疑问,为何其它APP可以通信?

 

分两种情况:

 

  • 较小的MSS尺寸

没出问题的APP使用较小的TCP报文尺寸,比如536-1440,所以一切正常。

 

  • 正常的MSS1460)尺寸

尽管也会遭遇分片,但是目的地的服务器对分片很友好,没有鄙视而丢弃。而是将分片重组完成,并提交给应用程序,通信完全没有问题,尽管性能会有所下降。

 

 

重点来了,为何修改MTU1480就没有问题了?

 

手机APP会说,你宽带路由器修改MTU和我有啥关系,风马牛不相及啊!?

 

宽带路由器鄙夷脸:“You are too NAIVE”!难道你的流量不经过我家门口?我不可以修改你的MSS

 

网络诊断:将宽带路由器MTU从1500修改成1480,为何可以解决某些app无网络问题? 3

 

手机APP好像有点懂了。哦,原来你会偷偷修改我的MSS值,将它改小。当你的接口MTU = 1480时,你会将我的MSS修改成 1480 -20 -20 =1440 字节。我的TCP报文撑死也不会超过1480字节,不会被分片,不会受到歧视,对吗?

 

对的!宽带路由器露出欣慰的笑脸。。。

 

谢谢你的耐心解释!手机APP很诚恳地说道。

 

不客气!如果你听明白了,点赞并分享给你的小伙伴,那是对我最好的感谢! 

文章转载自微信公众号车小胖谈网络

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: