• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 无线通信 > 技术文章 > 利用Vista和WCF中强大P2P通信功能

利用Vista和WCF中强大P2P通信功能

录入:edatop.com     点击:

摘要:WindowsVista中的P2P开发是一个极其广泛的主题,没有任何一篇文章可以将其阐述完整。因此,我不会去尝试完成这样一个不可能的任务,而是会介绍WindowsVista中一些不同的P2P技术,并为您对P2P开发工作提供背景资料。

在我们多数人考虑点对点(P2P)应用程序时,自然而然就会想到即时消息传送应用程序、简单文件共享程序和游戏。一般情况下,在我们考虑分布式应用程序设计时,已经习惯于默认选择客户端/服务器模型,几乎很少会想到P2P模型,哪怕是一闪而过的念头,尤其是对于业务应用程序更是如此。我们为什么都关注于客户端/服务器模型,其主要原因很简单:P2P应用程序的开发过程一惯都成本高昂且耗时过长。

从传统意义来说,P2P应用程序开发所面临的难题包括:需要开发用于消息交换的专用协议;必须查找并连接隐藏在"网络地址转换"(NAT)或防火墙背后的某应用程序的实例;需要支持在广域网(WAN)中定位各应用程序所需的惯常基础结构。尽管上述难题可以克服,但已造成大量阻碍,这样就导致我们很多人都从未想过P2P应用程序所能提供的杰出的协作功能。

这些阻碍将随着WindowsVista™和附带的.NETFramework3.0版本的发布而明显改善。在将WindowsVista的增强功能与"对等名称解析协议"(PNRP)、PeopleNearMe(PNM)和Windows®CommunicationFoundation中引进的PeerChannel功能相结合的情况下,我们又向P2P应用程序跨进了一大步。我个人期望在发布WindowsVista之后,P2P的舞台会更加绚丽多彩。

WindowsVista中的P2P开发是一个极其广泛的主题,没有任何一篇文章可以将其阐述完整。因此,我不会去尝试完成这样一个不可能的任务,而是会介绍WindowsVista中一些不同的P2P技术,并为您对P2P开发工作提供背景资料。

除了假定您已基本了解Windows窗体之外,我还假设您已略微熟悉WindowsCommunicationFoundation应用程序的编写。

P2P基本原理:网格网络

在深入探讨具体的P2P技术之前,研究P2P应用程序的一些基本原理很重要。对初学者而言,P2P应用程序是一个与该应用程序的其他实例直接相连的应用程序。在P2P语言中,该应用程序的每个实例都叫做一个节点。通常将这些节点连接和命名后的组合称为网格。因此,推动P2P应用程序开发的技术经常被称作网格技术。PNRP、PeerChannel(在WindowsCommunicationFoundation中)和PNM都是WindowsVista中网格技术的例子。

网格技术所有WindowsVista网格技术所生成的网格在拓扑结构上都大致相同。通常来讲,网格拓扑是网格中各节点间连接模式的抽象体现。为了解释清楚,请在脑海中设想一个网格。我敢断定,您所设想的网格在某种程度上与图1中所示的网格相似。

网格中四个节点中的每个节点都与网格中的其他所有节点相连。换言之,如果网格中有N个节点,则每个节点都保持N-1个连接。我们将达到此标准的网格视为全连接网格。全连接网格很少被用作适合的方法;要了解原因,让我们注意一下各节点间的连接。

网格中的节点基本上都使用现有的常用传输方式进行通信。与所有的现代操作系统一样,WindowsVista利用TCP/IP和UDP进行网络通信。如果TCP/IP是全连接网格所选的传输方式,那么由N个节点组成的全连接网格中的每个节点都必须创建或接收N-1个套接字。随着N值的增加,此模型显然变得不可行。例如,如果假定一个N=1000的情况,那么每个节点都将需要保持999个套接字,这简直就行不通。

要解决可伸缩性和WAN连接性的问题,您必须诉诸于部分连接的网格。顾名思义,部分连接网格中的节点只与网格中的其他少量节点相连。就P2P来说,这些相邻的节点被称作邻居。通常来说,部分连接网格对每个节点的资源需求更少,从而大幅提高了网格的可伸缩性。从理论上讲,部分连接网格的规模可以扩大到包括全球所有计算机上的所有应用程序。

