动态ip拨号器原理分析(教你如何实现动态IP拨号)

网上找了很多,代码大堆,原理讲清楚透彻的不多。

本人找几篇讲得好的来整理一下。

一片技术文章,最主要的讲清楚原理,如果再有完整的能运行的源代码也可,关键是要把核心部分代码分析清楚。

(1)问题的由来:

(2)动态ip具体分析:

动态ip拨号器原理分析(教你如何实现动态IP拨号)

如图:

(192.168.0.2:1234->129.208.12.38:2000)

的数据包到了互联网上变为了

(202.103.142.29:62000->129.208.12.38:2000)。

一旦nat创建了一个session后,nat会记住62000端口对应的是192.168.0.2的1234端口,以后从129.208.12.38发送到62000端口的数据会被nat自动的转发到192.168.0.2上。(注意:这里是说129.208.12.38发送到62000端口的数据会被转发,其他的ip发送到这个端口的数据将被nat抛弃,这就是真正头痛的问题)这样clienta就与server s1建立以了一个连接。

如果client a的原来那个socket(绑定了1234端口的那个udp socket)又接着向另外一个服务器servers2发送了一个udp包,那么这个udp包在通过nat时会怎么样呢?

答案是net决定的,不同的net有不同的答案。

第一种最为理想,基本就是无需打洞;

第四种最糟糕,根本就不能打洞。好消息就是这种net基本没有,很少。

所以关键是第二和第三种net类型。

(3)实现步骤(各个实现可能都不一样)

(4)让内网主机做服务器

以上的应用主要在于做p2p软件,如果我们想用家里的电脑,做服务器,是不需要这项技术(“打洞”)的,应为我们可以把路由器设置为net1型,可以直接设置端口映射:

但还是需要一个外网固定ip的服务器来负责通知其他客服端,因为拨号时得到的ip(这其实也是外网ip,就是其他的计算机可以直接访问你的)每次还是变化的。

(5)花生壳是什么

花生壳是可以把这个变化的ip映射为固定域名的域名服务商,如果不需要域名服务,只要用ip访问即可的应用(比如数据库),是用不上这个软件的。

但是还有一种办法,如果你已经有一台有静态ip的服务器,在上面部署一个代理服务器(比如nginx),然后把这个动态的ip通知它就可以了。

发表评论

登录后才能评论