读《An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol》
读《An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol》
主要内容
一、Introduction:
Skype是一个P2P体系结构的利用IP网络传输声音的客户应用程序。它可以完全穿透防火墙工作并且它的通话质量较MSN和Yahoo IM的即时通信工具要好。Skype的通讯协议是不公开的,而且通讯内容是经过加密处理的。
Skype网络里有三种节点,一种是普通节点(Ordinary node),也就是客户端,它上面运行Skype应用程序,进行语音通讯和文件传输。另一种是超级节点(Super node,SN),它是普通节点的端点,任何一个主机只要拥有一个公有的IP地址,足够的CPU、内存和网络带宽资源,都可以成为超级节点。第三种节点是Skype登录服务器,它对其它的登录用户的信息进行验证,并且对用户上、下线的信息进行存储,同时支持用户的的搜索行为。
二、Key components of Skype
1、端口(Ports):在Skype的连接属性对话框中可以设置监听的端口号,在安装的时候它会随即的选择一个端口作为监听的端口,同时它还会打开对80和443端口的监听。80是常见的HTTP服务端口,而443则是HTTPS服务的默认端口。与其它许多因特网上的协议不同的是,Skype没有默认的TCP或者UDP服务端口。
2、主机列表(HC,Host Cache):这里的主机指的是可以提供踏板及广播服务的超级节点(Super node)。主机列表是超级节点(Super node)的IP地址和端口对的映射表,它是由客户端建立和定期维护的。这个表通常存储在注册表里的:HKEY_CURRENT_USER / SOFTWARE / SKYPE / PHONE / LIB / CONNECTION / HOSTCACHE 中.一般情况下,运行两天后,HC中会有约200个机器地址及对应的端口号。
3、多媒体数字信号编解码器(Codecs):它使用iLBC,iSAC,iPCM的编解码器实现了语音传输。
4、好友列表(Buddy List):Skype好友列表的一个显著特点是它的信息保存在本地计算机的注册表中并且是通过加密的,而不是保存在服务器上。因此当你换了一台计算机登录Skype网络的时候会发现原来Skype上面的好友列表不见了,而这时需要做的只是重新建一个好友列表罢了。
5、加密 (Encryption):Skype使用AES加密标准,使用256的编码技术。用户的公共信息通过Skype服务器获得验证。
6、NAT与防火墙:Skype应该是使用了一个可变化的STUN和TURN协议来检测所处的NAT及防火墙环境,并且应该可以定期的刷新这些信息。这些信息同样是存放在注册表里面的。与KaZaa文件共享系统不同的是Skype不能阻止它自己成为超级节点(Super Node),因此它可能随时成为别人登录服务和广播服务的提供者。
三、相关试验介绍:为了分析Skype协议,论文的作者对Skype version0.97.0.6做了一系列的试验。试验的环境是:
n two Windows 2000 machines
n One machine was a Pentium II 200MHz with 128 MB RAM, and the other machine was a Pentium Pro 200 MHz with 128 MB RAM.
n 10/100 Mb/s Ethernet card
n Connect to 100Mb/s network
作者分三组做了试验,分别是:
n Both Skype users with public IP addresses
n One Skype user behind a port-restricted NAT
n Both behind a port-restricted NAT and UDP-restricted firewall
四:Skype的主要功能介绍:初始化,登录,用户搜索,呼叫建立与终止,媒体传输与状态信息。
1、 初始化
第一次安装后,Skype 会发送一段包含关键字“inistalled”的HTTP1.1的请求给Skype中央服务器。在随后的每次登录中,Skype都会向中央服务器发送一个包含关键字“getlaterversion”的HTTP1.1请求以检测是否有新的存在的版本。
2、 登录
登录是Skype最重要的一项功能。在这个过程中,Skype终端到登录服务器上验证用户信息(用户名和密码),并且通知其他节点自己的到来,同时还要确定所处的NAT及防火墙的类型,还会发现拥有公有IP地址的在线的超级节点。当所在的超级节点(Super node)无法使用时,这些新发现的节点可以用于继续保持本机与Skype网络的连接。
Skype在登录的时候会先使用UDP请求Host Cache(HC)中的IP,如果五秒中内没有反应,就用TCP请求HC中的IP及端口,如果还不行,就用TCP请求HC中的IP及80端口,如果还是不行,就再请求HC中的IP及443端口,Skype Client (SC)等待六秒钟如果还是不行则开始重复上述过程,如果重复次数超过四次则宣告登录失败。
当一个SC(Skype Client)和SN(Super Node)建立连接后,SC必须在Skype登录服务器上验证自己的登录信息。登录服务器是Skype网络中唯一的一个中央组件,它上面存储了用户的信息(用户名和密码)以此确保用户信息在Skype网络中的唯一性。通过试验我们发现SC经常通过TCP和一个IP地址是80.160.91.11的节点交换数据信息。这个节点应该就是登录服务器,IP地址的NS记录查询显示它的域名是ns14.inet.tele.dk和ns15.inet.tele.dk,dk是丹麦的国家定级域名。
安装完后第一次登录时,HC被初始化,里面包含7对IP与端口,而且基本上总是这7个IP和端口,即使包含超过7对,这7对也在其中。第一次登录时,Skype通过其中的一对IP和端口建立TCP连接。
3、 用户搜索
Skype使用Global Index (GI)技术搜索用户。这种搜索是一种分布式的,只要用户存在并且在72小时内登录过Skype网络就能够被搜索到。大量测试表明Skype完全可以找到任何通过公有或私有IP地址在72小时内登录过的用户。
Skype协议不是一个开放的协议,它对消息有加密处理,我们不能够超越SN(Super node)跟踪Skype消息,同样我们也不可以让一个SC去和某个个别的SN建立连接。
SC有一个搜索对话框,输入用户标识号点击查询按钮就可以进行查询搜索。对于一个拥有公有IP地址的SC来说,SC向SN发送一个TCP数据包。通过试验我们发现似乎SN给了SC四个搜索节点的IP地址和端口号,因为SC通过和SN的交互后,SC向四个节点发送了UDP数据包,但是SC在登录时并没有和这四个节点有任何的消息来往。然后SC向其他节点发送UDP数据包,如果不能找到用户则通过TCP把信息反馈给SN。一般来说SC需要和8个不同的节点建立联系,它给8个不同的节点都发送UDP数据包。这个过程将会停止一旦SC找到了用户或者它发现要找的用户不存在。这个查询搜索需要3-4秒的时间。我们目前还不清楚的是,当SC不能找到用户时它将会怎样终止这个搜索。
4、 呼叫建立与终止
如果用户在好友列表中,直接呼叫就行了,如果用户不在好友列表中则需要先搜索用户然后才能进行呼叫。
如果用户双方都在公网上,在线,并且都分别在对方的好友列表中,那么只要按下呼叫按钮,主叫SC就会和被叫SC建立一个TCP连接,并且通过TCP进行通话。
如果主叫方处在限制端口的NAT后,而被叫方处在公网,则用一个在线的Skyper节点作中转,用TCP报文与被叫方建立连接,之后用UDP进行声音交换。
如果双方都处于限制端口的NAT和限制的UDP的防火墙之后,则主叫方和被叫方都通过另外节点的TCP连接转交控制信息。主叫方通过发送媒体信息给中间节点,然后由中间节点将信息通过TCP转交给被叫方,反之相同。
5、 媒体传输与状态信息
如果双方都在公网,媒体传输直接通过UDP就行了。如果主被叫方有一个或者两个在限制端口的NAT后,则通过另外在线的Skyper节点作中转,用UDP进行声音传输。如果双方都处在受限制的NAT和限制的UDP防火墙之后,则主叫方和被叫方通过另外节点的TCP连接收发声音信息。
这种传输最显著的特点就是支持No Silence Suppression。当通话的任一方没有讲话时,声音数据包的传输仍在继续。这有几个优点,一个是可以在NAT里维持UDP的约束,其次是可以利用这个特点来产生背景声音,还有可以避免降低TCP拥塞窗口的大小。
五、总结
Skype是第一个建立在对等网络之上的基于IP技术的语音分组传输(VoIP)电话技术。总体说来,以下三个原因导致了Skype的流行,这也是Skype最出色的特点所在。其一,它提供了一个较MSN和Yahoo IM更好的通话质量;其二,它可以无缝的在NATs和防火墙后使用;其三,安装使用起来非常方便。Skype与其他即时通讯工具最大的不同在于除了用户登录,其余工作基本不依赖中央服务器,Skype在穿越防火墙通讯时完全使用了Peer-to-peer,而没有用到中央服务器。
Skype客户端使用了STUN协议的变种来判断自己位于何种NAT和防火墙之后,Skype的这种穿透NAT和防火墙技术在很多应用程序中都有应用,例如网路游戏。它随机的选择发送和接收端口,使用TCP来控制语音传送,Skype是一个对等的网络,可以穿透任何NAT和防火墙,但是没有任何穿透NAT和防火墙的服务器,Skype使用TCP发送信号,他使用宽频率的GlobalIPSound语音编码,所有通讯都是经过加密的。
Skype的用户搜索技术目前还不是很清楚。我们猜测它使用了联合散列发,并且定期更新Skype用户的在线信息。Skype搜索机制在所有搜索用户失败时或者某些搜索成功时要传信息到登录服务器。
读《An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol》相关推荐
- 读《Android 安全架构深究》
Android 安全架构深究 安全是一个非常立体而丰富得概念.在不同的场景下,安全有着不同的含义. 比如对于网络传输,安全指的是传输的数据不会被其他人看到.篡改.伪造及仿冒,传输的数据不会遭到破坏,数 ...
- 《最强Android书 架构大剖析》读书笔记
文章目录 第一章 Android 体系结构的变革之路 1.2 Android系统源码目录 与Linux的异同 Android的框架 原生二进制可执行文件 Android 的原生库 核心(core)库 ...
- Android Jetpack架构组件之 Room(使用、源码篇)
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发 ...
- 抖音、美团等大厂千万级用户的Android客户端架构演进之路—
在移动开发中,对开发者来说不同的人具有不同的能力.就像读一本书一样,一千个读者,有一千个哈姆雷特.但不管怎样,只要你是个软件开发者你就必须学习windows或Linux等操作系统的运行原理.Andro ...
- Android 图形架构之一 ——概述
前言 本系列的文章,可以让你明白,一个View最终是如何显示到屏幕上的,从应用层到硬件抽象层.对分析app的卡顿,掉帧等 有很大帮助. 由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个 ...
- Android display架构分析-SW架构分析(1-8)
参考: Android display架构分析二-SW架构分析 Android display架构分析三-Kernel Space Display架构介绍 Android display架构分析四-m ...
- 高通Android display架构分析
目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
- Android系统架构-[Android取经之路]
摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...
- Android系统架构图及简单的系统架构介绍
2019独角兽企业重金招聘Python工程师标准>>> ndroid的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层. ...
最新文章
- 我的matlab5个车牌_顶帽_底帽_边缘_腐蚀
- 前端开发之走进Vue.js
- C# Socket实现聊天通信
- php面向对象分页,PHP基于面向对象封装的分页类示例
- 转载:理解机器学习中的偏差与方差
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(双向队列+尺取法)
- 求子数组的最大和要求O(n)
- 前端html面试题及答案2019,前端面试题及答案2019-20210415034948.docx-原创力文档
- Rman 非catalog恢复
- VS2010编译:_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
- 设计模式在项目中的应用案例_三菱PLC实际项目应用案例讲解
- 为什么计算机软件是无形资产,购买软件是否属于无形资产
- elasticsearch 模板
- 计算机如何通过手机连接网络打印机,手机连接电脑打印机怎么设置
- 朱有鹏嵌入式linux网盘,朱有鹏嵌入式单片机免费课程
- android 音视频录制
- [bigdata-56] py3+selenium 抓取学信网 最简demo
- dom4j添加、删除、修改Xml文件内容
- 一文读懂闪电网络工作原理
- 古人的养德养生观揭秘