![为什么 UDP 套接字在 wifi 上运行正常,但在蜂窝网络上却不行?](https://linux22.com/image/564692/%E4%B8%BA%E4%BB%80%E4%B9%88%20UDP%20%E5%A5%97%E6%8E%A5%E5%AD%97%E5%9C%A8%20wifi%20%E4%B8%8A%E8%BF%90%E8%A1%8C%E6%AD%A3%E5%B8%B8%EF%BC%8C%E4%BD%86%E5%9C%A8%E8%9C%82%E7%AA%9D%E7%BD%91%E7%BB%9C%E4%B8%8A%E5%8D%B4%E4%B8%8D%E8%A1%8C%EF%BC%9F.png)
新手问题 -
我在 Linux 服务器上运行一个 perl 脚本,它打开 UDP 端口 7015。netstat -ulnp 显示:
udp 0 0 0.0.0.0:7015 0.0.0.0:* 16365/perl
远程机器上的 nmap -sU -p 7015‘hostname’显示:
7015/udp open|filtered unknown
现在,当我在 Android 设备上运行客户端 Java 程序并发送数据报时,它在 wifi 下可以完美运行,但在蜂窝网络下则无法运行 - 在关闭 wifi 或将设备移出 wifi 范围后。除了提供商可能阻止端口外,为什么此套接字可以在 wifi 下运行,但在 GPRS 下却不行?
答案1
蜂窝网络提供商在流量整形策略方面做了一些奇怪的事情。我敢打赌他们正在放弃 UDP。我知道有些网络和提供商在你的手机和网络之间有一个透明代理,可以对数据包进行一些“顽皮”的重写。有时他们会重写数据包并欺骗 TCP 握手,以便看起来加载速度更快。
在这种情况下,我敢打赌他们会默默地丢弃这些流量。你可能对此无能为力。当我编写 Android 应用程序时,我会不遗余力地确保与主机的所有连接都是通过 HTTP 以 RESTful API 的形式进行的,因此在大多数情况下,它看起来就像一个正常的网络连接。