Android 网络问题 - 有线以太网通过 ICMP ping 正常但无法建立 TCP 连接?当连接到 2 个网络时,不使用正确的网络

问题描述 投票:0回答:1

Android 平板电脑配置有线以太网连接(通过 USB 集线器)到没有互联网连接的路由器,并且还从不同的路由器连接到 WLAN,在该路由器上它可以上网。在此配置中,我们将获得良好的互联网连接,可以 ping 路由器(及其 LAN 上的其他设备),但无法与路由器建立 TCP 连接/通过路由器,例如,拉出路由器的网页。 (网络之间没有地址冲突。)

如果我们将平板电脑放在路由器的 WiFi 上,所有连接都可以正常工作(当然互联网除外)。 我还被告知(但要到明天才能测试)将路由器的空 WAN 端口连接到互联网连接的有线 LAN 可以使 Android 连接到路由器的 LAN。

当连接没有互联网时,Android 如何路由的一些问题? 在什么情况下 ICMP ping 可以工作但无法建立 TCP 连接? (似乎不是 MSS/MTU 之类的问题。)

编辑:注意到 traceroute 确实显示了用于有线路由器的数据包在无线路由器上死亡。

具体来说,安卓显示

Enet:IP 192.168.8.239 网关 192.168.8.1 掩码 255.255.255.0

WiFi:IP 10.2.234.131 网关 10.2.234.1 掩码 255.255.255.0

但看起来 Android 一次只有一个“网络”处于活动状态。这两个网络都有路由规则,可以按照自己的方式发送所有流量。我想指定一个跨接口的路由规则,比如将 Wifi 网络设置为活动并添加一条路由,如 192.168.8.0/24 -> eth0: 0.0.0.0,但文档说如果我添加一个 IllegalArgumentException具有不同接口的路由。

我看到的唯一替代方案是在 CAPABILITY_INTERNET 和 TRANSPORT_ETHERNET 之间来回切换活动网络,并尝试组织应用程序流量,以便在时间上永远不会重叠??

感谢您的任何见解!

android networking tcp icmp
1个回答
0
投票

我会把这个标记为答案,尽管在这种情况下我仍然不明白 Android 网络行为的某些方面。

正如上面所猜测的,Android 只允许 2 个网络中的一个在任何给定时间处于活动状态。我还没有找到系统用来决定在任何给定时间依赖哪个网络的指标的详细说明,尽管在我的示例中很明显,Android 确定的互联网连接缺失在系统不愿使用有线互联网连接。系统 API 确实允许应用程序强制使用特定网络,因此在上述方案中请求 TRANSPORT_ETHERNET 网络可以强制应用程序进入硬连线连接。但是,Android 是否可以通过设备的 WiFi 和以太网同时保持 TCP 连接的基本答案似乎是:不能。

剩下的问题是为什么 ICMP ping 在不支持 TCP 连接的非活动 Android 网络上工作。也许激活是在传输层进行调节的,以便可以随时唤醒的非活动接口对连接的设备始终保持活动状态?

© www.soinside.com 2019 - 2024. All rights reserved.