スマブラ for 3DSの通信を解析してみた
2014年9月13日発売の「大乱闘スマッシュブラザーズ for Nintendo 3DS」のネットワーク対戦について,どのような通信を行っているのか解析してみました.
スマブラ for 3DS
みんな大好きスマブラです.今作では,ゲームをインターネットに接続して遠隔地にいる人とも対戦できるようになっています.また,対戦形式には様々な種類があり,エンジョイ部屋,ガチ部屋,大観戦などがあります.
大乱闘スマッシュブラザーズ for Nintendo 3DS
パケットキャプチャについて
今回スマブラの通信について調べるために,対戦時に送信されるパケットをキャプチャして解析しました.そもそも3DSのパケットなんてどうやって拾うんだと思うかもしれませんが,少しテクニカルな方法でキャプチャが可能です.
ここでキャプチャの方法は具体的には書きませんが,ヒントとなる記事を以前書いたので紹介しておきます.
【実験】ARPスプーフィングによる中間者攻撃 - sonickun.log
上記の記事でも述べていますが,この方法は通信の盗聴にも使えてしまうので,取り扱いには要注意です.今回はあくまで調査,学習目的です.くれぐれもゲームの不正行為やその他の悪用目的でパケットキャプチャはしないでくださいね.
TCP/UDPについておさらい
みなさんにとって常識かもしれませんが,この先TCPとUDPの話が出てくるので少しおさらいしておきます.
TCP,UDPはOSI参照モデルのトランスポート層で動作する通信プロトコルで,以下のような違いがあります.
プロトコル | TCP | UDP |
---|---|---|
通信方式 | コネクション型 | コネクションレス型 |
信頼性 | 高い | 低い |
転送速度 | 低速 | 高速 |
主な用途 | WEBの閲覧,メール送受信,ファイル転送 | 音声通話,ビデオストリーミング |
このようにTCPとUDPは用途によって使い分けられています.この先この表を頭に入れながら読むとわかりやすいかと思います.
対戦時(エンジョイ部屋)の通信
「エンジョイ部屋」とはランダムにマッチングされた4人で同時対戦する部屋です.
トラフィックについて
まずは対戦時のトラフィックを見てみます.
グラフを見ると,対戦時はUDPを用いて通信していることがわかります.対戦中はきれーいにUDPのトラフィックが発生しています.やはりリアルタイム性を重視する対戦ゲームですから,TCPよりも高速なUDPが用いられています.また最初のインターネット接続時にはTCPでどこかしらのサーバ(アメリカの任天堂社とかがあった)に接続しているようです.
他にも,エンジョイ部屋に入ってマッチングが行われている時などにはスパイクが観測されました.引き分けサドンデスに突入する直前には一瞬グラフが下がっているのもしっかり見えますね.
UDPポートは50000番台~60000番台が使われていて,プレイヤーごとに違うようです.
通信方式について
次に対戦時の通信方式について見てみます.結論から言うと,スマブラではP2P接続により対戦をしているようです.つまり,対戦時に中継のサーバを介すことなくプレイヤー同士を直接つなぐので,対戦者間でより高速にパケットのやりとりが出来ます.
P2P接続であると判断した根拠は以下のとおりです.
つまりはパケットキャプチャにより通信相手のIPアドレスがわかってしまうわけですねぇ...そういえば以前,IPアドレスから位置情報を推定する記事を書いたような...
GeoIPでIPアドレスから位置情報を取得する[Python] - sonickun.log
パケットの中身について
次にUDPパケットのペイロード部分について調べてみます.といっても意味不明なバイト列が並んでいるだけで全く読めません.おそらくキー操作の情報やキャラクターの座標の情報をエンコードないしは暗号化して送信していると思われます.キー操作とパケットを照らしあわせてエンコード方式を推測するといった気力は僕にはありません.以上です.
大観戦(リプレイチャンネル)の通信
最後に大観戦(リプレイチャンネル)の通信について調べてみます.リプレイチャンネルでは過去に誰かがプレイした動画を見ることができます.その際のトラフィックを解析した結果がこちら.
リプレイチャンネルでは,過去のプレイ情報を最初のロード時間に一括ダウンロードしているようです.その際にはTCPプロトコルが利用されています.これをWiresharkのFollow TCP Streamでつなげてみると,約127MBのデータ量がありました(対戦時間は2分).リプレイチャンネルでの通信はリアルタイム性よりも信頼性を重視するためにUDPではなくTCPを使っているということになりますね.
また気になるダウンロード元ですが,Amazon EC2サーバと思われるIPでした.自社のサーバを使っていなかったのは少し意外でした.
まとめ
スマブラ for 3DSのインターネット対戦ではP2PによるUDP通信が行われており,できるだけ遅延を減らすような工夫が施されていました.また,サービスの性質によって適切にプロトコルを使い分けています.
さらに詳しく解析すればもっと面白いことがわかると思います.個人的にはセキュリティの見地からもみてみたいと思っています.「パケットを偽造して不正行為は可能か,あるいは不正は検知されるか」というのもやってみたいと思いましたが,3DSを2台用意して自分だけの環境でやる必要があるでしょうし,なんとなくグレーな感じがするのでやめておきます(笑).その他いろいろな解析方法については,まわりのひとにアイデアを貰いたいところです.
スマブラを通してネットワークの勉強ができるなんて嬉しい限りですね!