P2P也不是什么特别新的手段了,在BT之前就已经有了一些不同形态的P2P软件,然而它们都比较侧重于共享而不是下载,因此把P2P主要作为一种下载手段,就是BT的创新之处。
谈到BT,也不能不谈到路由器,和BT的共享精神类似,路由器也是一种共享带宽的精神,随着宿舍和家庭用机的增多,越来越多人的购买了路由器,从而实现多台电脑共用一个网络接口上网的便利功能。然而,BT和路由器这两种共享精神却引起了一些矛盾,一些人发现在路由器后面进行BT下载,几乎总是连接不到任何其他用户,或者下载速率跟不用路由器相比相差甚远。这是为什么呢?我们先从路由器的NAT功能谈起。
Router——路由器,是连接不同网络的工具,它起到网络协议转换和网络地址转换的功能,这种网络地址转换,通常是指NAT(Network Address Translate,网络地址转换),就是它和BT的下载方式存在着一些不协调之处。
什么是NAT?
“NAT”(网络地址转换) 是一种IETF(Internet Engineering Task Force)标准,用于允许专用网络上的多台PC机(使用专用地址范围,例如 10.0.x.x、192.168.x.x、172.x.x.x)共享单个、可全局路由的IPv4地址。经常部署NAT的一个主要原因就是IPv4地址日渐紧缺。NAT对于解决IPv4地址耗费问题(在IPv6部署中却没必要)尽管成效及时,但毕竟属于临时性的解决方案。这种IPv4地址耗费问题在亚洲及世界其它一些地方已比较严重,且日渐成为北美地区需要关注的问题。这就是人们为什么长久以来一直关注使用IPv6来克服这个问题的原因所在。除了减少所需的IPv4地址外,由于专用网络之外的所有主机都通过一个共享的IP地址(就是具有NAT功能的机器地址——本文即是路由器)来监控通讯,因此NAT对Internet而言还隐藏了专用网络的内部结构信息,提供了一个隐匿层。一般称NAT本身就是一个天然防火墙,NAT与防火墙或代理服务器不同,但它确实有利于安全。
常规NAT操作:NAT设备维护一个专用网络不同机器到对外部网络的端口的映射组成的表,外部IP地址和端口就是该数据通讯用于取代内部客户机IP地址和端口的公共IP地址和端口。传输的时候NAT设备将来自客户机专用内部IP地址和端口的数据包的源字段转换为NAT设备的公共IP地址和端口,从而对这些数据包进行转换,接收的时候则按照映射表反而为之。
NAT 的作用在于:客户机将能在全球Internet上与专用 IP 地址进行通讯,而应用程序或客户机却无需做任何额外的工作。这意味着应用程序不必调用其它API,而客户机也不必进行其它配置。这种情况下,NAT对于客户机和服务器应用程序就是透明的 - 所有对象都能正常工作。
然而,并非所有网络应用程序都使用能与NAT协同工作的协议。这就是问题的所在。
在很多服务器以及服务器软件中,通常监听一个或者多个网络端口以对客户端提供服务,然而NAT设备并不知道这些,假如服务器不主动发起连接在路由器内建立映射表,路由器就不知道发送进来的数据包是对应于哪一个内网用户。许多家庭建站用户都会碰到这个问题。
该问题最常见的解决办法是手动配置端口映射,使NAT设备将定向给NAT特定外部IP地址和端口的通讯转发给该服务所用的内部IP地址和端口。利用端口映射,服务可以接收输入数据包,从而使服务可被专用网络外部的客户机所使用。一般情况下,HTTP服务器、FTP服务器以及BT下载都可以通过手动配置端口映射来解决。
手动配置端口映射后,BT下载速度回复正常了,然而手动配置该映射的过程通常比较复杂,要求较有经验的用户才能正确进行映射的配置。对于多个用户同时要进行BT下载的时候尤为如此。
路由器厂商自然也意识到了这些问题,意识到传统NAT技术的限制,因此,UPnP(Universal Plug and Play,通用即插即用)就出现了。
对于一个路由器而言,UPnP可以大略看作自动端口映射,它可以自动完成NAT设备上端口映射的操作。
路由器通过NAT Traversal(NAT穿越)功能来解决传统NAT技术的限制。NAT Traversal依赖于作为UPnP(通用即插即用) 论坛规范组成部分的Discovery and Control(发现及控制)协议,它是这样一组功能:它允许网络应用程序能明确自己位于NAT设备的后面,获得外部IP地址,并将端口映射配置为将NAT外部端口的数据包转发给应用程序所用的内部端口,而所有这些都是自动完成的,因此用户不必手动配置端口映射或其它类似的东西。
UPnP过程大略如下:支持UPnP的Internet网关设备(如路由器)可向局域网上的控制点(各种个人电脑)声明自己的存在并发布XML描述文档。利用这些 XML 描述文档,控制点(各种个人电脑)就能了解用于确定路由器是否支持NAT、获取NAT的外部IP地址及创建端口映射时需要调用的UPnP操作,然后相应的应用程序(如BT下载程序)就可以使用操作系统中提供的NAT Traversal API来自动实现相应的端口映射功能。UPnP无需用户安装特殊的软件以及进行繁琐的手动配置,大大提高了路由器的使用方便性,因此得到了广泛的应用。
UPnP的完整实现,需要路由器、操作系统、应用软件的共同支持。默认情况下,Windows XP中将安装NAT Traversal API以提供UPnP功能。Windows Me和Windows 98也可以通过添加系统组件的方式支持UPnP,方法是使用Windows XP CD上一个名为“网络安装向导”的工具。为提供附加XML分析程序支持,NAT Traversal API要求系统安装Internet Explorer 6.0。