Skypeについて

S. A. Baset et. al., "An Analysis of thr Slype Peer-to-Peer Internet Telephony Protocol"より














Network構成

  • 1つのSkype Login Server: ユーザ情報などを管理
  • Skype client (SC): ユーザの立ち上げるSkypeアプリ
  • super node (SN): SCを集約。SN同士がつながる。


Port

ランダム。ただし認証用にTCPの80(HTTP)と443(HTTPS)を使う。

Host Cache

SNのIPアドレスとportのリスト。Winの場合、レジストリHKEY_CURRENT_USER/SOFTWARE/SKYPE/PHONE/LIB/CONNECTION/HOSTCACHEに格納。実験では、2日で200のノードが登録されてた。

Codec

GlobalIPSoundのiLBCiSAC

暗号化

256bit AES

NAT越え

STUN (Simple Traversal of UDP), RFC3489やTURN (Traversal Using Relay NAT), IETFで作業中

Login

  1. UDPでパケット送信(port:random)
  2. 5秒待って反応がなければTCPでパケット送信(port:random)
  3. 反応がなければTCPでパケット送信(HTTP port:80)
  4. 反応がなければTCPでパケット送信(HTTPS port:443)
  5. 反応がなければ6秒ほど待って1から
  6. 1-5を5回繰り返してダメなら接続失敗


Super Nodeの初期化

インストール時4つのISPの持つSNが初期ノードとして与えられる。これらはログインサーバを知るための最初の接続の時にだけ使われる。

最初の接続

  1. UDPを初期SNに投げる。(NATのせいで)反応がなかったらTCPで。
  2. 反応があった(1つもしくは複数の)初期SNとTCP接続
  3. 初期SNからログインサーバを教えてもらう
  4. ログインサーバと接続。自分のアドレスを伝え、HCを教えてもらう

:やりとりするデータ量は総計9KB
:以降の接続では4.のみ行う。
:最初の接続のときのみSkypeのNetworkにICMPパケットを送っている。理由は不明。