p2p打洞机制

来源:互联网 发布:美女程序员 编辑:程序博客网 时间:2024/06/05 22:44

tcp打洞

首先我们明确现在我们有的设备:
1、客户端A,网关NAT-A
2、客户端B,网关NAT-B
3、服务器S

这些设备明确之后,就可以介绍TCP打洞的过程:
1、首先服务器S开启两个服务监听,一个主连接端口,和一个协助打洞端口
2、A通过主连接端口连接服务器S,B通过主连接端口连接服务器S,这个是正常的服务器通信
3、当A需要和B进行直接连接时,首先A去连接服务器S的协助打洞端口,并向服务器发送和B的协助连接请求,服务器S收到请求后,向B发送A的外网地址(也就是NAT-A的地址)
4、B收到服务器S发来的A的外网地址后,就向A发数据,此时由于A并没有主动向B发过数据,NAT-A会认为这些数据是非法请求,会抛弃掉,并且B开启监听服务,等待A的连接,并告诉服务器它准备好了
5、服务器收到了B的准备连接的消息之后,就通过主连接把B的外网地址告诉A,A就可以直接去连接B了(因为B之前在第4部就向A发送过数据了,所以NAT-B会直接将A发来的数据转发给B),此时就可以成功连接上了

Udp打洞

udp打洞和tcp类似,只是tcp规定同一监听端口只能绑定一个socket套接字,而udp规定一个监听端口可以绑定多个socket套接字,所以udp不需要开启额外的协助连接端口,只需要开启一个端口就可以了

上述打洞都是有端的打洞
p2p视频直播——就是利用先进的p2p技术解决C/S视频直播模式无法解决的服务器端资源和带宽压力大,用户量提升后的视频质量降低等问题而提出的一种全新的解决方案。
-------------------------------------------------------------------------------------
UDP穿透率比较低的 是一种叫做 “圆锥形NAT (好像是叫做这个)”的 模型。。。这种模型的侦测,需要 2个公网IP  。。
音频点对点,去参考 freeswitch 项目,SIP 协议
目前。。。针对家用路由器市场,基本上都能打洞成功
nat分了几种,前两种很容易穿透,第三种需要做特殊处理,第四种没法穿
而且有的人家里还不是一级路由,是多级路由
但是,如果是 铁通、移动这种 非常混乱的 NAT网络。。。你就 皈依我佛吧
3G/4G 网络下。。基本上就不要考虑 UDP 穿透了。。。除非你使用“服务器转发”,P2P  基本上是要死翘翘的
解决方案就是 。。。永远使用“服务器转发”
现在路由器的穿透率不是很清楚,你可以写个测试程序试下,如果还是很低,就放弃穿透,直接Upnp + server转发就好了
特别是在 商业市场,需要有一定 用户体验和 QC 保证的情况下。。只有 “服务器媒体转发”才靠谱
P2P 就是 死路一条 前几天就说了。。不要在这种 领域浪费时间
我们做任何事情,都要讲究商业价值 和 实际可行性。P2P 可以在实验室研究,但是,要成为你的 “谋生”手段。。。过几十年再说吧


而P2P 模式。。。受制于网络架构、不同运营商的鸿沟、用户侧的防火墙设置 。。。。用户就会觉得“这家公司做事 时好时坏,不靠谱”
高级别的防火墙,直接 屏蔽UDP 入站
server ->a  .这个时候 因为  IP CONNTRACK 的原因,一定能回去
对于防火墙来说,  因为 有 A--->SERVER 在先,所以,“O ,原来 server 过来的这个 是 回复 A之前说的 。。。好吧,放行”
如果 没有 "A--》SERVER "在先。。。防火墙说 “我X,server 你发过来给谁啊,我不认识你,滚蛋”
 商业项目,永远 不要 提 “P2P” IPV6普及以后可能可以 

原创粉丝点击