Skype原理应用p2p技术,汗!
所谓P2P(Peer to Peer),其最本质的含义即“对等”,该技术最早是用于网络中对等节点之间的资源和信息共享的技术,通常人们所知道的是将P2P技术用在文件下载过程中,即网络上的对等终端在下载共享文件的同时又作为一个“种子”为其他对等终端提供资源和信息。后来,Skype在网络通话业务系统中灵活应用了该技术。由于冲击了传统通信领域,Skype在引起很多争议的同时也使人耳目一新,可以说,Skype是发展和演进了的P2P应用。目前对于P2P技术还没有规范的定义,结合其已有的应用,就更广泛的意义而言, P2P技术是指网络中的所有节点都动态参与到路由、信息处理和带宽增强等工作中,而不是单纯依靠服务器来完成这些工作。
Skype是P2P技术演进到混合模式后的典型应用,它结合了集中式和分布式的特点,在网络的边缘节点采用集中式的网络结构,而在超级节点之间采用分布式的网络结构,混合模式的P2P网络模型如图1所示。
从网络模型来看,这种混合模式的P2P是经过多年的发展和演进而来的,严格讲,这已经不是纯粹的对等网络结构了,只能称做发展了的P2P。下面就介绍一下采用混合模式P2P网络模型的Skype的通信原理。
Skype的通信原理
1. Skype网络结构
与常规的电信业务网络不同的是,Skype的网络中除了注册服务器,没有其他任何集中的服务器,只是将用户节点分为普通节点和超级节点。Skype的系统连接结构如图2所示。
注册服务器是Skype惟一需要维护的设备,它负责完成客户端的注册,存储并管理用户名和密码信息,当用户登录系统时,对用户进行身份认证。注册服务器还需要检验并保证用户名的全球惟一性。
普通节点即普通主机终端,只需要下载了Skype的应用,就具有提供语音呼叫和文本消息传送的能力。
超级节点实际上是满足某些要求的普通节点,这些要求包括:具有公网地址、具有足够的CPU、存储空间足够大、具有足够的网络带宽。也就是说,任何符合条件的主机终端都可以成为超级节点,当然前提是加载了Skype应用。
2. 通信流程
Skype的通信流程分为:启动、注册(认证)、查找用户、呼叫和释放的过程。其中注册流程只是在用户初次安装了Skype的客户端软件后进行注册,后期使用的过程中该步骤就变成认证过程。
(1)启动流程
Skype的用户终端启动时,采用HTTP协议连接到注册服务器,用户初次安装的启动流程中携带“installed”的参数,使用时启动流程则在消息中携带“getlatestversion”参数,具体流程分别见图3和图4。
(2)注册(认证)流程
注册(认证)流程可能是Skype所有流程中最复杂的一个,用户启动Skype后,首先需要连接到超级节点,通过超级节点向注册服务器发送身份认证信息,注册服务器验证用户名和密码的合法性,然后向其他对等节点及其好友发送在线信息,同时还需要判断该终端所在私网的NAT和防火墙类型。如果该终端先前默认的超级节点已不可用,则还要查找具有公网地址的Skype节点来作为该终端的超级节点,从而维持该终端与Skype网络的连接。
一旦超级节点都不可用,Skype的客户端采用了尽力而为的方式进行注册,即先用UDP包试注册,不成功超时则用TCP(80端口),再不成功则用TCP(443端口)。通常为防止其超级节点不可用,客户端必须建立一个可选连接节点列表,并定期维护该列表。
对于该流程通常会产生下面几点疑问:
● 初次登录时如何连接到超级节点?
我们发现,用户初次安装了Skype客户端软件后,该客户端的主机缓存中就已经初始化了一个包含至少7个IP地址和端口组的列表,这些地址和端口组所代表的便是初始的超级节点。
● 如何向好友发送在线信息?
由于Skype采用路由缓存机制,即用户查找其好友的过程中会在中间的超级节点缓存其路由信息(缓存72小时),因此用户登录后,其状态信息可以通过其超级节点通知到好友终端,并将好友的状态返回给用户。一旦缓存超时,需要通过其他超级节点查找用户路由,这充分体现了Skype的用户路由信息动态分布式存储的特点。
● 如何判断NAT和防火墙类型?
客户端软件采用各种STUN协议与超级节点之间交换信息,从而判断终端所处私网的NAT和防火墙类型,客户端软件还采用定期刷新机制来保证任何时候都能穿越NAT和防火墙。
(3)查找用户
Skype采用了一种称做全球索引(Global Index)的技术来查找用户,该技术结合前面所述的分层网络,超级节点之间采用全分布式的连接,每个超级节点具有最小时延前提下所有可用的用户和资源的全部信息。具体来说,Skype采用了下面两种机制来保证顺利完成用户的查找。
● 启动后向所有列表中的用户发送其上线信息,其他用户响应各自的信息;
● 在中间节点缓存查找到的用户信息
对于有公网地址的客户端,其查找用户的过程如下:点击发送要查找的用户信息->通过SN获取四个节点地址->不成功->报告SN->获取八个节点地址->……->成功(或失败返回)。
对于那些位于私网内的受限客户端,其查找用户的过程则是首先客户端将需要查找的用户信息发送给其SN,然后由SN完成查找后返回给私网内的客户端。
(4)呼叫建立和释放
查找到希望连接的用户后,可以将其加入好友列表,Skype用户可以随时与在线的好友进行呼叫。经过了稍微复杂的认证过程和用户查找过程,呼叫建立和释放的过程就变得简单了。用户位于公网和位于私网内部的情况会有所不同,两种情况下的呼叫建立和释放流程分别见图5和图6所示。
从上述流程图可见,Skype的呼叫信令都采用TCP封装,而媒体流则使用UDP封装,当有任何一方用户位于限制UDP包的防火墙内时,媒体流就会采用TCP封装。另外当Skype用户至少有一方位于私网内时,所有的信令和媒体消息都经过一个或多个中间节点转发。此时无需担心用户通话的媒体流因为经过中间节点转发而被窃听,因为Skype采用了对消息进行端到端加密的机制。
Skype的技术优势
Skype之所以引起了不小的轰动,是因为它的互联网特性,即免费、开放和较好的业务质量。事实上,Skype最大的意义在于,它开创了将P2P技术引入到话音通信的先河。也就是说,采用了网络中的所有节点都动态参与到路由、信息处理和带宽增强等工作中的机制,而不是单纯依靠服务器来完成这些工作,因此其管理成本大大降低,同时又保证了语音质量。
从具体技术的角度来看,Skype的优势有下面几点:
(1) 较强的NAT和防火墙穿越能力。首先识别NAT和防火墙类型,然后通过动态的选择信令和媒体代理,从而轻松实现NAT和防火墙的穿越。
(2) 快速路由机制,Skype采用了全球索引(Global Index)技术提供快速路由,其用户路由信息分布式存储于网络节点中。
(3) 结合互联网特点的语音编解码算法。Skype通过与Global IP Sound公司合作,引入语音质量增强软件,专门针对互联网的特点,从而降低了业务对带宽的要求。
(4) 很低的运行成本。很显然,Skype将很多工作下放给网络节点去完成,大大地降低了中心服务器的负担,进而减少了维护和管理的成本。
(5) 开放性。Skype采取开放的机制,鼓励互联网用户自己开发插件,目前此类开发如雨后春笋,在互联网上遍地开花。
其中第1条保证了通信无障碍,无论终端处于何种网络条件,都不会影响用户使用Skype提供的业务。第2条和第3条则保证了Skype较好的业务服务质量。第4条使得Skype可以轻松面对挑战。而第5条则给了Skype更强大的生命力,使其更加灵活,具有更高的可扩展性。
Skype给电信运营带来的思考
Skype的出现无疑给传统电信业带来一股强烈的冲击波,它从2003年下半年出现以来便广为流传,截至目前,Skype全球注册用户数已达2.5亿,每天增加的会员有15.5万人,而到2005年3月14日为止,Skype在全球的通话量累计已经达到60亿分钟。Skype仍在迅速向各个国家渗透,最新的统计表明:使用Skype技术呼叫的分钟数已经占到美国VoIP分钟数的46.2%,这部分用户基本是“免费”享用电话业务的。
Skype毕竟是一种互联网服务,而不是真正的电信服务,它也存在一些问题,比如网络的无管理性使得它只能通过这种免费的方式走向市场,企业用户也会因为担心它的安全隐患而不采用等。但是无论如何,Skype的理念很可能给传统的电信市场带来突破性的变革,也引起业界对于VoIP的新的思考,传统电信运营商决不可忽视其挑战。
首先,对于VoIP的态度问题,该积极应对还是消极回避?答案已经非常明显——微软公司的总裁曾说过这样的话:即使没有Skype,也会有另一个提供互联网电话的企业出现。我国在上个世纪90年代末成功地开展了VoIP的电信运营,到现在市场基本稳定,普通用户对IP电话已经不再陌生,然而几年来VoIP的电信运营却没有继续发展,几乎有点停滞不前了。事实上,VoIP应该具有更广阔的空间和更灵活的表现形式。
技术的进步往往是不可阻挡的,尤其是互联网带来的开放时代,给了新技术更广阔的发展空间,你不发展,别人会发展,因此国内电信运营商应该积极地迈出这一步。
VoIP的发展可以采取开放的思路,Skype的成功也有一些可借鉴之处。首先,积极研究P2P技术的利弊:一旦将P2P技术引入可运营的VoIP系统,在降低运营成本、具有更高的网络可靠性(不依赖于集中的服务器)的同时,是否会带来不可预知的坏影响?另外,VoIP并不代表人们通常所理解的“低收费就一定提供低质量服务”,电信运营商可以结合IP网络的特点,引入相应的技术,来保证可靠的服务质量。最后,VoIP完全可以开发并向用户提供更丰富的业务形式