加入网格节点加入网格的方式取决于所使用的网格技术,但通常来讲,预期节点必须用网格名来解析网格中已有的一个或多个节点的物理地址。如果您假设一个部分连接网格,网格名的解析结果就是网格中可用物理地址的一个子集。在接收到网格中一个或多个物理节点的物理地址后,预期节点必须立即连接到这些地址中的一个、部分或全部地址。连接到网格之后,新添加的节点必须立即让自己准备好响应来自其他预期节点的后续的网格名解析请求。

网格名解析是一个复杂的主题。这种复杂性在很大程度上是因为,在许多情况下,网格名解析要依赖于一个或更多的其他网格。为清楚说明问题,请想一下美国邮政局使用的网格。再具体点说,假定我需要向我的朋友Rusty邮寄一个包裹。要邮寄这个包裹,我可能需要去一个邮局。如果我不知道距离我最近的邮局地点,我会到Internet上查找最近邮局的地址。从抽象意义上说,要"连接"到美国邮政局的网格需要我先访问所有网格中最大的网格(即Internet)才能解析最近的节点的地址。换言之,您可以使用一个网格去解析包含在另一个网格中的地址。我将在本文的PNRP部分详细讨论这个概念。

与其他节点通信一旦节点连接到某网格,它就可以通过以下两种方式之一与其他节点进行通信:网格扩散(也称多方消息传送),或定向消息传送。顾名思义,网格扩散是试图将消息发送到网格中的所有节点。一般而言,网格中的某节点可通过将消息发送到它的所有邻居而将消息传播到其他所有节点。在接收到消息后,初始发送节点的邻居负责将该消息转发给它的邻居,以此类推。相比之下,定向消息传送指的是试图将消息直接发送到网格中的某特定节点。在部分连接网格中,初始发送节点可能未与目标接收节点相连。如果真是这样,则初始发送节点必须将消息发送给它的一个或多个邻居。其中某个邻居可能会与目标接收节点相连。如果是这样,该邻居就会将消息转发给目标接收节点。如果不是这样,则该邻居会推测它的哪个邻居自身可能会与目标接收节点相连。

网格很少处于静态。在多数P2P应用程序中,节点可能会频繁加入和离开网格,可能是由于网络连接变动引起,也可能是由于在使用即时消息传送应用程序时,用户启动和终止应用程序引起。除了网格中的自然变动之外,多数网格技术都具备一些维护自身的机制。通常而言,网格维护的目标就是修复或调整网格以使其更高效或更稳健地运行。要注意到每个网格技术实现网格维护的方式都不同,这一点很重要。

对等名称解析协议

顾名思义,PNRP旨在基于网格名等要素来解析物理地址。PNRP可供带有AdvancedNetworkingPack的WindowsXPServicePack1(SP1)以及WindowsXPSP2和WindowsXPProfessionalx64Edition使用。WindowsVista也将附带PNRP版本2。从最简单的层次看,PNRP本身就是一个采用Windows服务形式的P2P应用程序,并且PNRP节点的网格专用于发现加入到其他网格中的节点的物理地址。

PNRP和IPv6PNRP构建于Internet协议版本6(IPv6)之上。由于IPv6对于多数开发人员而言还相当陌生,因此在讨论PNRP机制之前,非常有必要提及IPv6的至少一个重要方面。在IPv6中,地址是一个128位的值(这可能产生约3.4×1038种地址组合)。这种大小的IPv6地址池使IPv6的最重要功能之一-端对端寻址变为可能,即使这些地址被分割为多个子网并隐藏在NAT之后。

PNRP示例PNRP功能的原型、结构、错误代码均在WindowsSDK的p2p.h头文件中定义。如果某应用程序想要向PNRP注册一个网格名,它必须用非托管代码通过WindowsAPI实现,或用托管代码通过公共语言运行库(CLR)的P/Invoke工具实现。目前,在WindowsAPI的PNRP部分的.NETFramework中未包含托管包装。但您可以通过使用netsh命令行实用程序来访问PRNP。通过netsh,您可以按以下所示向PNRP注册一个新的PNRP名:   

c:temp>netsh

netsh>p2ppnrppeer

netshp2ppnrppeer>add0.justinsmith

Ok.

来源:微软

上一篇:Goonie互联网舆情研究与监管模式解析
下一篇:测试VoIP呼叫质量

手机天线设计培训教程详情>>

手机天线设计培训教程 国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【More..

射频和天线工程师培训课程详情>>

  网站地图