首页 > 技术文章 > 穿透内网,连接动态ip,内网ip打洞-----p2p实现原理

newjiang 2017-10-13 09:36 原文

转:http://blog.csdn.net/suhuaiqiang_janlay/article/details/60466333

 

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

(1)问题的由来:

(2)动态ip具体分析:

 

 

有一个私有网络192.168.0.2,client a是其中的一台计算机,这个网络的网关natA(一个nat设备)的外网ip是202.103.142.29(应该还有一个内网的ip地址,比如10.0.0.10)。如果client a中的某个进程(这个进程创建了一个socket,这个socket绑定1234端口)想访问外网主机129.208.12.38的2000端口,那么当数据包通过nat时会发生什么事情呢?

                                  (192.168.0.2:1234->129.208.12.38:2000)

                                   (202.103.142.29:62000->129.208.12.38:2000)。

其他的ip发送到这个端口的数据将被nat抛弃,这就是真正头痛的问题)这样client a就与server s1建立以了一个连接。

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

NAT设备的类型对于TCP穿越NAT,有着十分重要的影响,根据端口映射方式,NAT可分为如下4类,前3种NAT类型可统称为cone类型。
(1)全克隆( Full Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。任何一个外部主机均可通过该映射发送IP包到该内部主机。
(2)限制性克隆(Restricted Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。但是,只有当内部主机先给IP地址为X的外部主机发送IP包,该外部主机才能向该内部主机发送IP包。
(3)端口限制性克隆( Port Restricted Cone) :端口限制性克隆与限制性克隆类似,只是多了端口号的限制,即只有内部主机先向IP地址为X,端口号为P的外部主机发送1个IP包,该外部主机才能够把源端口号为P的IP包发送给该内部主机。
(4)对称式NAT ( Symmetric NAT) :这种类型的NAT与上述3种类型的不同,在于当同一内部主机使用相同的端口与不同地址的外部主机进行通信时, NAT对该内部主机的映射会有所不同。对称式NAT不保证所有会话中的私有地址和公开IP之间绑定的一致性。相反,它为每个新的会话分配一个新的端口号。

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

只有当内部主机先给IP地址为X的外部主机发送IP包,该外部主机才能向该内部主机发送IP包”

同时在该端口号上启动侦听(保证net类型3也能成功) B尝试与A的经过NAT-A转换后的公网IP地址和端口进行connect(这就是所谓“打洞”) (4)让内网主机做服务器

(5)花生壳是什么

数据库),是用不上这个软件的。

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


推荐阅读