UDP ”打洞“

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)连接已经建立。两者可以直接通信了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值