为什么需要打洞呢?主要是不同局域网的电脑,他们通过一台路由器连接Internet上外网,由于不同局域网的电脑IP是内部IP,连接外网是通过内网的服务器的路由器临时分派一个通信端口实现的,局域网络内部的电脑并不是真正Internet上的一个节点,这样不同局域网络的电脑肯定无法通过Internet直接通信了(因为他们之间根本不知道对方在哪里)。那是不是没有办法实现呢?肯定有,那就是把很多人都整得迷迷糊糊UDP打洞技术。
网上很多文章,又是图有是表,又是一大堆理论,看起来很专业,其实很多人讲了半天,估计自己很可能没有真正写过打洞程序, 让我们这些写代码的人云里雾里!其实我用几句话就能说明白:
1)打洞技术需要借助一个真正的Internet服务器,目的让对方都能找到这个服务器上的桥接器(其实就是我们编程人员写的一个程序啦)。
2)打洞的A和B双方都需要连接到这个服务器上的桥接器,连接成功后,这个桥接器将需要打洞的A、B双方的IP和通信端口(双方局域 路由器临时分派的Port)做好记录。
3)桥机器分别告诉A和B对方的IP和端口。
4)A直接向B发请求,B也向A发请求,这样通信建立了。
注意大多数路由器都支持打洞,有的不一定。另外路由器分派的端口,很多情况下是变动的(5分钟可能变一次),桥机器应该动态更新这个Port且告诉对方。
UPD实现不同局域网的电脑直接通信,不通过服务器转发,QQ等软件发文件基本上UDP这种方式,这样降低服务器开销,实现更加高效的点对点通信。
很多朋友问TCP能打洞吗?我觉得不能,因为TCP是面上连接的,技术应该不可行。
今天晚了,不想写了,如果有需要列子的朋友,可以联系我。