您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > Skype协议分析(2006版)
-1-Skype协议分析(2006版)整理翻译:袁建明Angel_YY@126.com概要:Skype是创建Kazaa的组织在2003年开发的一个基于Peer-to-Peer(对等网络)的VoIP客户端。它可以几乎无缝的穿越NAT和防火墙,并且语音质量比其他的VoIP客户端软件要好很多。他加密了端到端的通话,分散式存储用户信息,支持即时消息通信和网络语音会议。本文分析了Skype的关键技术,比如登录,穿越NAT和防火墙,呼叫信令,媒体传送,编码,语音会议,并且基于三种不同网络环境下进行了分析。详细的分析了Skype网络的传输和阻断,共享列表,系统调用。此外我们还画了一幅Skype在登录时建立TCP连接的超级结点图。普通主机(SC)超级结点(SN)______连接关系图1Skype网络有三种主要的实体,普通主机、超级结点、登陆服务器。-2-译者注:Skype单词的由来它是一个楚瓦什语单词...意思是“全世界可以免费交谈”。事实稍有不同,但很有趣。许多年前的某地,Niklas和其他伙伴开始了关于要让全世界免费交谈的想法。因此他们需要给它一个名字。他们提出的一个名字是:“Skypeer-to-peer”,其缩写就是“Skyper”。但是因为在Internet世界,一些域名已经与“skyper”关联,因此他们想出一个变体,仅仅去掉字母r,变成“Skype”。它很好听,而且那些域名也有效。第一部分介绍Skype是一个基于P2P的VoIP的客户端程序,他允许与其他Skype客户端软件之间进行通话并发送文字消息,非常像MSN和雅虎IM。具有语音通话,即时消息,语音会议,好友列表,但所使用的协议却是完全不同的。就像他的前辈Kazaa一样,他是基于PeertoPeer对等网的。在这个对等网络中有两种结点,普通主机和超级结点(SN)。普通主机结点是一个可以语音通话和发送文本消息的应用程序;一个超级结点。在Skype网络中,一个超级结点是一个普通结点的终点。任何一个有公网IP,足够的CPU,内存资源和带宽的普通结点都将成为一个候选的超级结点。每个普通结点必须连接到一个超级结点并且在登录服务器验证。除了Skype结点本身外,登录服务器也是Skype网络中非常重要的组成部分,因为他存放着每个Skype用户的用户名和密码。这个服务器来保证用户名的唯一性。从Skype1.2版开始,以后版本的Skype把好友列表存储在登录服务器上。除了登录服务器外,还有SkypeOut和SkypeIn服务器用来提供PC-to-PSTN和PSTN-to-PC呼叫的桥接。SkypeOut和SkypeIn服务器在PC-to-PC模式的呼叫中并没有扮演任何角色。所以,我们认为登录服务器是Skype的P2P网络中唯一的中心组织。上线和离线用户信息以分散的方式传播。我们认为,每个Skype节点使用STUN协议的变种来确定它们位于何种NAT防火墙的后面。我们并且相信,没有全球性的NAT和防火墙穿透服务器,因为-3-如果有的话,在我们多次实验中Skype结点将会在登录和通话时交换传送信息。每个Skype网络就是他所能达到的范围,因而每个Skype客户端(SC)需要创建和维护一个它所能达到结点的表,在Skype中,这个表被称为主机缓存(HC),包含了超级结点的IP地址和端口号,从Skype1.0版本开始,HC被存储在一个XML文件中。Skype主张使用第三代P2P网络技术或者全球搜索目录技术来保证如果一个Skype用户在过去的72小时内登陆过Skype网络,可以快速查找这个用户。Skype使用的语音编码允许它使用大约32kb/s的带宽来维持一个合理的语音质量。Skype使用TCP来维护信号,使用TCP和UDP来传送媒体数据。本文剩余的部分将作如下组织。第二部分描述了Skype软件和Skype网络的关键组成部分。第三部分描述通过反向工程试验得到的Skype协议。第四部分论述了Skype的关键过程,比如登录,用户搜索,呼叫信令,媒体传送和编码,定时器,详细的流程图。第五部分论述了电话会议。第六部分论述了通过实验得到的Skype与MSN,GoogleTalk,Yahoo等软件的比较。给出了一个在登录过程中超级结点和Skype客户端程序建立TCP连接结点的世界地图。第二部分Skype软件的关键构成每一个Skype客户端在一个特殊的端口侦听呼入信号,维护超级节点列表,使用的音频编码器,维护好友列表,对信息进行端到端的加密,确定位于何种NAT或防火墙之后,这部分描述了他们的组成和详细的功能。A..端口每个Skype客户端(SC)都会打开一个端口号来侦听TCP或UDP链接,这个端口号可以在链接对话框中配置。SC在安装的时候随机选定一个端口号。此外还会侦听TCP的80和443端口来等待http或者https的链接。Skype没有默认的TCP或UDP服务端口,下图显示了一个Skype链接设置快照,里面显示了Skype侦听呼入的端口号。-4-B.主机列表主机列表提供了超级节点的IP地址和端口号,由Skype客户端程序按照一定的规则创建和维护。他是Skype流程中最有争议的部分,在0.97版中,最后一次有效的条目必须存储在主机列表中,所谓有效的条目就是一个IP地址和端口号,在登录的时候,Skype试图建立一个TCP链接来与主机列表中任何条目交换信息,如果无法做到则报告登录失败。在1.2以前版本中如果不能与HC中任何条目建立TCP链接,Skype将试图与Skype内置的7对IP地址和端口号对建立TCP链接。Skype客户端在Windowxp中把这个主机列表存储在一个shared.xml文件中,这个文件位于C:\DocumentsandSettings\XPUser\ApplicationData\Skype.在Linux中存储在$(HOMEDIR)/.Skype.在运行两天以后大约有200个条目被存储在这个文件中。这个列表中的条目不一定是最新的,对于其他对等协议来说有一个指针列表,来快速查找一个结点。C.编解码器在我们的试验中,我们观察到Skype使用了iLBC,iSAC,iPCM编解码器。这些编解码器是GlobalIPSound开发的。从1.4版开始Skype编解码器所允许频率在50-8,000赫兹,在这一范围内的声波会被编码。D.好友列表在XP中,Skype存储好友列表信息在一个XML文件‘config.xml中。这个文件位于C:\DocumentsandSettings\XPuser\ApplicationData\Skype\skype-5-userid。在Linux中位于$(HOMEDIR)/.Skype/skypeuserid.从XP中的1.2版开始好友列表同时被存储在IP地址为212.72.49.142的登录服务器中,好友列表未经加密的存储在本机计算机中,下图显示了config.xml的片段CentralStorageLastBackoff0/LastBackoffLastFailure0/LastFailureLastSync1135714076/LastSyncNeedSync0/NeedSyncSyncSetuskypebuddy12f1b8360:2/skypebuddy1skypebuddy2d0450f12:2/skypebuddy2显示了两个好友,每个好友后面有四字节的数字,如果两个Skype客户端有同一个好友,这个数字并不相同E.加密技术Skype官方网站声称,Skype使用了AES加密算法,这一算法被美国政府部门使用。Skype使用256bit密钥就会产生1.1*1077种可能。Skype加密了所有语音呼叫和即时消息的内容。Skype使用1024bit的RSA算法对称协商AES密钥,公钥在登录服务器时被服务器使用1536或者2048位的RSA算法来验证。F.NAT与防火墙我们认为,每个Skype节点使用STUN和TURN协议的变种来确定它们位于何种NAT防火墙的后面,Skype客户端定期刷新这些信息,这些信息也被存储在shared.xml文件中。一个Skype客户端不能阻止自己成为一个超级结点。第三部分实验我们实验了Windows1.4版和linux1.2版,使用了通信分析,共享库,系统调用中断等技术分析了Skype协议的各个方面,memgrp工具用来分析Skype运行时使用的各种寄存器。MaxMind用来查看IP地址对应的国家和城市。下面我们详细的解释在不同平台下对Skype客户端所做的实验A.Skype1.4版本这一版本是基于Windows的,我们通过分析了解到了他的主要运行机制。在两台XP的机器上安装了这一版本的客户端,每台机器使用3G奔4CPU,1G-6-内存,10/100M网卡,连接到100M网络上。我们在三种不同网络环境下进行了实验,第一种,两个Skype客户段均有公网IP,第二种,有一个客户端位于仅开放有限端口的NAT之后,第三种,两个客户端都位于仅开放有限端口的NAT之后并且UDP受限。NAT和防火墙的机器运行的是MandrivaLinux10.2,连接到100M以太网,NAT使用Linux的iptables配置。使用Etheral和NetPeeker来监控网络传输。NetPeeker用来调整带宽来分析Skype在网络阻塞情况下的操作。B.Skype.1.2版本这是一个Linux下的版本。使用了共享链接库,系统调用中断等技术来获得Skype协议更多的技术细节。在Linux下程序启动时,动态连接允许在其他任何动态库导入之前导入LD_PRELOAD环境变量,这就使得覆盖导入函数成为可能,比如strcpy()或者send()。AustinGodber提供了一个非常好关于这项技术和函数截获技术的指南。在我们的试验中,我们通过使用X-Win32使用两台linux机器显示输出,所以我们能在一台机器上使用Skype不同的实例。然而此时声卡设备不能使用。为了客服这一问题。我们通过以上技术重载了open(),close(),select(),andioctl()等函数调用。相当于创建了一个虚拟声卡。所有的实验都在2005年的十一月和十二月完成。在剩余的部分中任何涉及到覆盖调用的部分都是在Linux下的1.2版Skype中实验的。Window中是在1.4版下实验的。第四部分Skype程序流程Skype的功能可以分为以下部分:启动,登录,用户搜索,呼叫链接的建立和断开,媒体传送,即时消息,这一部分我们将详细描述每一步。A.StartUP当SC1.4第一次安装并运行时,将会向Skype服务器(Skype.com)发送一个HTTP1.1的请求,这个请求的首行将包含关键词installed。0.97版的这一详细信息如下:GET/ui/0/97/en/installedHTTP/1.1-7-User-Agent:Skype™Beta0.97Host:ui.skype.comCache-Control:no-cacheThe200OKresponseSCreceivedforthisGETrequest:HTTP/1.1200OKDate:Tue,20Apr200404:51:39GMTServer:Apache/2.0.47(DebianGNU/Linux)PHP/4.3.5mod_ssl/2.0.47OpenSSL/0.9.7bX-Powered-By:PHP/4.3.5Cache-control:no-cache,mustrevalidatePragma:no-cacheExpires:0Content-Length:0Content-Type:text/html;charset=utf-8Content-Language:enGET/ui/0/97/en/getlatestversion?ver=0.97.0.6HTTP/1.1User-Agent:Skype™Beta0.97Host:ui.skyp
本文标题:Skype协议分析(2006版)
链接地址:https://www.777doc.com/doc-2849646 .html