1.简介
在当今的互联网中,中间设备(middleboxs)的使用非常普遍,例如网络地址转换设备(NAT),其主要原因在于IPv4地址空间的枯竭。中间设备的使用会产生非对称的寻址和连接,而像电话会议和多人网络游戏这样的p2p应用及协议也会因此出现一些特殊的问题。就是使用了IPv6,NAT依然会为兼容IPv4而经常存在,或者即使不再需要NAT,防火墙也会司空见惯,因此上面的问题仍就会有。
当前部署的中间设备主要是围绕C/S模型设计的,匿名的客户端主动发起连接,连向具有固定IP和DNS的服务器。大多数中间设备实现了非对称的通信模型,即内网主机能向外主动连接到公网主机,然而反之不能,除非中间设备管理员做了特殊配置。使用NAPT(网络地址/端口转换)时,内网主机通常不会拥有一个可路由的公网地址,取而代之地是在NAPT的控制下,该主机与内网中的其他主机共享一个公网地址。位于中间设备之后的内网主机,具有匿名和无法访问的特点,这对于只需向外主动连接的客户端软件,例如web浏览器,就不是一个问题,某种程度上,无法访问还有保密的好处。
在p2p的模型中,网络主机(Internet hosts,即一般意义上的客户端)之间需要建立直接的通信会话。发起主机和响应主机可能位于不同的中间设备之后,它们或许没有固定的IP,或者即使有也不是公网IP。举例来说,在一种普通的网络游戏构架中,参与的主机都要连接到已知的服务器进行初始化并进行游戏,为了在游戏中快速有效的更新数据,这些主机之间也要建立直接的通信。同样地,一个文件共享程序也许要连接到服务器去查询资源,但在文件传输地时候却需要建立直连。中间设备为p2p连接制造了不少麻烦,位于中间设备之后的主机没有可用的公网端口,导致了它们无法接收来自其他主机直连而来的Tcp或Udp连接。RFC 3253[NAT-APPL]简要地提到了这个问题,但是没有给出任何通用的解决方案。
在这篇文章中,我们用两种方式讨论p2p/middlebox的问题。首先,我们对现有中间设备下的已知p2p工作原理做一总结。然后,为使p2p程序更为健壮地操作,基于已有的实践并结合当前部署的中间设备,我们提供了一组程序设计之南。接下来,我们提供了一些设计方案,以使将来的中间设备更为有效地支持p2p应用。讨论的焦点是如何穿透中间设备以满足p2p应用程序的需求。