1)在Android手机中,当我连接到3G时,我得到一个公共地址1.39.1.85,我从谷歌检查,我的手机的本地IP是10.145.15.50我以编程方式获得。 2)这两个地址如何分配?由BTS? NAT? 3)两个移动节点是否可以拥有相同的公共IP地址? 4)我知道NAT和防火墙。
我试过UDP打孔: A)使用Mobile A,我将UDP数据包发送到UDP服务器java程序,该程序捕获其公共IP和端口。 b)使用Mobile B,我将UDP数据包发送到UDP服务器java程序,该程序捕获其公共IP和端口。 c)每次我收到服务器中的数据包时,我都会回复UDP数据包,我可以在移动设备上收到回复。 d)但是当我尝试交换每个移动设备的IP和端口并发送数据时。我无法在任何一部手机上接收任何数据。
这可能是什么问题?
请尽可能以技术说明。
答案 0 :(得分:1)
在4)中,您说您了解NAT和防火墙。那么你也应该知道IPv4短缺。
因此,在您的提供商处,移动节点获取私有IP地址(来自G3提供商的DHCP服务器,公共地址只是该提供商从其提供商处获得的地址)
NAT的重点是多个设备共享相同的公共IP地址,因此YES 2移动设备可以拥有相同的公共IP地址,特别是如果它们位于相同的提供者可能位于同一区域(连接到相同的桅杆/天线)。
NAT的重点是尽可能多地使用一个公共IP地址。您可能会在此私有IP范围内获得DNS服务器,并且很可能像HTTP这样的流量是通过透明代理运行的。你不知道,但如果代理中的内容足够新鲜(但这是另一个故事),你的很多联系甚至都没有到达互联网
现在,如果NAT路由器(ca和cb)后面的两个(或更多)设备访问两个不同的网站(sa和sb),该怎么办?路由器可以选择在其公共IP地址上使用相同的端口向服务器发送请求,以便在此公共IP地址/端口组合上回复路由器的答案很容易区分:来自sa的流量必须转发到ca ,从sb到cb的答案。
这样,客户端创建的端口转换只能由客户端首先访问的服务器使用。
小型家用路由器,其中有5台设备正在使用它(我的小型家庭网络最后计数为30台)与大型电信提供商使用的大型设备截然不同。我们的家用路由器不一定非常经济,它有65,000多个可用的公共IP端口。这是大型电信提供商的另一个故事。 因此,虽然家庭路由器上的端口转换可以非常可预测,但对于大型电信提供商来说并非如此。
谷歌有点"团队观察者如何运作"。在那里你会发现dat teamviewer在很大程度上依赖于路由器端口转换的可预测性。
在10%(或更多)连接中,无法进行直接连接,整个会话通过服务器运行。服务器与每个客户端进行双向通信(就像在请求后接收网站一样),服务器端的信息从一个连接转发到另一个连接并返回。
这会回答你的问题吗?
答案 1 :(得分:1)
我不知道完全锥形,地址受限和端口受限的术语。所以我也学到了。
这是怎么回事:
路由器以一张废纸(读取端口转换内存)开始。它就像记忆中的一张桌子。 当从本地LAN启动到公共IP空间的连接时,将在此表中创建一条记录: ,TCP / UDP,来自-IP,来自端口,已转换端口,dest-IP,dest-port
此表用于两件事: - 当启动新连接时,路由器需要知道转换端口,dest-ip,dest-port组合是否仍然是空闲的(否则它无法区分传入流量) - 当流量从互联网回来时,"来自"和"目的地"因此,传入的数据包destination-ip,from-ip,from-port应匹配来自当前转换表的转换端口,dest-ip,dest-port记录。然后路由器可以反转数据包上的魔法,用原始的from-ip替换dest-ip(=公共IP路由器),并用端口替换dito。
对于TCP连接,只要连接关闭,就可以删除此转换记录。 TCP使用sys / sys-ack / ack来启动连接,并且还有一种明确的方式可以说好。
对于UDP,事情有点棘手。 UDP是无连接的。因此路由器必须保持翻译记录打开一段时间。
每次使用规则,传入或传出时,它都会更新时间戳。
最好也为TCP连接执行此操作。如果TCP连接的使用时间过长,它也应该删除翻译记录。
所以,只需通过路由器保存良好的旧记录。 (请你尊重这些事。)