我对网络有一个不错的理解,但是这个问题在我脑海中随机出现,我无法弄清楚。例如,如果我的 iPhone 在 3G 网络上使用,但也全天连接到我的家庭 wifi,应用程序如何知道是否向我的手机发送数据(无论是推送通知还是其他内容)通过我的蜂窝 IP 还是我的 Wifi IP 地址?蜂窝网络和我的家庭网络不会将我的手机与其自身相关联吗?
网络如何知道是通过互联网/wifi 还是通过蜂窝服务发送?
在这种情况下,您的手机至少有两个网络接口:WLAN 和 3G。每个接口都有自己的 IP 地址和掩码。它们通常作为电话路由表上的两条路由、本地连接的网络和默认网关安装。
让我们看一个简化的例子:
接口:Wifi IP/掩码:192.168.10.10 255.255.255.0 默认网关:192.168.10.1(您的家庭路由器)
接口:3G IP/掩码:10.10.10.10 255.255.255.0 默认网关:10.10.10.1(您到 ISP 的下一跳)
结果路由表:
目标接口指标
192.168.10.0/24 无线网络 0
0.0.0.0/0 无线网络 20
10.10.10.0 3G 0
0.0.0.0/0 3G 30
那么,当您的手机想要发送数据包时会发生什么?它检查目标 IP 地址与其自己的路由表,并决定将其发送到哪个接口。
- 如果您将数据包发送到 192.168.10.49,它会匹配第一行并通过 Wifi 接口发送。
- 如果您向 10.10.10.50 发送数据包,它会匹配第三行并通过 3G 接口发送。
- 如果您向 8.8.8.8 (Google DNS) 发送数据包,则有两个匹配项。这两行中哪一行优先?指标最低的那个。在这种情况下,它是第二行,您到互联网的数据包将通过 Wifi 接口。
在个人设备中,此指标是自动的。您的 iphone 足够智能,可以为 Wifi 设置较低的指标。
另一个答案很好地处理了来自设备的出站流量如何决定使用哪个网络连接。但是,您的问题似乎更多地是询问传入手机的数据(例如推送通知)如何决定使用哪个网络。
有多种方法可以做到这一点,但如果它确实是一种既适用于 WiFi 又适用于蜂窝网络的服务,那么它很有可能会定期“打电话回家”或建立并保持与服务器的连接。
当设备/应用程序正在登记或“打电话回家”时,它可以收集为其存储的任何消息。在这种情况下,它的工作方式与电子邮件非常相似,所有从服务器返回的流量都将返回到用于发送请求的任何 IP 地址。
另一种选择是设备/应用程序创建与服务器的连接并使其保持打开状态,以便服务器可以使用它在收到通知时立即将通知推送到客户端。如果您的设备连接/断开连接,设备/应用程序将重新建立与服务器的连接。同样,由于设备/应用程序将产生此流量,因此所有返回流量都将转到源 IP,无论是在您的 WiFi 网络还是您的蜂窝网络上。
只有一个默认路由处于活动状态,因此如果您同时启用这两个路由,它将选择一个。例如,如果两者都可达,则使用wifi,如果wifi不可达则使用3G。路线基本平衡,有偏好。