Android TCP/IP MTU的构建时配置

Android TCP/IP MTU的构建时配置,android,tcp,ip,mtu,Android,Tcp,Ip,Mtu,我知道可以在运行时读取和设置MTU,例如: adb shell ip -d -s l l dev rmnet0 adb shell ifconfig rmnet0 mtu <MTU> adb shell ip-d-sldev rmnet0 adb外壳ifconfig rmnet0 mtu 问题是,重新启动手机后,以这种方式设置的MTU无法保持 那么,在使用Android开源项目源代码构建自己的构建时,如何为接口配置默认MTU 似乎在任何地方都没有提到这一点,而grepping代码

我知道可以在运行时读取和设置MTU,例如:

adb shell ip -d -s l l dev rmnet0
adb shell ifconfig rmnet0 mtu <MTU>
adb shell ip-d-sldev rmnet0
adb外壳ifconfig rmnet0 mtu
问题是,重新启动手机后,以这种方式设置的MTU无法保持

那么,在使用Android开源项目源代码构建自己的构建时,如何为接口配置默认MTU

似乎在任何地方都没有提到这一点,而grepping代码似乎也无济于事。另外,默认的Linux内核配置文件在Android中似乎不存在


一定有办法做到这一点,对吗?

显然,PMTUD是一个更好的解决方案(RFC 4821)。 可以在init.rc(例如system/core/rootdir/init.rc)中的AOSP构建中启用它,方法是在“启动时”部分的末尾添加以下行:


…为什么需要这样做?一些运营商网络在默认Android MTU为1500时无法正常工作。因此,需要将其降低(例如,降低到1400)以使移动数据正常工作。由于大多数网络在系统中都设置了正确的值。您如何设置mtu?我有一个根手机,当我运行命令设置mtu时,如:adb shell ifconfig rmnet0 mtu 1440,它会给我错误:SIOCSIFMTU(不允许操作)听起来你的手机根不够。或者只是加上一个小“su”:su ifconfig rmnet0 mtu 1440你是对的,我试着在没有su的情况下在adb shell上运行它。它现在工作:)我有一个问题,你如何永久设置这个mtu,正如您所提到的,需要在tcp_mtu_中写入一个值,以探测您是如何使用adb shell执行此操作的?如果您不想触摸ramdisk,通常会使用Init.d作为引导脚本。
on boot
# Other configurations here...

# Set TCP MTU Probing to automatic:
    write /proc/sys/net/ipv4/tcp_mtu_probing 1