网络知识简介
- 在Android上,首先APN可以配置MTU,在发起PDN请求的时候将MTU参数下发MD,但是实网发现上层设置的MTU不生效,在Modem建立链路成功返回的信息里面mtu仍然为1500(无线网络,蓝牙的MTU会不同)。
- 参考MTK分析,是需要Route和Interface同步设置MTU才能正常工作,不然还是会出现丢包等问题,因此就要同时开发上下层匹配MTU大小。
数据传输原理
- 数据包在传输过程中通常会先经过网络设备,然后再经过路由器。
- 网络设备包括交换机、网桥等,可以在局域网内进行数据包的转发和路由;
- 路由器则主要用于不同网络之间的数据包转发。
- 网络设备主要负责本地网络内的数据包转发和交换,而路由器则负责不同网络之间的数据包转发。
- 当数据包从源主机发送出去时,首先会经过本地网络设备(比如交换机或者集线器),然后通过路由器Router传输到目标主机所在的网络。
- 在目标网络中,数据包同样会经过网络设备(可能是交换机或者路由器),最终到达目标主机。
MTU工作逻辑规则
1、如果 Route MTU 设置比 NetDev MTU 大,那么大分片 100% 被网络设备丢弃。
当数据包经过路由器时,如果它的大小超过了路由器的最大传输单元,路由器会丢弃该包并发送一个“ICMP Fragmentation Needed”消息通知源主机需要分片。但如果发送端的 NetDev MTU 小于 Route MTU,则源主机会将大数据包传输到路由器,然后路由器会丢弃该包并发送一个通知。这种情况会造成不必要的网络拥塞和资源浪费。
2、NetDev MTU 设置比运营商网络的 MTU 大,那么 IP 包(网络层)穿不过网络路由。
NetDev MTU:NetDev MTU是网络设备的最大传输单元,指的是在数据链路层上可以传输的最大数据包的大小。在Linux系统中,可以通过设置每个网络设备的NetDev MTU来控制数据包的大小。这个设置会影响到特定网络设备所能够传输的数据包的大小限制。
Route MTU:Route MTU指的是在网络通信中两个节点之间传递数据时所支持的最大传输单元。Route MTU是根据网络路径中最小的链路上的MTU来确定的,以确保数据包在整个网络路径中不被分片。如果两个节点之间的最小链路MTU小于数据包的MTU,路由器会进行分片处理,以确保数据包能够成功传输。在路由器上,可以通过路由表项中的MTU字段来配置Route MTU。
Android MTU
MTU(Maximum Transmission Unit)是指数据包在网络传输中的最大大小,在 Android 中,可以通过配置来设置。Android 系统默认的 MTU 大小为 1500 字节,也可自定义 MTU 大小,以满足特定的网络需求。
配置MTU的接口方法
Android 中的 NetworkInterface 对象能进行MTU配置。
首先,获取要配置的网络接口对象,例如 Wi-Fi 接口。然后,使用该对象的 setMtu 方法来设置 MTU 大小。例如:
NetworkInterface wifiInterface = NetworkInterface.getByName("wlan0");
wifiInterface.setMTU(1400);
Note:
- 在大多数情况下,使用默认的 MTU 大小即可满足网络需求。修改 MTU 大小可能会导致网络传输的稳定性和兼容性问题。
- 在设置 MTU 后,需要确保所有使用该网络接口的网络传输都能正确处理该 MTU 大小。例如,在使用 TCP 传输数据时,确保 TCP 连接的 MSS(Maximum Segment Size)不超过 MTU 大小。否则,数据包可能会被分片,导致传输效率降低。
Android T:frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DataConnection.java(android-13.0.0_r3)
在Android U上删除了dataconnection目录,DataConnection变成了proto被mainline了?
Android U:frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataNetwork.java
MTK可以设置/proc/sys/net/ipv4/tcp_mtu_probing:1 开启MTU 探测功能。
在 Linux 系统中,/proc/sys/net/ipv4/tcp_mtu_probing 参数用于控制 TCP 协议的 MTU 探测功能。当将该参数设置为1时,即开启 MTU 探测功能。
MTU 探测功能的作用是在网络通信过程中,动态地调整 TCP 报文的最大传输单元 (MTU) 大小,以提高网络传输效率和减少数据包的重传率。
当建立 TCP 连接时,系统默认会使用路径 MTU (Path MTU)来确定数据传输的最大单元大小。但在网络通信过程中,由于网络拓扑结构复杂和各种网络设备的存在,可能会出现路径中某个节点下的 MTU 小于建立连接时的 MTU 大小,导致数据包被分段传输,甚至被丢弃。MTU 探测功能就是为了解决这个问题,它能够检测到路径中的最小 MTU 大小,并在需要时自动降低 TCP 报文的大小,避免数据包分段、丢失或超时。
开启 MTU 探测功能可以提高网络传输的灵活性和鲁棒性,尤其在面对复杂的网络环境时能够更好地适应不同节点的 MTU,提高数据传输的成功率和速度。