Android MTU 学习笔记和常见问题

相关术语

缩写       说明
OSI开放系统互连参考模型(Open System Interconnection, OSI),简称OSI/RM。
MTUMaximum Transmission Unit,最大传输单元,数据包在网络传输中的最大大小。
MSSMaximum Segment Size,最大分段大小
ICMPInternet Control Message Protocol,互联网控制消息协议

OSI&TCP\IP协议

  • OSI七层划分为  应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
    • 抓包主要在网络层及以上
  • TCP/IP 5层模型从下往上依次为:物理层、数据链路层、网络层、传输层、应用层 。
  • MTU是属于数据链路层的概念,MTU限制的是数据链路层的payload,也就是上层协议的大小,例如IP,ICMP等。
    • 在TCP传输中,数据包分片的MTU(Maximum Transmission Unit,最大传输单元)大小是由网络设备的传输层协议决定的。MTU是指在网络传输中,能够传送的最大数据包的大小。在IPv4网络中,MTU的默认值为1500字节,而在IPv6网络中,MTU的默认值为1280字节。当数据包大小超过MTU时,网络设备会自动将数据包进行分片,以便在网络中传输。具体的分片规则是根据MTU大小来计算的,每个分片的大小一般为MTU减去IP和TCP协议头的大小。这样可以保证数据包在传输过程中不会被丢失或者损坏。
    • 一般情况:分片大小=MTU-IP/TCP协议头大小

OSI参考模型层级

数据传输单元

功能

TCP/IP协议簇

备注

7

应用层

应用层协议数据单元 APDU

文件传输,电子邮件,文件服务,虚拟终端

TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet

【数据封装】数据分片,因为文件过大不可能整个传输

6

表示层

表示层协议数据单元 PPDU

数据格式化,代码转换,数据加密

没有协议

5

会话层

会话层协议数据单元 SPDU

解除或建立与别的接点的联系

没有协议

4

传输层

段(Segment)

提供端对端的接口

TCP,UDP

【数据封装】接收应用层的分片数据,加入TCP头部地址变成数据段

3

网络层

  • 包(分组)
  • 数据包(Packet)

为数据包选择路由

IPICMP,RIP,OSPF,BGP,IGMP

  • 对于一个通信子网来说,最多只有到网络层为止的最低3层。
  • 【数据封装】接收传输层数据段,加入IP头部成数据包

2

数据链路层

帧(Prame)

传输有地址的帧以及错误检测功能

SLIP,CSLIP,PPP,ARP,RARP,MTU

  • MTU是数据链路层的概念
  • 路由器接收到的是帧,
  • 【数据封装】接收网络层数据包,加入MAC头部变成数据帧

1

物理层

比特(bit)

以二进制数据形式在物理媒体上传输数据

ISO2110,IEEE802,IEEE802.2

  • 传输二进制数据比特流
  • 【数据封装】接收数据帧转成bit流

Android MTU

在 Android 中,MTU(Maximum Transmission Unit)是指数据包在网络传输中的最大大小,可以通过配置来设置。Android 系统默认的 MTU 大小为 1500 字节,也可自定义 MTU 大小,以满足特定的网络需求。

配置MTU的接口方法

使用 Android 中的 NetworkInterface 类进行MTU配置。

首先,获取要配置的网络接口对象,例如 Wi-Fi 接口。然后,使用该对象的 setMTU 方法来设置 MTU 大小。例如:

NetworkInterface wifiInterface = NetworkInterface.getByName("wlan0");
wifiInterface.setMTU(1400);

Note:

  1. 在大多数情况下,使用默认的 MTU 大小即可满足网络需求。修改 MTU 大小可能会导致网络传输的稳定性和兼容性问题。
  2. 在设置 MTU 后,需要确保所有使用该网络接口的网络传输都能正确处理该 MTU 大小。例如,在使用 TCP 传输数据时,确保 TCP 连接的 MSS(Maximum Segment Size)不超过 MTU 大小。否则,数据包可能会被分片,导致传输效率降低。

DataConnection.java - OpenGrok cross reference for /frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DataConnection.java (aospxref.com)

问题经验

MTK可以设置/proc/sys/net/ipv4/tcp_mtu_probing:1 开启MTU 探测功能, 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值