晚上在看Salman A. Baset和Henning Schulzrinne写的《An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol》。因为Skype的通讯协议是不公开的,而且通讯内容是加过密的,这两位完全在实验的基础上对Skype的通讯机制进行分析,分析结果 很有参考价值。

通过分析得出的结论主要有三个:
1、Skype的通话质量较MSN和Yahoo的即时通信工具要好;
2、可以无缝的在NATs和防火墙后使用;
3、安装使用起来确实非常简单。

Skype与以往MSN等IM工具最大的不同在于基除了用户登录,其余工作基本不依赖中央服务器,Skype在穿透防火墙通讯时完全使用了Peer to Peer,而没用到中央服务器。上图中的小黑点是客户端,大黑点是超级节点(用于为其它客户端提供登录踏板及广播服务),灰色的点是Skype的登录服务 器。
用户下载安装完Skype后,Skype客户端会发送一段HTTP 1.1的请求到中央服务器,告诉它我装完了一个什么样的版本:

GET /ui/0/97/en/installed HTTP/1.1
User-Agent: Skype™ Beta 0.97
Host: ui.skype.com
Cache-Control: no-cache

服务器会返回一个200 OK的信息:

HTTP/1.1 200 OK
Date: Tue, 20 Apr 2004 04:51:39 GMT
Server: Apache/2.0.47 (Debian GNU/Linux) PHP/4.3.5
mod_ssl/2.0.47 OpenSSL/0.9.7b
X-Powered-By: PHP/4.3.5
Cache-control: no-cache, must revalidate
Pragma: no-cache
Expires: 0
Content-Length: 0
Content-Type: text/html; charset=utf-8
Content-Language: en

客户端会进行登录初始化工作,这一步工作包含很多内容,针对三种不同类型的网络情况有三种不同的登录方式:
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秒。

1、端口
在Skype的连接属性对话框中可以设置监听的端口号,在安装的时候Skype会随机的选择一个端口作为监听的端口,这一点与 HTTP协议等不同,Skype没有默认的服务端口。同时,它还会打开对80和443端口的监听。80是常见的HTTP服务默认端口,而443则是 HTTPS服务的默认端口。
2、主机列表(HC,Host Cache)
这里的主机指的是可以提供踏板及广播服务的Super Node(SN)。通常它被存储在注册表里的:HKEY_CURRENT_USER / SOFTWARE / SKYPE / PHONE / LIB / CONNECTION / HOSTCACHE 中.一般情况下,运行两天后,HC中会有约200个机器地址及对应的端口号。

3、编解码器
要能语音通信,编解码器当然少不了。Global IP Sound在他的网站上 专用明它为Skype提供点对点语音通讯软件:Global IP Sound provides voice processing software to Skype's peer-to-peer voice-communications software.Skype应该是使用了他们的编解码器实现的语音通讯。

4、好友列表
当你换了一台计算机的时候可能会发现Skype上的好友列表没了,不要奇怪,Skype的好友列表没有保存在服务器上,而是保存在本地的注册表中,当然,是加过密的。

5、加密
Skype使用AES加密标准。

6、NAT与防火墙
Skype应该是使用了STUN和TURN协议来检测所处的NAT及防火墙环境。Skype定期的刷新这些信息,这些信 息也是存储在注册表中的。与另外一个点对点文件共享系统Kazza不同,普通客户端无法阻止自己成为Super Node(SN),就是说它随时可能被征用成为别人登录服务和广播服务的提供者,就是类似于BT中的种子提供者的角色。

Skype的功能主要可以分为:初始化,登录,用户搜索,呼叫建立与终止,媒体传输和状态消息。

1、初始化
第一次安装后,Skype会发送一段HTTP 1.1的请求给中央服务器,包括关键字"installed"以及所装Skype的版本号。以后的每次登录Skype都会向中央服务器发送一小段包含关键 字"getlatestversion"的HTTP 1.1请求,检查是否有新版本的Skype。

2、登录
登录可能是Skype最重要的功能。在这个过程中,Skype终端到登录服务器上验证用户名密码,广播他在上线给好友及其它的点, 检查NAT和防火墙的类型,发现拥有公网IP地址的在线Skype节点,这些新发现的节被用于在所在Super Node无法使用后继续保持本机与Skype网络的连接。

登录的过程我们前面已经讲过,先用UDP连,然后是TCP,然后TCP到80,然后TCP到443,行的话就连上了,不行的话就显示无法登录。连接的对象是保存在本机中Host Cache中的。

登录服务器的IP是80.160.91.11,nslookup记录显示它的域名是:ns14.inet.tele.dk和ns15.inet.tele.dk,dk是丹麦的国家定级域名。

安装完第一次登录时,HC被初始化,里面包含7对IP与端口,而且基本总是这7个IP和端口,即使包含超过7对,这7对也在其中。当用户安装后第一次登录时,Skype通过其中的一对IP和端口建立TCP连接。

