p2p的UDP打洞原理-LMLPHP

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

1.为什么要有UDP打洞?

可以从图中看出,ClientA访问Server时。先是要通过NAT,经过这一层的转换后,他的内网IP会被换成NAT的公网IP,并且会为ClientA的此次访问事件分配一个临时的端口。

这能解决IP地址日益匮乏的问题。因为NAT的存在,可以是多台Client共用一个公网IP地址。但是同时造成了一个问题。外网访问内网是很麻烦的。因为NA这个时候并没有为ClientA的每个端口提供映射。而是要用时,临时分配一个。那个如果外网的Server想主动发起通信是不可以的。同样的,另一个内网的ClientB想访问ClientA就更难了。

2.UDP打洞
如果ClientA发出连接Server的请求,那么NAT上就会有一个ClientA对应的通信端口的洞。这个时候外网的Server就可以通过这个洞来访问了。因为ClientA请求了Server,代表信任Server。那么Server通过这个洞就能和ClientA进行通信了。

但是要注意一个问题。如果ClientB知道了这个洞大多数情况下,也是不能发送消息给A的。会被NAT抛弃。因为不是可信来源。(要使得ClientB能发送信息给A的前提是。ClientA给ClientB发送一个消息。就像ClientA对B说,我相信你),那么这个时候Clinet'B再给ClientA发送信息,A就能接受到了。

3.打洞过程

(1)ClientA请求Server。

(2)ClientB请求Server。

(3)Server把ClientA的IP和端口信息发给ClientB。

(4)Server把ClientB的IP和端口信息发给ClientA。

(5)ClientA利用信息给ClientB发消息。(A信任B)

(6)ClinetB利用信息给ClientA发消息。(B信任A)

(7)连接已经建立。两者可以直接通信了。

//--------------------------------------------------------------
---------------------
作者:HotIce0
来源:CSDN
原文:https://blog.csdn.net/u011580175/article/details/71001796
版权声明:本文为博主原创文章,转载请附上博文链接!

更加详细的关于p2p理论文章:

http://bford.info/pub/net/p2pnat/

05-07 15:11