android - 3G 中的 NAT 是如何工作的

标签 android sockets networking p2p 3g

1) 在 Android 手机中,当我连接到 3G 时,我得到一个公共(public)地址 1.39.1.85,这是我从 google 查到的,我的手机的本地 ip 是 10.145.15.50,这是我通过编程获得的。 2)这两个地址是怎么分配的?防弹少年团?网络转换? 3) 两个移动节点是否可以拥有相同的公共(public) IP 地址? 4) 我了解 NAT 和防火墙。

我试过UDP打洞: A) 使用手机 A,我将 UDP 数据包发送到 UDP 服务器 java 程序,该程序捕获其公共(public) IP 和端口。 b) 使用 Mobile B,我将 UDP 数据包发送到 UDP 服务器 java 程序,该程序捕获其公共(public) IP 和端口。 c) 每次我在服务器中收到一个数据包时,我都会用一个 UDP 数据包进行回复,并且我能够在移动设备中收到回复。 d) 但是当我尝试交换每个手机的 IP 和端口并发送数据时。我无法在任何一部手机上接收任何数据。

这里的确切问题可能是什么?

请尽可能用技术性的语言解释。

最佳答案

在4)中,你说你了解NAT和防火墙。那么你也应该意识到 IPv4 短缺。

因此,在您的供应商处,移动节点获得一个私有(private) IP 地址(来自 G3 供应商的 DHCP 服务器,而公共(public)地址只是供应商从其互联网供应商处获得的地址。

NAT 的全部意义在于多个设备共享相同的公共(public) IP 地址,因此是的,2 个移动设备可以具有相同的公共(public) IP 地址,特别是如果它们在同一供应商处并且可能在同一区域(连接到相同的桅杆/天线)。

NAT 的重点是让尽可能多的设备使用一个公共(public) IP 地址。您可能会在这个私有(private) IP 范围内获得一个 DNS 服务器,并且很可能像 HTTP 这样的流量是通过透明代理运行的。你不知道,但如果代理中的内容足够新鲜,你的很多连接甚至都无法访问互联网(但这是另一回事)

现在,如果 NAT 路由器后面的两个(或更多)设备(ca 和 cb)访问两个不同的网站(sa 和 sb)会怎么样。路由器可以选择使用其公共(public) IP 地址上的相同端口将请求发送到服务器,因为在此公共(public) IP 地址/端口组合上返回给路由器的答复很容易区分:来自 sa 的流量必须转发到 ca , 以及 sb 对 cb 的回答。

这样,客户端创建的端口转换只能由客户端首先访问的服务器使用。

小型家用路由器,背后可能有 10 台设备(我的小型家庭网络最后一次统计有 30 台)与大型电信提供商使用的大型路由器截然不同。我们的家用路由器拥有 65.000 多个可用的公共(public) IP 端口,因此不必非常经济。这是大型电信提供商的另一个故事。 因此,虽然家用路由器上的端口转换非常容易预测,但大型电信提供商的情况并非如此。

谷歌一下“teamviewer 的工作原理”。在那里你会发现 dat teamviewer 在很大程度上依赖于路由器端口转换的可预测性。

在 10%(或更多)的连接中,直接连接是不可能的,整个 session 都通过服务器运行。服务器与每个客户端有双向通信(就像在请求后接收网站),并且在服务器端,来自一个连接的信息被转发到另一个连接并返回。

这是否回答了您的问题?

关于android - 3G 中的 NAT 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28292453/

相关文章:

java - 带有注解的 GSON 自定义序列化

java - 如何在不失真的情况下将图像纹理到球体上

linux - IPPROTO_TCP 或 SOL_SOCKET

ruby - 如何在不利用其他 IP 地址的情况下从 Ruby 获取我机器的 IP 地址?

Docker 网络从默认网桥迁移

java - 如何销毁以前的 Activity

Android map 错误 "Could not find class ' android.app.AppOpsManager'”

c# - 学习WM6的书籍

java - 无法注册到文本安全服务器工作

Android 模拟器跨网络联网