2022年11月5日土曜日

スプラトゥーン3:通信エラーについて

スプラトゥーン3で通信エラーが発生する件について、掲示板とかTwitterでブチ切れてる人をよく見かけます。これについて、思っていることを書きます。


どういうときに「通信エラーが発生した」と判断しているのか、そのロジックは不明なのですが、、、まあでも、Switchとスプラトゥーンのサーバの間で、必要なデータの送信/受信ができないとエラーになるだろうと思います(推測です)。

必要なデータの送信/受信ができない、という状況は、もう少し分類できると思います。

  1. データの送信ができない。
  2. 送信されたデータが、受信されるまでの途中で、消えてしまう。
  3. 送信されたデータが、サーバで受信されるまでに、想定以上に時間がかかってしまう。
  4. 送信されたデータが、サーバで受信に失敗してしまう。

 

それぞれ、考えられる発生理由をまとめていきます。

データの送信ができない

Switchがインターネットに接続されていなければ、サーバにデータを送信することはできません。インターネットに接続するためには、Switchがちゃんと自宅のルータ(インターネットと接続するための機器)と、接続できている必要があります。有線でも無線でも、接続が切れることは、あります。無線のほうが確かに切れやすいとは思いますが、有線でも中の電線が傷んでたりすると、接続が不安定になることはあります。

あとは、これはあまり無いと思いたいのですが、Switchが高負荷になっており、想定されるタイミングでデータを送信できないというケースもあるかもしれません。 さすがにここは、スプラ3の開発中に十分にテストしていると思いますが。

送信されたデータが途中で消えてしまう

Switchと、スプラのサーバの間には、たくさんの通信機器が存在しています。 自宅のルータ、インターネットプロバイダのネットワークの中の通信機器(1つじゃなくて、たくさんあります)、サーバ側のルータ等の通信機器。

ざっくり言うと、Switchとスプラのサーバは「インターネット」を介してつながっているわけですが、「インターネット」という一言の中には、多数の通信機器が存在していて、その全ての機器がデータの送受信を正しく行ってくれて、初めて、Switchとサーバが正しくデータを送受信できます。

これだけ多くの機器があるので、途中で、どこかの機器が通信に失敗して、データが消えてしまう(データロス)こともあるでしょう。そうすると通信エラーとなります。

もちろん、データが届かなかったときに、そのデータを再送する仕組みはあります。例えば、「TCP 再送」でググると、情報が見つかるでしょう。ただし、Switchやスプラトゥーン3が、データの再送について、どういう仕組みを採用しているかは、不明です。再送処理は、一切していないかもしれません。

また、再送処理を実施しているとしても、あまりにデータロスが多いと、「データがサーバに届くまでに時間がかかってしまう」という話になります。

サーバで受信されるまでに、想定以上に時間がかかってしまう

スプラトゥーン3はシューティングゲーム、かつ、対戦ゲームなので、自分が操作している情報(イカが向いている方向、イカの移動スピード、移動の方向、打った弾の位置、敵の位置、敵の移動方向、、、) を、できるだけ速く、サーバで集めて、対戦中の各Switchに送って共有しないといけません。

なので、極端な例ですが、Switchとサーバの間の通信に1秒かかっていたら、話になりません。まともなゲームにならないでしょう。

ですので、データの送信~受信にかかる時間が長い場合も、通信エラーとしているのではないかと思います。たぶん、ロビーでマッチングしているときに、通信にかかる時間を計測しているんじゃないでしょうか。試合開始前に、通信遅延に問題がないかを確認して、その時点で遅ければ通信エラーにしてるんじゃないかと推測します。

上に書いたように、インターネットにはたくさんの通信機器が存在して、様々なデータの送受信をしています。スプラトゥーン3のデータだけを送受信しているわけではなく、YoutubeとかTwitterとかインスタとか、世の中の色んな人がデータを送受信しています。通信時間は、これら全世界の人々のデータのやりとりの影響を受けます。ここがインターネットの難しいところです。通信時間を完全に保証することが、とても難しいです。

身近なところだと、スプラトゥーン3をプレイしているときに、スマホやPCでyoutubeの高画質の動画を見たりすると、通信エラーの発生率が増えると思います。スプラのデータ通信と、Youtubeのデータ通信が、共通のネットワークを流れるためです(自宅周りで)。また、Wi-Fiなどの無線は、別の無線と「干渉」して、通信品質が落ちるときがありますし、雨の影響を受けたりもします。

サーバでデータ受信に失敗する

スプラトゥーンのサーバは、きっとどこかのデータセンターに設置されているのでしょう。1台のサーバで、何百万というユーザの対戦を処理するのは難しいと思うので、複数のサーバがあると思います。

1台のサーバで、何個の対戦を同時に処理できるのか(何個のSwitchと、一度にデータ送受信できるのか)は不明ですが、処理の量が想定を超えると、サーバは、自分に届いているデータを受信できなくなると思います。この場合も、データが消えたのと同じ扱いとなり、通信エラーになるのではないかと推測します。

この問題は、サーバの処理負荷の問題なので、サーバの数を増やすとか、サーバのスペックを上げるなどの単純な対策が考えられます。インターネットの中の話ではなく、スプラのサーバの話なので、Nintendoが自らが実施できる対策です。まあ、サーバの数を増やしたり、スペックを上げると、運営にかかるコストも増えるので、そこが悩ましいところなのではないかと思います。

処理負荷が小さくなるように、処理の内容を見直すというアプローチもありますが、これはプログラムの修正になるので、あらたなバグを生む可能性があります。

発売当初に比べると、体感ですが、通信エラーは減ったと思います。サーモンランで、Wave3クリアしたときに通信エラーが頻発していた問題など、解決してくれていってますよね。


まとめ

インターネットには様々な通信機器が存在しており、その所有者/運用者もバラバラです。契約しているインターネットプロバイダだけが介在しているわけではありません。複数のインターネットプロバイダのネットワークが合体したものがインターネットです。

ですので、通信エラーが起きたときに、いきなりNintendoとか、契約しているインターネットプロバイダを責めるのではなく、色んな原因が考えられるからなぁ、、、と、思っていただくと良いかと思います。 逆にストレス溜まるかもしれませんが。笑