どこにも情報がなく、興味があったので対戦の仕組みについて調べてみました。
PS4が送受信するパケットのキャプチャと業務用ルータの情報を元に解析したものであり、推測を多々含みます。
筆者の環境はIPv4、ルータ1台で「NATタイプ2」となっており、これを前提でまとめています。
また、文の構成はフルブwikiの対戦の仕組みを参考にさせて頂きました。
接続構成とパケットキャプチャ方法
PS4-業務用ルータ-インターネット
PC -
上記の接続構成で、業務用ルータのPC接続ポートにミラーポートを設定し、
パケットキャプチャソフトで取る。
その際、業務用ルータのNATテーブルを見てポート変換状況を確認する。
使用しているサーバ
アカウント:※調査中
エージェント:自分や相手の情報の通信、どのセッションサーバに登録したか、キープアライブ
セッション:セッションサーバ(複数台)から対戦セッション検索し該当セッションサーバの通知
STUN:NATトラバーサルを行うために、自分の使用するIPとudpポート番号を登録
ストレージ: 自分の戦績の保存など(体験会のカジュアルマッチでは未使用?)
使用しているポート番号
ルータがある環境では外部から開始する接続は通常できない。
サーバーとの通信はどれもPS4(ルータ内部)発信なので、それ以降はセッションが確立されているため各通信はルータを通過できる。
ただ対戦者同士のやりとりはP2P通信を使用していて、他者発信の通信も受ける必要がある。
ポート番号はフルブ以前と異なり、9305/udpのポートを使用している。
ルータにUPnPありの場合、対戦開始時にルータに9305/udpのポート開放が登録され、
対戦終了時に9305/udpのポート変換情報が削除される。
ルータがありUPnPなしの場合、9305/udpのポート開放をルータに手動で行う必要がある。
9305/udpポートが空いてない場合、9305/udpではなくルータがランダムなudpポート番号に変換して通信する。
そのため、ポート開放されていなくてもPS4からのポート番号は9305/udpポートが使われる。
ポート開放ができていない状況ではSTUNを用いたUDPホールパンチングのNATトラバーサルを使用している。
ただし確実なP2P通信するのが難しいため、制限される場合があるといわれている。
NATトラバーサルがあることで、同一ルータの下にPS4を複数台置いてもポートが異なるため同時に通信対戦ができる。
ポート開放
9305/udpポートのポート開放を行う。
またはルータのUPnPをありにする。
(※IPv4の場合はあり。v6プラスなどのIPv4 over IPv6の場合はなし。詳細は別記事)
上記の設定を行わない場合、ルータがランダムなudpポートに変換しNATトラバーサルにて、通信対戦を行う。
PS4はUPnPの設定がないため、デフォルトでありになっているようだ。
対戦中の通信速度
フルブと変わらず上下ともに平均200Kbps程度。
カジュアルマッチの大まかな流れ
※ストレージサーバなどど通信している場合もあるが省略
- エージェントサーバに自分の情報登録
- エージェントサーバから相手リスト(PSNID、ルータのグローバルIP、PS4のプライベートIP、ルータ/PS4ポート番号など)取得
- リストの全グローバルIPに対し、ポート番号が9305なら9305/udpで送信、0ならping送信
- エージェントサーバからセッションサーバ情報教わる
- STUNサーバに自分のIPとポート番号を登録(ポート開放されていない場合、ルータでNAT変換したポート番号を登録)
- セッションサーバに自分の情報登録
- セッションサーバから対戦相手の情報通知
- 対戦(自分と他3人とのP2P通信)
- セッションサーバのセッション解放