我从没想过这个,我已经编程多年了。像聊天程序或torrent程序这样的P2P程序如何设法在两个对等体之间创建连接,而不会打开任何端口?我知道我还没有为Skype开辟一个端口,但我可以向我的朋友发送和接收大文件,我很确定所有这些千兆字节都没有通过Skype服务器。或者他们呢?
滔滔不绝?我可以将数据上传到同行,我也没有打开任何端口。
我很确定答案是语言非特定的,但如果我错了,我的代码主要是用C ++编写的。提前谢谢。
答案 0 :(得分:1)
你只需要打开一个端口"用于入站连接。一个对等体将打开一个侦听端口,然后指示另一个对等体连接到它。如果连接失败,对等方通常会交换角色并重试。如果连接仍然失败,则中止传输,或者如果成功则使用服务器中继。
对于每个侦听对等体,如果端口在路由器/防火墙后面,则对等体可以可编程地指示路由器/防火墙打开端口以转发到对等体的入站连接(一些路由器支持uPNP,以及一些防火墙)拥有自己的API),或者同行可以尝试使用各种"打孔"欺骗路由器/防火墙打开转发端口的技术(某些路由器/防火墙不容易受此影响)。
阅读本文了解更多详情:How Skype & Co. get round firewalls