小弟在网上找了很多相关打洞的技术文章,原理是懂了,但是具体实现起来又遇到一些问题。
1.在两台主机都在不同内网的情况下,假设两台电脑都登陆了服务器,服务器知道两台电脑的内网和公网地址和端口,这时A往B打洞,A要发送三个消息,分别是服务器、对方公网地址和内网地址,我不知道顺序是什么,按道理是A发给服务器,然后服务器发给B,让B发给A,A才能直接发给B,还是A直接发给B(有可能会被丢弃),然后让B发给A,哪位达人做过相关项目的能不能告诉我下具体顺序。
2.就是UDP情况下keepalive包,是A发给B,还是发给服务器,求解
A与 B都可以与服务器通信了。如果 A此时想直接发送信息给 B,那么他可以从服务器那儿获得B的公网地址187.34.1.56:40000(假设),这个时候A是不能向B发送信息的,因为如果这样发送信息,NAT B会将这个信息丢弃(因为这样的信息是不请自来的,为了安全,大多数NAT都会执行丢弃动作)。现在我们需要的是在NAT B上打一个方向为202.187.45.3(假设为A的外网地址)的洞,那么 A发送到187.34.1.56:40000的信息, B就能收到了。这个打洞命令由谁来发呢,呵呵,当然是服务器。
总结一下这个过程:
如果 A想向B发送信息,那么 A发送命令给服务器,请求服务器命令 B向 A方向打洞。