这7个IP-端口对,以及这些IP对应的主机名是:
IP address:port Reverse lookup result
66.235.180.9:33033 sls-cb10p6.dca2.superb.net
66.235.181.9:33033 ip9.181.susc.suscom.net
80.161.91.25:33033 0x50a15b19.boanxx15.adsl-dhcp.tele.dk
80.160.91.12:33033 0x50a15b0c.albnxx9.adsl-dhcp.tele.dk
64.246.49.60:33033 rs-64-246-49-60.ev1.net
64.246.49.61:33033 rs-64-246-49-61.ev1.net
64.246.48.23:33033 ns2.ev1.net
可以看到上述的主机分别属于4个ISP,其中Superb , Suscom, ev1.net是美国的ISP。
参考资料:
1、《An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol》.

转载于:https://www.cnblogs.com/starspace/archive/2009/03/24/1420121.html

Skype通讯协议分析相关推荐

  1. QQ2009通讯协议分析(一)

    最近分析了QQ2009协议,客户端是QQ2009正式版SP2. 配合数据包,简单说下2009的登录过程. 使用的QQ:398967632(17 c7 c3 50) 包数据,未特殊注明均为16进制数据. ...

  2. 西门子PLC1500以太网通讯协议分析

    初始化1500,192.168.0.1,端口:102 1.初始化连接 to:   03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 01 C0 ...

  3. 一个无线遥控通讯协议破解实例

    2.4G无线遥控通讯协议破解-美嘉欣        准备做平衡车,缺个遥控器,又不想用手机App.刚好手中有个之前买的遥控直升机,配套的2.4G遥控器看着还行,就打算拿来用在平衡车上.于是就开始了破解 ...

  4. 网络电话Skype协议分析

    1.概述 Skype是由Kazaa于2003年发明的基于P2P技术的VoIP客户端,用户可以通过Skype通过互联网进行语音和文本的传输. Skype的通讯协议是不公开的,而且通讯内容是加过密的,哥伦 ...

  5. Skype 协议分析(2006版)

    Skype 协议分析(2006版) 整理翻译:袁建明 Angel_YY@126.com 概要: Skype是创建Kazaa的组织在2003年开发的一个基于Peer-to-Peer(对等网络)的VoIP ...

  6. 【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析

    一. I2C标准协议流程 1. I2C协议--规定命令 开始:当SCL为高电平时,SDA从高电平向低电平切换 停止:当SCL为高电平时,SDA从低电平向高电平切换 应答(ACK):发送侧发送完8bit ...

  7. 西门子smart200以太网通讯协议

    西门子smart200具体的通讯文档在网上或者官网我都没有找到(哪位大仙有请给我留言发个感激不尽),本人是通过监听控制软件分析出其中的通讯协议. 连接是通过TCP/IP协议,我一般喜欢用Java写测试 ...

  8. TCP/IP协议分析

    一;前言 学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了.本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体 ...

  9. Mocha NTA基于单采集器实现的多种流协议分析

    业内主流的Flow协议技术         网络业界基于流(Flow)的分析技术主要有NetFlow.sFlow.cFlow和NetStreem四种.NetFlow是Cisco公司的独有技术,它既是一 ...

最新文章

  1. 第十三课.随机近似初步:蒙特卡洛方法
  2. Windows下Python 3.7.1安装
  3. Linux 01 Liunx目录结构及文件基本操作
  4. ACM计算几何题目推荐
  5. /dev 设备文件属性解读
  6. bai的字怎么写_教师节贺卡祝福语怎么写?教师节贺卡贺词祝福语精简20个字
  7. 转储的mysql如何导入,如何将大型(14 GB)MySQL转储文件导入新的MySQL数据库?
  8. MySQL执行计划解析
  9. 如何修改Cypress 测试代码中默认的超时时间(timeout)
  10. Behave用户自定义数据类型
  11. java g1 收集调优_Java性能调优:充分利用垃圾收集器
  12. linux安装python_Python - 爱豆
  13. 任务状态段TSS和TSS描述符
  14. [转载]qt信号signal和槽slot机制
  15. 2012年最佳免费网站和移动应用 PSD 界面素材揭晓
  16. 孙鑫-MFC笔记四--文本编程
  17. 计算机管理显示磁盘未知,磁盘未知,未初始化或未分配问题的解决方案
  18. 如何使用 ABAP 代码发送带有 PDF 附件的电子邮件
  19. 中国非处方彩色美瞳隐形眼镜行业销售动态与营销前景预测报告2022-2027
  20. PLC PID控制优化系列之积分分离、变积分系数(FC)

热门文章

  1. vue 子级拿值_vue 父组件通过$refs获取子组件的值和方法详解
  2. 小学计算机说课稿,小学信息技术说课稿《新建文件夹》
  3. php mysql 分组 分页_简单的PHP+Mysql实现分页
  4. postgres 显示变量_sql - 如何在PostgreSQL查询中声明变量
  5. stm32中断优先级_关于STM32 (Cortex-M3) 中NVIC的分析(转)
  6. 多伦多计算机科学大学,加拿大计算机科学专业 - 加拿大多伦多大学的计算机专业...
  7. 人力资源oracle,Oracle Connections
  8. 高斯过程回归python_基于python的高斯过程回归训练集数据扩充
  9. linux怎么添加工作组,linux 用户与工作组
  10. 特征值和特征向量到底描述了什么