Skype通讯协议分析
通過分析得出的結論主要有三個:
1、Skype的通話質量較MSN和Yahoo的即時通信工具要好;
2、可以無縫的在NATs和防火墻后使用;
3、安裝使用起來確實非常簡單。
Skype與以往MSN等IM工具最大的不同在于基除了用戶登錄,其余工作基本不依賴中央服務器,Skype在穿透防火墻通訊時完全使用了Peer to Peer,而沒用到中央服務器。上圖中的小黑點是客戶端,大黑點是超級節點(用于為其它客戶端提供登錄踏板及廣播服務),灰色的點是Skype的登錄服務 器。
用戶下載安裝完Skype后,Skype客戶端會發送一段HTTP 1.1的請求到中央服務器,告訴它我裝完了一個什么樣的版本:
User-Agent: Skype? Beta 0.97
Host: ui.skype.com
Cache-Control: no-cache
服務器會返回一個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通讯协议分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quartz.NET 架构与源代码分析系
- 下一篇: c#文本框只能填入数字和字母