JKaiUI改良版 配布中

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

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

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

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

2013年7月27日土曜日

Xlink kai仕組み3

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

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

下の図はそれら3つの通信をまとめた図です。
今回は3つ目について主に説明していきます。
上の図で通信経路は矢印で表されています。
青の矢印は3つ目に用いられる通信経路です。
ここで行われる通信は主にPMに用いられます。

まず、プロトコルについて説明します。
User Interfaceとkaiengine間の通信はUIによります。
kaiengine間の通信はUDPです。
よってPMのやりとりに信頼性がありません。

文字化けについてまとめて書いておきます。
文字化けには主に3つほど原因があります。
1つめはWeb UIで日本語などを表示できない問題です。
フローティングパネルは文字エンコーディングを指定をうまくできないようです。
2つめはPMにおけるkaiengineで送信する文字エンコーディングの問題です。
7.4.18以前ではshift-jisが7.4.22以降ではutf-8が用いられます(正確にはOSなどにも依存する)。
通常のチャットではサーバーが変換してくれるために文字化けはありませんがPMではサーバーを介しないために文字化けが発生してしまいます。
3つめはMac OSのkaiengineのバグです。
Web UIとkaiengineで通信するとき日本語エンコーディングは変な変換がなされるようです。
ちなみに、ある一定の変換をすれば元のバイナリに変換できます。

以上、Xlink Kaiをいろいろ解析した結果をまとめてみました。

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のやりとりを行う通信について説明していきます。

2013年7月13日土曜日

Xlink kai仕組み1

今更ながらXlink Kaiを解析した結果について3回に分けて説明していきます。

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

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

今回は1つ目について主に説明していきます。
上の図で通信経路は矢印で表されています。
赤の矢印は1つ目に用いられる通信経路です。
ここで行われる通信は主にアリーナの情報を受け取り、アリーナ移動などのユーザー操作をサーバーに送信します。

ここで少し詳しく通信プロトコルについてみていきます。
KaiではTCPとUDPを使い分けています。
TCPとUDPがわからない人に簡単に説明すると、TCPが信頼性があり、UDPが信頼性がない通信ということだけわかればここではいいです。
すなわち、TCPではほぼ確実にパケットが相手に届くが、UDPでは届かない場合もあるということです。
各コンポーネント間の通信をみていきます。
KaiEngineとサーバー間の通信はTCP通信です。
User InterfaceとKaiEngine間の通信はTCPもUDPでもどちらの場合もあります。
しかし、これはコンピュータ内のローカルな通信です。
そのため、UDPでもほぼ信頼性があります。
よって、この1つ目の通信経路が信頼性がある経路であることがわかります。
それに対して、2つ目と3つ目の通信経路は信頼性がありません。
これについては次回以降に説明していきます。
1つ目の経路は信頼性があるといいましたが、実際チャットなどが相手に届かなかったことはないと思います。

先ほどUser InterfaceとKaiEngine間はTCP、UDPどちらもあり得ると書きました。
それは旧UIはUDP通信であり、Web UIと呼ばれるWebブラウザで操作を行うものはTCP通信なためです。

最後にセキュリティ関係の話を書いていきます。
2つ目、3つ目の通信ではサーバーを介さないkaiengine間の通信を行います。
これを行うには通信相手のIPアドレスが必要です。
この情報はサーバーからkaiengineに送られてきます。
kaiengineとサーバー間の通信は平文で行われてるため、この情報を簡単に手に入れられます。
すなわち、Xtagとその人の接続もとIPアドレスです。
IPアドレスがわかれば住んでいる大まかな地域などがわかります。
場合によっては細かい情報までわかるようです。
このようにXlink Kaiはあまりセキュリティ的にはよろしくないようです。

次回は2つ目のPSP間の通信について説明します。

2013年7月6日土曜日

MacでのWindowsキーボードの使用

Windows用のキーボードをMacで利用する方法をメモしておきます。
利用するのはKeyRemap4Macbookとそれに付属のPCKeyboardHackです。

説明用キーボード

Realforce 91(JIS)

異なるキー

WindowsとMacのキーボードで異なるキーを示します。
対応するキーがある場合はWindowsのキー:Macのキーという表現になっています。
  1. 表示は異なるがMacで同じような機能が割り当てられているキー
    1. Windows:Command_L
    2. Alt:Option_L
    3. Back Space:Delete
    4. Delete:Forward Delete
  2. 認識しないキー
    1. 無変換
    2. 変換
    3. かな
  3. 認識するが表示と異なるキー
    1. 全角半角:`
    2. Print Screen:F13
    3. Scroll Lock:F14
    4. Pause:F15
    5. Insert:Help
  4. Macで意味のないキー
    1. Application
これらは設定する必要のあるキーの候補です。
これらは上記のように4種に分けることができます。
1種目は同様な機能が割り当てられているキーで設定をする必要はありません。
2種目は Macでは認識しないキーです。
 PCKeyboardHackで設定を行う必要があります。
3種目は印字と異なるキーが割り当てられているキーです。
4種目は認識はされますがMacでは使われないキーのために意味のないキーです。
3種目と4種目は必要であればKeyRemap4Macbookで別のキーを割り当てます。

設定例

今回はなるべくApple製のキーボード配列(JIS)に近くなるようにします。
変更するキーについてまとめておきます。
  1. 無変換:JIS_KANA
  2. 変換:JIS_EISUU
  3. かな:Command_R
  4. 全角半角:Escape
  5. Application:Fn
  6. Escape:Eject 
1−3は認識しないキーなのでPCKeyboardHackで設定します。
 設定した状態の画面は以下。


下の方にある「for Japanese」下の3つの項目をチェックします。
今回はデフォルトで上記のキー設定になっているので他は変更しません。
もし必要ならば一番右の欄のkeycodeを下の表を見ながら変更しましょう。

4−6は KeyRemap4Macbookで設定します。
 設定した状態の画面は以下。

以下のような項目をチェックします。
  • 4:Change Backquate Key > Backquate to Escape
  • 5:For PC Users > Change PC application Key > Application Key to Fn
  • 5:Change F1..F19 Key & Functional Key > Change F1..F19 Key > Separately settings Fn+F1..F12 to Functiolnal
  • 6:Change Escape Key > Escape to Eject
5の設定ではApplicationキーをFnキーに変えただけではうまく利用できないためにFnキーとFx(xは数字)キーの組み合わせで特殊機能を利用できるようにします。

最後に

KeyRemap4MacbookとPCKeyboardHackを用いてWindowsキーボードをMacで利用する方法を説明しました。
今回はApple製キーボード(JIS)に近くなるようしましたが、 実は細かいところでまだ違いあります(Caps LockやCtlの位置など)。