我正在开展一个项目,我必须通过互联网在计算机之间发送信息。通常,确保没有太多模糊的明显解决方案是端口转发。但是,我注意到像Skype这样的应用程序能够打开这些连接而不会使用户端口向前(在大多数情况下)。当你能够使用诸如netstat之类的工具检索通话另一端的人的IP时,我注意到了这一点。
所以我的问题是:Skype和“其他”应用程序如何设法做到这一点? “普通”路由器有多开放?
注意:我没有太多关于网络的知识,这可能是微不足道的,但如果你对这个主题或与网络有关的任何东西有任何好的读物,我会很感激。
答案 0 :(得分:1)
Skype使用一种称为“打孔”的技术来通过防火墙。
我写了很长的描述here。从那以后:
通常,打孔需要以下内容:
- 一个外部公共服务器,它是初始连接的目标,有助于协调连接过程。
- NAT背后的两个同伴,最终将直接连接。
- NAT实施在他们接受的流量中是宽松的,并且可以预测它们的运行方式。
- 一种协议(如TCP),它接受的流量较宽松,特别是使用状态机和消息 比假定的服务器/客户端角色更对称 在更高的层次。
一般过程(请记住,这只是一个粗略的草图) 用于打孔的是:
- 对等方连接到中央公共服务器,并就哪些对将进行连接达成一致。
- 中央服务器为每个NAT识别未来的传出连接是如何创建的(当对等方建立连接时) 通过NAT然后必须在NAT上打开一个端口才能接收 响应;通常使用的端口号是顺序的。
(实际上,上面的细节是针对TCP打孔的。有可能Skype使用UDP,但总体思路类似)。
答案 1 :(得分:0)
没关系,显然这是使用代理连接的中间服务器来完成的。