1、概述
Skype是由Kazaa于2003年发明的基于P2P 技术的VoIP客户端,用户可以通过Skype通过互联网进行语音和文本的传输。 Skype的通讯协议是不公开的,而且通讯内容是加过密的,哥伦比亚大学的Baset和Schulzrinne完全在实验的基础上对Skype的通讯机制 进行分析,通过分析得出的结论主要有三个:
(1)Skype的通话质量较MSN和Yahoo的即时通信工具要好;
(2)可以无缝的在NATs和防火墙后使用;
(3)安装使用起来非常简单。
2、Skype的网络结构
Skype的节点有两种:客户端(ordinary node)和超级节点(super node,SN)。客户端必须链接到超级节点,并且在Skype的中央服务器登录。中央服务器保存用户的用户名和密码,完成登录的认证工作。图1中的小黑点是客户端,大黑点是超级节点(用于为其它客户端提供登录跳板及广播服务),灰色的点是Skype的登录服务器。
Skype可以看作是一个叠加在互联网之上的网络。与以 往MSN等IM工具最大的不同在于其除了用户登录,其余工作基本不依赖中央服务器。 Skype在穿透防火墙通讯时完全使用了Peer to Peer,而没用到中央服务器。每一个客户端都维护一个可以到达的主机列表(host cache,HC),包括其IP地址和端口号。
Skype的网络结构
用户下载安装完Skype后,Skype客户端会发送一段HTTP 1.1的请求到中央服务器,告诉它我装完了一个什么样的版本,服务器会返回一个200 OK的信息。客户端会进行登录初始化工作,针对三种不同类型的网络情况有三种不同的登录方式:
(1)直接有公众网的IP
(2)在内部网,可以通过TCP访问外部网络
(3)在内部网,但只能通过有限的几个端口(例如80和443)访问外部网络
Skype在登录的时候会先使用UDP请求HC中的 IP,如果不行,就用TCP请求HC中的IP及端口,如果还不行。就用TCP请求HC中的 IP及80端口,如果又不行,就再请求HC中的IP及443端口。如果这时候还不行,那就登录不了了。整个过程中传输的数据量大概在8k-10k,持续的 时间在3至35秒。
3、Skype的主要组成部分
3.1 端口
在Skype的连接属性对话框中可以设置监听的端口号, 在安装的时候Skype会随机的选择一个端口作为监听的端口,这一点与HTTP协议等不同,Skype没有默认的服务端口。同时,它还会打开对80和 443端口的监听。80是常见的HTTP服务默认端口,而443则是HTTPS服务的默认端口。
3.2 主机列表
这里的主机指的是可以提供跳板及广播服务的SN的IP地 址和端口号,这是Skype最重要的部分之一,HC中至少要有一个可用的主机地址和端口号。通常它被存储在注册表里的 HKEY_CURRENT_USER/SOFTWARE/Skype/PHONE/LIB/CONNEC- TION/HOSTCACHE中。一般情况下,在Skype运行两天后,HC中的SN地址及对应的端口号会达到约200个。
3.3 编解码器
Skype采用了iLBC、iSAC和一个保密的编解码器,能够对50-8,000 Hz范围内的语音信号进行编码。Global IP Sound已经实现了iLBC和iSAC编解码器,其网站表明了Skype是他们的合作伙伴。由此来看Skype应该是使用了Global IP Sound的编解码器实现的语音通讯。
3.4 好友列表
Skype的好友列表没有保存在服务器上,而是保存在本地的注册表中,并进行了加密。这就使得用户如果更换了另外一台电脑之后需要重新构建好友列表。
3.5 加密
Skype使用AES(Advanced Encryption Standard)加密标准,这也是美国政府使用的一个加密标准。Skype采用了256比特加密,可能的密钥有1.1×1077个。
3.6 NAT与防火墙
Skype应该是使用了STUN和TURN协议来检测所处的NAT及防火墙环境。Skype定期的刷新这些信息,这些信息也是存储在注册表中的。与另外一个点对点文件共享系统Kazza不同,普通客户端无法阻 止自己成为Super Node(SN),就是说它随时可能被征用成为别人登录服务和广播服务的提供者,就是类似于BT中的种子提供者的角色。
4、Skype的主要功能
Skype的功能主要可以分为:初始化,登录,用户搜索,呼叫建立与终止,媒体传输和状态消息。
4.1 初始化
第一次安装后,Skype会发送一段HTTP 1.1的请求给中 央服务器,包括关键字“installed”以及所装Skype的版本号。以后的每次登录Skype都会向中央服务器发送一小段包含关键字 “getlatestversion”的HTTP 1.1请求,检查是否有新版本的Skype。
4.2 登录
登录是Skype最重要的功能,如图2所示。在这个过程中,Skype终端到登录服务器上验证用户名密码,广播给在线上的好友及其它节点,检查 NAT和防火墙的类型,发现拥有公网IP地址的在线Skype节点,这些新发现的节被用于在所在Super Node无法使用后继续保持本机与Skype网络的连接。如果HC中所有的节点地址均不可用的话,登录失败。通过分析这些登录失败的过程,我们可以得出一个完整的Skype登录过程:
Skype的登录过程
先发送UDP数据包,如果5秒后没有响应,就用TCP,发送登录请求到目标节点的80端口;如果仍然失败,就通过TCP发送登录请求到443端 口,等待6秒钟,如果仍然失败就显示无法登录。整个的登录过程可以重复4次。连接的对象是保存在本机中Host Cache中的节点列表。
4.3 用户搜索
S kype使用全球索引(Global Index,GI)技术进行用户搜索,在72小时内登录过的用户,无论是处在公众网还是私有网络中都能找到。客户端可以通过发送TCP包向SC发送请求,也可以通过UDP包向其他SC发送查询请求。SC将结果发回客户端。
4.4 呼叫建立与终止
Skype采用了32kbps的语音编码以保证语音质量,其信令通过TCP传递,而语音数据则通过TCP和UDP进行传输,信令和语音数据使用 不同的端口号。Skype能够向好友列表中的用户发送呼叫请求。为了保证信令传输的可靠性,信令始终是通过TCP进行的。如果双方都是在公众网中,有独立的公用IP,那么主叫用户和被叫用户通过challenge-response机制直接进行数据交换。如果有一方位于私有网络或者是防火墙之后,那么私有网络一方需要首先同公众网中的至少一个SN建立TCP链接,然后由SN进行数据转发。如果双方都位于私有网络中,那么双方的数据都需要SN进行转发。
4.5 媒体传输和状态消息
如果双方都位于公众网中,双方可以使用UDP包直接进行数据交换。Skype的语音数据包的大小一般是67 bytes,正好是UDP包的净荷。对于100M bps的以太网来说,每秒可传送140个语音数据包。一般来说,上下行语音传输所需的平均带宽为5 kbps。如果有其中一方或者双方都位于私有网络中,就需要通过TCP同SN进行数据交换,由SC充当媒体代理服务器的角色,此时一个语音数据包的大小一般为69 bytes。在可能的情况下,Skype会优先选择UDP协议进行通信。
5、结束语
Skype是第一个利用P2P技术进行语音通信的VoIP工具,能够提供较好的通话质量。Skype能够透过防火墙进行无缝通信,安装使用也很 简单。随着互联网的不断普及。VoIP技术已经取得了越来越多的应用。有的运营商甚至开始和Skype合作提供语音服务,这是一个新的趋势。如何在新技术 不断普及的同时保证运营商在传统通信网络中的核心地位,是一个值得研究的课题。
分享到:
相关推荐
权威的skype协议分析,详细分析skype的网络结构、防火墙穿越方法、编解码等实现细节
Skype 协议分析(2006版).doc, undocumented skype protocol descriptions
本文分析了Skype的关键技术,比如登录,穿越NAT和防火墙,呼叫信令,媒体传送,编码,语音会议,并且基于三种不同网络环境下进行了分析。详细的分析了Skype网络的传输和阻断,共享列表,系统调用。此外我们还画了一...
**Skype核心技术与协议分析** Skype是一款知名的即时通讯软件,以其高质量的音频和视频通话功能闻名于世。它的核心技术主要包括P2P(点对点)通信、语音编码与压缩、网络适应算法以及安全加密机制。这些技术共同...
通过逆向工程等手段,还原出SKYPE的工作原理和私有协议的大体结构,为开发相似的VoIP软件提供指导
**Skype通信协议分析及通信控制研究** Skype是一款全球知名的即时通讯软件,以其高质量的音频和视频通话功能而闻名。其背后的技术架构和通信协议是实现这些功能的关键。本研究将深入探讨Skype的通信协议,以及如何...
Skype是由Kazaa于2003年发明的基于P2P 技术的VoIP客户端,用户可以通过Skype通过互联网进行语音和文本的传输。
摘要:Skype是一个基于P2P应用的网络电话...对Skype的通信连接机制进行了深入分析。在此基础上,提出了一个对Skype会话连接进行检测的算法。该算法综合利用了Skype的端口使用情况、数据包大小以及数据包的有效载荷特性。
开发者可以通过阅读和分析这些代码,了解如何在SIP协议的基础上,利用Skype API创建自己的VoIP应用。这包括了理解Skype API的调用方式,学习如何处理SIP会话的初始化、维护以及终止等流程。同时,对C++的深入理解和...
【Skype4源码分析与开发指南】 Skype4是一个基于Java编程语言的开源项目,主要目的是为了理解和学习Skype的通信协议以及实现一个类似的功能。这个项目在Eclipse环境中进行开发,对于Java开发者,尤其是对网络通信和...
描述:本文深入探讨了Skype的内部机制,特别是其协议、二进制打包、代码完整性检查、反调试技术、代码混淆以及网络混淆策略。 Skype,作为全球知名的即时通讯软件,其技术架构与安全机制一直是IT领域的热门话题。在...
"Iptool 抓包工具通讯协议分析使用方法" Iptool 抓包工具是一种功能强大的网络抓包分析工具,用于捕获和分析网络通讯协议。下面是 Iptool 抓包工具通讯协议分析使用方法的详细说明: 捕包准备 在开始捕包之前,...
Iptool抓包工具是一种用于网络通信协议分析的实用程序,它可以帮助用户深入了解网络上的数据交换情况。在本文档中,我们将探讨如何有效地使用Iptool进行通讯协议分析,包括捕包准备、过滤设置以及数据区大小的匹配。...
Skype是一种基于P2P技术的VoIP客户端,其通讯协议不公开,且通讯内容加密,因此对Skype的流量识别不能采用传统的端口识别法及特征字检测法。首先对Skype的通信机制进行深入的探讨,并通过实际的数据包分析总结出...
总之,本指南详细介绍了 Lync 和 Skype for Business 在不同场景下的故障排除方法和技术要点,覆盖了从环境检查到日志分析、从配置审查到协议跟踪等多个方面。对于从事 Lync 和 Skype for Business 支持工作的技术...
10. **错误处理与日志记录**:为了调试和优化,源码应包含详尽的错误处理机制和日志记录,帮助开发者定位问题和分析性能。 通过对【skype-android-app-sdk-samples-master】这个压缩包的学习和研究,开发者可以深入...