昨年6月に勢いでWii Uと同時購入してからずっとSplatoon(スプラトゥーン)にハマってます。TPSとかFPSの類のネット対戦ゲームは初めてプレイするようはおっさんプレイヤーでしたが、頑張ってたらガチマッチでSランクまでは行けました。現状最大はS88です。このままS+カンスト目指したいところですが、社会人としてはやる時間が足りなくてちょっとくじけ気味です。
それでSplatoonをやってるうちに「このほぼリアルタイムのネット対戦ゲームでは、どのようなパケットが流れているのか?」というのが気になってきました。私、本業はネットワークエンジニアなので、ネットワーク技術には興味深々なのです。そんな訳で、ナワバリバトルの一試合をパケットキャプチャして、解析してみました(キャプチャしたのは、2016/01/09でした)。
※かなり専門的な用語が出てくるので、ネットワーク技術に詳しくない人にはさっぱりだと思いますが、その辺の詳細はざっくりとしか説明しないのでご容赦ください。
パケットキャプチャをしてみる
パケットキャプチャするには、まずミラーポート機能が付いているスイッチと、パケットキャプチャの定番ソフトであるWiresharkを使います。私の場合、ミラーポート機能付きのスイッチはこれを使ってます。ミラーポート機能付きでコンパクトでしかもここまで安価なスイッチがあるなんていい時代です。NETGEAR素晴らしい。
Wiresharkは、下記のサイトからダウンロードできます。
https://www.wireshark.org/
具体的に上記スイッチを使ってWii Uの通信をキャプチャする場合、Wii Uは有線接続ですね。まぁこの辺は実際にやってみないとイメージ湧かないと思いますが、ネットワーク技術に興味ある人は、やってみると面白いかもしれません。
パケットキャプチャをしてみた
キャプチャは、一試合3分間のナワバリバトルをキャプチャしました。上の画像は、Wiresharkの画像ですね。キャプチャスタートからストップまでの流れは、以下のようにしました。
1. ロビーに入る
2. パケットキャプチャ開始
3. レギュラーマッチに入り、マッチング開始
4. ナワバリバトル開始
5. ナワバリバトル終了
6. 試合結果発表
7. バトルは継続せずに、ロビーに戻る
8. パケットキャプチャ終了
これでパケットキャプチャをした結果、一試合で合計8万パケットほどの通信が発生していることが分かりました。それでは次から、具体的に解析をしていきましょう。
通信していたIPとパケット数の内訳
通信していたIPとパケット数の内訳を出してみました。とは言っても具体的なIPを出すのは気がひけるので、すべてISP名に変換しました。
ISP | Count | |
---|---|---|
1 | 自分ちWii U | 80868 |
2 | Bell Canada(海外) | 12531 |
3 | Cable TV Corporation | 12018 |
4 | Kddi Corporation | 11772 |
5 | Chubu Telecommunications Co.,Inc | 11609 |
6 | Softbank BB | 11248 |
7 | AT&T(海外) | 10415 |
8 | Time Warner Cable(海外) | 10092 |
9 | Open Computer Network | 476 |
10 | BIGLOBE Inc. | 230 |
11 | Amazon Technologies | 193 |
12 | Amazon Technologies(海外) | 120 |
13 | NINTENDO | 71 |
14 | NINTENDO | 66 |
15 | Softbank BB | 15 |
16 | Softbank BB | 12 |
トータルで80868個のパケットが通信しています。海外のISPだった場合は、カッコで(海外)と付けました。それではざっくりと1から16までのパケットがどんなパケットなのか、解析してみましょう。
1のパケットは自分ちのWii Uなので、その他の通信のパケット数のトータルとなりますね。
2から8までのパケットを見ると、すべて1万くらいと他と比べると多めです。これは、明らかに一緒にマッチングしている他の7名から来ているパケットです。マッチングしているユーザーと、直接通信してゲームが成り立ってるということですね。パケットの中身を見ると、UDPのパケットで中にバイナリのデータが格納されているので、位置情報や、キルデスの情報などが含まれているのでしょう。一緒に遊んだ7名のうち、3名も海外勢です。結構な比率で海外勢とマッチングしてるんですね。
9と10はよく分からない通信でした。9はマッチング中にちょっと流れたパケットで、10はナワバリバトル中にちょっと流れたパケットでした。
11と12は、ISP名がAmazonとのやり取りです。最初はこれAmazonでお買い物してる通信が紛れたのかなと思ったのですが、どうやらSplatoonによる通信のようです。調べてる見ると、Splatoonの処理でAmazonAWSのサーバーを使ってるということみたいです。11の方は、最初から最後の方まで定期的に流れていたので、通信の維持などに使われているのかもしれません。12の方は、結果発表中に流れているのみだったので、結果をサーバーの方に送信しているものと思われます。
13と14のパケットは、ISPがNintendo名義のもので、どちらも最初から最後まで定期的に流れていました。こちらも通信を維持する系の通信と思われます。
15と16は、パケットが目的地に到着できずにTTL超過を起こして途中経路の装置から送られてきた通知パケットですね。
通信の流れ
合計8万パケットの中で、どれくらいのパケット数の時に、ゲームではどの状態だったかを見てみましょう。まとめると、だいたい下記のような感じでした。
・パケット数 1~10000:マッチング中
・パケット数 10000~75000:ナワバリバトル中
・パケット数 75000~80000:結果発表中
ここで興味深いのは、マッチング中もナワバリバトル中も、TCPのパケットが無かったことです。ナワバリバトル中のパケットはもちろんUDPだったんですが、マッチング中のパケットはTCPだと予想していたのでこれはビックリです。なるほどマッチングに使用しているパケットがUDPなので、3対4とか2対3とかのマッチングが発生する訳ですね。
唯一TCPパケットで通信していたのは、結果発表中に流れていた、上記表の12番のパケットです。結果発表中のパケットがドロップして結果が出せない、なんてことになったらそれはアウトなので、ここだけはTCPなんでしょうね。
ちなみにTCPやUDPといったプロトコルの解説をざっくりとしておくと、TCPの方はPCとサーバー間でお互いに通信できることを確認しあいながら通信する方式で、パケットが途中経路でドロップした場合は再送して、通信を最後まで成立さるのが特徴です。それに対してUDPの方は、基本的に送りっぱなしで、もし途中でドロップしたとしても再送しません。ナワバリバトル中に流れるUDPパケットがドロップすると、ラグのようなことが発生します。それならTCPでやればいいじゃんって思った人は、それだとリアルタイムの対戦ゲーは無理なんですよねぇ。TCPによる通信は、距離が遠くなれば遠くなるほど遅くなる仕様なんです。TCPだとネット対戦のFPSやTPSはほぼ成り立たないでしょう。
Splatoonのパケット解析まとめ
今回キャプチャしてみて、気が付いたことをまとめるてみましょう。
・マッチングから試合完了まで、約8万発のパケットが流れている
・対戦時はマッチングメンバーに直接通信してる
・AmazonAWSを使ってサービスが提供されている
・マッチングの時はUDPパケットで通信して決定されている(なので3vs4とか2vs3とかが発生する
・試合中の通信はUDPパケットで通信している
・試合結果のみTCPパケットで通信している
パケットキャプチャから分かるのは、こんなところです。そこまで意外性のある事実はなかったですが、マッチングがUDPなのは意外でした。ここはTCPにしてもいいのかなと思ったんですが、海外勢とのマッチングするのを考えると、TCPでやってたらマッチングまで時間がかかり過ぎてゲームにならない、という検証結果が出たのかもしれないですね。パケットドロップして再送しまくってたら、それだけで数分過ぎてしまうかもですし。
そんな訳でSplatoonのパケットキャプチャによる解析は以上です。解析も楽しいですが、やっぱりゲームのウデマエももうちょっと上げたいですねぇ。37歳からTPS初めても、考えてプレイすればS+になれるってのを証明したいのですが、先は遠そうです……。