没有端口转发的两台计算机之间的通信如何?

时间:2012-07-07 13:59:54

标签: networking language-agnostic

我正在开展一个项目,我必须通过互联网在计算机之间发送信息。通常,确保没有太多模糊的明显解决方案是端口转发。但是,我注意到像Skype这样的应用程序能够打开这些连接而不会使用户端口向前(在大多数情况下)。当你能够使用诸如netstat之类的工具检索通话另一端的人的IP时,我注意到了这一点。

所以我的问题是:Skype和“其他”应用程序如何设法做到这一点? “普通”路由器有多开放?

注意:我没有太多关于网络的知识,这可能是微不足道的,但如果你对这个主题或与网络有关的任何东西有任何好的读物,我会很感激。

2 个答案:

答案 0 :(得分:1)

Skype使用一种称为“打孔”的技术来通过防火墙。

我写了很长的描述here。从那以后:

  

通常,打孔需要以下内容:

     
      
  • 一个外部公共服务器,它是初始连接的目标,有助于协调连接过程。
  •   
  • NAT背后的两个同伴,最终将直接连接。
  •   
  • NAT实施在他们接受的流量中是宽松的,并且可以预测它们的运行方式。
  •   
  • 一种协议(如TCP),它接受的流量较宽松,特别是使用状态机和消息   比假定的服务器/客户端角色更对称   在更高的层次。
  •   
     

一般过程(请记住,这只是一个粗略的草图)   用于打孔的是:

     
      
  • 对等方连接到中央公共服务器,并就哪些对将进行连接达成一致。
  •   
  • 中央服务器为每个NAT识别未来的传出连接是如何创建的(当对等方建立连接时)   通过NAT然后必须在NAT上打开一个端口才能接收   响应;通常使用的端口号是顺序的。
  •   

(实际上,上面的细节是针对TCP打孔的。有可能Skype使用UDP,但总体思路类似)。

答案 1 :(得分:0)

没关系,显然这是使用代理连接的中间服务器来完成的。