1)在Android手机中,当我连接到3G时,我获得了一个公共(public)地址1.39.1.85,该地址是我从google检查过的,而我的手机的本地ip是通过编程获得的10.145.15.50。
2)这两个地址是如何分配的?防弹少年团? NAT?
3)两个移动节点是否可以具有相同的公共(public)IP地址?
4)我了解NAT和防火墙。
我尝试了UDP打洞:
A)使用移动设备A,我向UDP服务器Java程序发送了一个UDP数据包,该程序捕获了其公共(public)ip和端口。
b)使用移动B,我向UDP服务器java程序发送了一个UDP数据包,该程序捕获了它的公共(public)ip和端口。
c)每当我在服务器中收到数据包时,我都会用UDP数据包答复,并且能够在Mobile中接收答复。
d)但是当我尝试交换每个移动设备的IP和端口并发送数据时。我无法在任一手机上接收任何数据。
这里到底是什么问题?
请尽可能以技术性的方式进行解释。
最佳答案
在4)中,您说您了解NAT和防火墙。然后,您还应该知道IPv4短缺。
因此,在您的提供商上,移动节点从G3提供商的DHCP服务器获得一个专用IP地址,而公共(public)地址只是提供商从其互联网提供商处获得的地址。
NAT的要点是,多个设备共享相同的公共(public)IP地址,因此YES 2移动设备可以具有相同的公共(public)IP地址,特别是如果它们位于同一提供商(可能位于同一区域)(连接到同一桅杆/天线)。
NAT的全部目的是让尽可能多的设备成为一个公共(public)IP地址。您很可能在此私有(private)IP范围内获得了DNS服务器,最有可能的情况是,像HTTP这样的流量是通过透明代理运行的。您不知道,但是如果代理中的内容足够新鲜,那么您的许多连接甚至都不会到达互联网(但这是另外一回事了)
现在,如果NAT路由器(ca和cb)后面的两个(或更多)设备访问两个不同的网站(sa和sb),该怎么办?路由器可以选择使用其公用IP地址上的同一端口将请求发送到服务器,因为在此公用IP地址/端口组合上返回到路由器的答案很容易区分:来自sa的流量必须转发到ca ,以及从sb到cb的答案。
这样,客户端创建的端口转换只能由客户端首先访问的服务器使用。
小型家庭路由器运行着5个mayby设备(我的小型家庭网络最多可以容纳30个路由器),与大型电信提供商所使用的大型路由器相比,它们的存在截然不同。我们的家用路由器具有65.000+个可用的公共(public)IP端口,并不一定要非常经济。对于大型电信提供商来说,这是另一个故事。
因此,尽管家用路由器上的端口转换非常可预测,但大型电信提供商却并非如此。
Google谈到了“teamviewer的工作原理”。在那里,您会发现dat teamviewer严重依赖路由器对端口转换的可预测性。
在10%(或更多)的连接中,无法进行直接连接,并且整个 session 都通过服务器运行。服务器与每个客户端进行双向通信(就像在请求后接收网站一样),并且服务器端将来自一个连接的信息转发给另一个并返回。
这回答了你的问题了吗?
关于android - 3G中的NAT如何工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28292453/