JKaiUI改良版 配布中

JKaiUI改良版をファイル置き場にて配布中です。

最新版はここから落とせます。追加機能の使い方の説明は落としたファイルのReadMeファイルを参照してください。

オリジナルのJKaiUIの使い方、Mac上でのXLink kaiの情報はMac de Kaiを参照してください。

JKaiUI改良版はまだ開発版です。オリジナルからそう多く変更していないので大丈夫だともいますが、ご利用は自己責任でお願いします。

2013年7月20日土曜日

Xlink Kai仕組み2

Xlink Kaiを解析した結果の3回中の2回目です。

Kaiの通信は主に3つの系統に分かれると説明しました。
1つはチャットやアリーナの移動などのKaiのサーバーを介した通信です。
2つ目はPSP間の通信です。
3つ目はPM(Private Message)やり取りを行う通信です。

下の図はそれら3つの通信をまとめた図です。

今回は2つ目について主に説明していきます。
上の図で通信経路は矢印で表されています。
黄の矢印は2つ目に用いられる通信経路です。
ここで行われる通信は主にPSPが通信するデータを中継するだけです。

先にどうやってKaiが動作しているかを大雑把に説明します。
通常はPSP同士が通信しているるわけなのですが、PSPの替わりにWifiアダプタと接続するようにします。
PSP間の通信は暗号化されていないアドホックモードですのでSSIDさえあっていれば簡単にできます(というかそういう風に設計したのではないでしょうか)。
あとはWifiアダプタで受信したパケットを取得しネットワークを介して中継するだけです。
パケットの取得はパケットキャプチャと呼ばれ、OSで用意されていますのでそれを利用しています。
普通はライブラリ(winpcap, libpcapなど)が提供されているのでそれを利用するようです。
取得したパケットはトンネリングという技術を用いてKaiengineからKaiengineへ送信します。
トンネリングは新しい送信先と送信元の情報をつけて送信する方法です。
トンネリングされたパケットを受信したKaiengineはあとはWifiアダプタを用いてPSPに送信します。
送信するだけと書きましたが、おそらくWifiアダプタは中継モードと呼ばれるものになっています。
中継モードとは文字通り自分以外からのパケットを中継するモードです。
中継モードでは送信元が自分以外のパケットを送信できるのに対して、通常は送信できません。
おそらく中継モードがXlinkモードとその他での差異だと推測できます(おそらく他にもあります)。
ということでXlinkの動作とパケットキャプチャ、トンネリング、中継モードが主要な技術要素であることを説明しました。

次に通信プロトコルについて見ていきます。
PSPとWifiアダプタの通信はEthernet(Wifi)パケットをブロードキャストで行っているようです。
ちなみにイーサネットより上の階層のプロトコルはオリジナルになっています(TCP/IPではない)。
kaiengine間UDPは通信になります。UDP通信の方が即応性があるために用いられています。
しかしながら、信頼性はないのでパケットを損失し、ラグやワープが発生することがあります。

ここで、なぜアリーナでプレイをしてはいけないかを説明しておきます。
少し上でPSPとWifiアダプタはブロードキャストで通信していると説明しました。
ブロードキャストというのは不特定多数に送信する方法です。
そのため、グルーピングがそのままではできないのでSSIDによりグルーピングを行っています。
モンハンで言えば集会所ごとにSSIDを変えています。
しかし、パケットキャプチャでは受信時にEthernetパケットとして受信するためにSSIDの情報が失われます。
そのため、この方法はXlinkではできないようです。
そこでKaiでは部屋を用意しているわけです。
仕組み上、ブロードキャストは誰宛かわからないのでkaiengineは部屋(アリーナ)にいるすべての人にパケットを送信します。
そのため部屋(アリーナ)にいる人数が多くなるほど負荷が多くなることになります。
とくにモンハンなどではクエにいくと通信量が増えます。

ここでどのくらいの負荷増加になるか計算してみます。
一人分のプレイ時の負荷増加分をΔとします。
プレイ人数をXとします。
アリーナ内の人数をαとします(自分たちも含めて)。
このときの負荷増加分はX×Δ×α
ΔをMHP3rdで計測したところ5KB/sec位でした。
X=4, α=100だとします。
すると全体の負荷増加分は2MB/secと結構な値になります。
この値は全体の負荷です。
個人の負荷は20KB/secになります。

これが多いか少ないかは回線にもよるので何とも言えませんが、アリーナでプレイをすると他人の負荷になってしまいます。
そのため、アリーナでのプレイは基本的に避けるべきです。
ただし、人数が少ないときはたいした負荷でもないので負荷的には別に問題ないです。

最後にセキュリティの話を書いておきます。
kaiengineはパケットキャプチャをしてそのパケットを送信していると説明しました。
このときkaiengineはキャプチャした通信を内容を見ずにすべて送信します。
これはwifiアダプタを正しく選択していれば問題ないのですが、間違っていた場合に面倒なことになります。
たとえば、LAN内通信に用いているNIC(Network Interface Card)が選択された場合に、LAN内での通信が漏れることになります。
また、正しくアダプタが選択している場合でもPSPから送らなくてもいい情報が送信されている場合もあります。
実際に送信されているのを確認したのものとしてPSPに設定しているニックネームがあります。
もし本名などを設定しているなら変更した方がいいでしょう。

次回最後の3つ目のPMのやりとりを行う通信について説明していきます。

0 件のコメント:

コメントを投稿