SlideShare ist ein Scribd-Unternehmen logo
1 von 56
ゲームの通信をつくる
仕事はどうなるのだろう?
2019年10月
モノビットエンジン 取締役CTO
中嶋謙互
Twitter @ringo
https://github.com/kengonakajima
なぜこの仕事を
• 音楽とか絵みたいな感じで一人でオンラインゲームを好きなよ
うに作って、世界中の人と一緒に遊びたい。
• それを可能にするような方法を考えたい。
• そのやり方を多くの開発者とシェアしたい。
• 今日は低いレイヤーから上へ行きます
Internet Protocol Stack
https://www.w3.org/People/Frystyk/thesis/TcpIp.html
ハードウェア
1個1個のパケットを
マシンまで届ける
マシンの中のプロセスや
ソケットにデータを届ける
それぞれのアプリケーション
Internet Protocol Stack
https://www.w3.org/People/Frystyk/thesis/TcpIp.html
ハードウェア
1個1個のパケットを
マシンまで届ける
マシンの中のプロセスや
ソケットにデータを届ける
それぞれのアプリケーション
ハードウェア層
• ゲームにかかわるマシン(サーバー、クライアント)は
• どう変わってきたのか?
• どう変わっていくのか?
プロセッサ性能
http://www.clivemaxfield.com/area51/do-not-delete/pam-0001-emb-nca-01-lg.jpg
メモリ帯域幅
https://www.karlrupp.net/2013/06/cpu-gpu-and-mic-hardware-characteristics-over-time/
メモリのコスト
https://hblok.net/blog/posts/2017/12/17/historical-cost-of-computer-memory-and-storage-4/
消費電力あたり性能
https://www.karlrupp.net/2013/06/cpu-gpu-and-mic-hardware-characteristics-over-time/
Ethernet
https://insidehpc.com/2018/03/new-2018-ethernet-roadmap-looks-future-speeds-1-6-terabits-s/
• WiFi 1 : 802.11b (1999) 11Mbps
• WiFi 2 : 802.11a (1999) 54Mbps
• WiFi 3 : 802.11g (2003) 54Mbps
• WiFi 4 : 802.11n (2009) ~600Mbps
• WiFi 5 : 802.11ac (2014) 292Mbps~6.9Gbps
• WiFi 6 : 802.11ax (2019) 9.6Gbps
• WiFi 7 : 802.11be (2024?) ?
WiFi
モバイル通信
名称 時期 帯域幅 遅延 料金
2G 1991 40Kbps 100ms~ ∝パケ数
3G 2000 144Kbps~ 100ms~ ∝パケ数
4G 2009 ~1Gbps 10ms~ ∝パケ数/定額
5G 2018 ~数Gbps(複雑) 1ms~ 定額?
6G ? Tbps? マイクロ秒 ?
クラウドマシン CPUコスト
• 1CPUコアの2GB程度なマシン/1ヶ月
• AWS/Google/Azure他:5000円〜1万円でじわじわ下落
• Linode/DigitalOcean等 : 500円〜1000円で下落中
クラウドマシンからの送信コスト
• 1GB送信
• AWS/Google/Azure他: 5~10円
• Linode/DigitalOcean等 : 1~2円
• だんだん下がっている
• 単価下げ
• 無料枠の拡大
クラウドストレージのコスト
• AWS S3 TBあたり (標準タイプ)
• 2006 : $150
• 2010 : $140
• 2012 : $95
• 2014 : $30
• 2019 : $21
Internet Protocol Stack
https://www.w3.org/People/Frystyk/thesis/TcpIp.html
ハードウェア
1個1個のパケットを
マシンまで届ける
マシンの中のプロセスや
ソケットにデータを届ける
それぞれのアプリケーション
インターネット層
• IPv4, IPv6
• 遅延の大きさ
• クラウドはどこにある
IPv4, IPv6
https://tech.nikkeibp.co.jp/it/article/COLUMN/20071009/284087/
v6はアドレス空間がとても広い
IPv6
https://www.google.com/intl/en/ipv6/statistics.html
長距離転送
• 東京 - サンフランシスコ
• 往復 16000km
• 光速 200000km/s
• 理論上の時間 : 80ms
• pingして計測 : 110ms~120ms
• 10年前は150ms~200msだった
• これ以上改善は難しいかも
中距離転送
• 東京 - 富山
• 往復 1600km (大阪経由)
• 光速 200000km/s
• 理論上の時間 8ms
• pingして計測 24ms
• まだ改善するかもしれない
都市内転送
• 都内であれば0.5~2ms
• AWS-Google/Azure 0.5ms~1ms
• AWS-AWS 0.1~1ms
• AWS-Linode 2ms
同一AZ内転送
• AWS
• ピークは10Gbps / 20Gbps (インスタンスによる)
• インスタンスタイプによって様々な制限がかかる
• 負荷が一定以上継続すると制限
• 帯域制限
• パケット数制限 (100万~140万pps)
• 高額なインスタンスは制限がゆるい
https://cloudonaut.io/ec2-network-performance-cheat-sheet/
データセンター
AWS Google
Azure DigitalOcean
Internet Protocol Stack
https://www.w3.org/People/Frystyk/thesis/TcpIp.html
ハードウェア
1個1個のパケットを
マシンまで届ける
マシンの中のプロセスや
ソケットにデータを届ける
それぞれのアプリケーション
トランスポート層
• 信頼できないインターネット上で
• あるマシンのあるプロセスに対して
• データを届ける
IPv4, IPv6の基本動作
引用元: atmarkit
インターネットの性能
• パケットロス率
• 有線LAN : スイッチとケーブルがちゃんとしてたら、ほぼ0だが、
受信側マシンに余裕がなくなると消える
• 無線LAN : 負荷がないときでも10000個に1個ぐらい消える。負荷
が高いと、100個に1個消えるときもある
• モバイルネットワーク : 電波がいいときでも100個に1個消えるか
も、電波が悪いと1割消えたりする
2つの主要プロトコル
UDP TCP
宛先マシン内の特定のポートに届ける ○ ○
チェックサムで誤り訂正 ○ ○
パケットロスのとき再送する ○
データの順序を保証する ○
ソケットAPIにおける「ポート番号
」
Linuxマシン1
プロセス1
Windowsマシン1
10.0.1.11
10.0.1.12
プロセス2
プロセス1
TCP 8080
UDP 3001
TCP 443
UDP 53
インターネット→
TCPパケット
IP:10.0.1.11
PORT: 8080
UDPパケット
IP:10.0.1.12
PORT: 53
トランスポート層: TCPの時代分け
• 1980年代 : TCP登場、telnetでマシンを遠隔操作
• 1990年代 : メールやHTTPなどで大ブレイク
• 2000年代 : モバイルで長時間のストールを防ぎたい!
• 2010年代 : 動画や音声を高速送信したい!
Nagleアルゴリズム、スロースタート
高速リカバリの導入と改良
Long Fat パイプへの対応
状況や用途に合わせてアルゴリズムの使い分け
TCPがどうしても解決できない問題
• head-of-line blocking
• IPアドレスの変化に対応できない
head of line blocking
TCP
こんなふうにしたい
packet1の影響で、全体が長時間ストールする
packet1はストールするがpacket2,3は早く届く
packet1の再送
packet1の再送
https://qiita.com/Jxck_/items/0dbdee585db3e21639a8
IPアドレス変化
サーバ
インターネ
ット
IPアドレス固定
光回線+無線LAN
モバイルネットワーク
IPアドレス 1.2.3.4
IPアドレス 3.4.5.6
屋外から自宅内に移動して、
4GからWiFiに移行
QUIC
• TCPの欠点を克服するUDPベースのプロトコル(RUDP)
• 2012年, Google
• 現在は仕様のドラフト23、早いペースで改良中
• head of line blocking回避
• アドレス変化に対応
• マルチチャネル
• 0RTT接続 (新規接続が速い)
• 暗号化
• WebSocketsどころではなく大きな全部入り仕様
MRU : Monobit RUDP
• C++(ほぼC), 小さい
• IPアドレス変化への対応
• 正しい順序で送る
• 確実に送る (早めの再送,QUICにはない)
• 順序も確実さも保証しない方法で送ることもできる
• 0RTTハンドシェイク
• チェックサム
• サーバサイドの動的なアドレス, QUICにはない
• C10K以上のMMO向けにチューニング(少人数ももちろんOK)
• スロット飽和攻撃対策
• IP偽装対策
• 大量接続対策
• Linux/Windows/iOS/Android/MacOSに対応、ゲーム機は対応予定
• 暗号化は上位レイヤで実装
HTTPの発展
接続>1ページGET>切断
KEEPALIVE, パイプライン化
ストリーム多重(並列)化, フロー制御
head of line blocking 回避,
アドレス変化への対応
https://bloggeek.me/who-needs-quic-in-webrtc/
ブラウザ双方向通信の発展
• 2011 WebSockets : TCP / HTTP1.1 に追加された
• 2011 WebRTC : UDP
• 2020~? WebTransport / UDP Socket : WebSockets の
UDP版
Internet Protocol Stack
https://www.w3.org/People/Frystyk/thesis/TcpIp.html
ハードウェア
1個1個のパケットを
マシンまで届ける
マシンの中のプロセスや
ソケットにデータを届ける
それぞれのアプリケーション
アプリケーション層
• どうやってゲームを作るか?
クラウドゲーミング
• サーバからクライアントに映像を送信する
• ゲームのプログラムを配布しない
• インストール不要、即クライアント起動
• 違法コピー/リバースエンジニアリング防止
• テストとデバッグの方法が柔軟に
• クライアントのプラットフォーム別の対応が不要
• ネットコードなしでマルチプレイを実装できる
クラウドゲーミング3つのモデル
• 1:1 1ユーザーに1サーバー
• N:N 1:1ゲームをNユーザーでマルチプレイ
• 1:N Nユーザーに1サーバー
インターネット
画面/スピーカー
タッチパネル、マウ
ス、パッド
操作内容 描画結果の映像
ゲームフロントエンドサーバ
ビューワプログラム
CPU, GPU, Flashストレージetc
操作 出力
サーバOS (Linux, Windows,etc)
描画指示 描画結果
各種ハードウェア/OS
1:1 一人用ゲーム
プレイヤー側端末
ゲーム提供側環境(クラウド)
インターネット
プレイヤー側端末
ゲーム提供側環境(クラウド)
操作内容 描画結果
画面/スピーカー
タッチパネル、マウ
ス、パッド
ビューワプログラム
ゲームフロントエンドサーバ
CPU, GPU, Flashストレージetc
サーバOS (Linux, Windows,etc)
画面/スピーカー
タッチパネル、マウ
ス、パッド
ビューワプログラム
ゲームフロントエンドサーバ
CPU, GPU, Flashストレージetc
サーバOS (Linux, Windows,etc)
操作内容 描画結果
任意の形式で直接通信
各種ハードウェア/OS各種ハードウェア/OS
N:N 2人用
インターネット
プレイヤー側端末
ゲーム提供側環境(クラウド)
操作内容 描画結果
画面/スピーカー
タッチパネル、マウ
ス、パッド
ビューワプログラム
画面/スピーカー
タッチパネル、マウ
ス、パッド
ビューワプログラム
ゲームフロントエンドサーバ
CPU, GPU, Flashストレージetc
サーバOS (Linux, Windows,etc)
操作内容
描画結果
各種ハードウェア/OS各種ハードウェア/OS
ネットワークコードなしでマルチプレイを実装できる
1:N
インタ
ーネッ
ト
Unity on GPUつきサーバー
1:N 映像ストリーム
映像+データ
操作
ゲームデータはひとつ。
全モデルデータ、全メッシュ
テクスチャ、シェーダなど
GPU内のオブジェクトをすべて共有した状態で
4回レンダリングするだけ。
クライアントでデータを受信し、
HUDを重ねて描画する
インタ
ーネッ
ト
GPUなしサーバー
1:N 描画コマンドストリーム
描画コマンドデータ
操作
ゲームデータはひとつ。
オブジェクトの位置や角度などを毎フレーム送る
映像に比べて帯域消費が小さい+GPUが不要
汎用の再生クライアントで
オブジェクトデータを受信し、
全体を描画する。
テクスチャなどのデータも必要なものだけを受信する
ゲーム
サーバー
クラウドゲームと遅延
• スタンドアロンゲーム(非タッチ)
• 入力 ~0.1ms 描画 16.6~33.3ms 合計16.6~33.3ms
• スタンドアロンゲーム(タッチ)
• 入力 40~100ms 描画 16.6~33.3ms 合計 50~135ms
• クラウドゲーム(非タッチ)
• 4G 入力 ~0.1ms ネットワーク 40~100ms 描画 16.6~33.3ms ネットワーク
40~100ms デコード 1ms 描画 16.6ms 合計110〜250ms
• 5G 入力 ~0.1ms ネットワーク 5~20ms 描画 16.6~33.3ms ネットワーク 5~20ms
デコード 1ms 描画 16.6ms 合計45〜90ms
• クラウドゲーム (タッチ)
• 非タッチ+40~100ms
• 4G 合計 150~350ms
• 5G 合計 85~190ms
クラウドゲームで必要な帯域
• 伝統的な同期
• 10~100Kbps
• 描画コマンドストリーム
• 10~500Kbps
• 映像
• 500K~1Mbps (640x480)
• 1~3Mbps (1280x720)
映像送信の最適化
• ゲームロジックがエンコーダに指示できる
• シーンごとに圧縮率・フレームレート切り替え
• 画面の部分ごとに圧縮率切り替え
• スクロールゲームにおける圧縮ヒント
• 音声再生だけクライアントで行う
• etc..
1280x720で2Mbpsから、1Mbps~ 500Kbps台へ
インゲーム映像+オーバーレイUIの分
離
地形、キャラ、
モブ、エフェクト類は
インゲーム映像として
サーバでレンダリング
HUDはクライアントでレンダリング
これならブラウザでOK
鍵となる環境の変化
• 送信コストが1GBあたり1円
• 100Kbpsの音声を78000秒
• 500Kbpsのアバターモーションを 15625秒
• 1280x720 2Mbpsの映像を3900秒
• GPUインスタンスの費用
• 今の半分でもまだ高いかも
• EC2 g2 > g3 > g4 > …
• 5G定額
• ブラウザでUDP
ゲームデータの同期は必要なくなるの
か?
• クラウドゲーミングでも N:Nなら必要
• MMOのサーバー間通信
• スタンドアロンゲームと共通のコードにする場合
• 併用する場合
• オーバーレイ部分の同期
でも、プロトタイプ段階では全く不要になるかも。
そのままリリースという流れもある?
ありえそうな今後の展開
• Unityなどのエンジンやミドルウェアが1:Nをサポート
• 映像式、描画コマンド式どちらも
• プラットフォーム自体が1:Nをサポート
• 映像再生用の汎用プレイヤークライアントが普及
• クライアントとしてWebブラウザの利用が進む
ネットコード書くのは誰でもできるわけではないし、
できるとしても、すごくめんどくさい!
こんなふうになったらいいな
• ゲーマーとして
• ゲームの実況サイトでクリックしたらすぐ参加してプレ
イ
• アプリストアでクリックした瞬間プレイし始めてプレイ
時間で課金
• エンジニアとして
• マルチプレイゲームをネットコードなしで開発して、ち
ょっとWebでテスト公開してもデータはぬすまれない。

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
リアルタイムコマンドバトルのゲームで PlayFab を使ってみたリアルタイムコマンドバトルのゲームで PlayFab を使ってみた
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
 
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのかネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
 
実践イカパケット解析α
実践イカパケット解析α実践イカパケット解析α
実践イカパケット解析α
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
 
通信対戦ゲームを作った話
通信対戦ゲームを作った話通信対戦ゲームを作った話
通信対戦ゲームを作った話
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
Online MultiPlay Game Design
Online MultiPlay Game DesignOnline MultiPlay Game Design
Online MultiPlay Game Design
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
Unityと.NET
Unityと.NETUnityと.NET
Unityと.NET
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 

Ähnlich wie ゲームの通信をつくる仕事はどうなるのだろう?

HTML5 NIGHT 08. Web × パフォーマンス技術
HTML5 NIGHT 08. Web × パフォーマンス技術HTML5 NIGHT 08. Web × パフォーマンス技術
HTML5 NIGHT 08. Web × パフォーマンス技術
Yoichiro Takehora
 
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
Ruo Ando
 

Ähnlich wie ゲームの通信をつくる仕事はどうなるのだろう? (20)

HTML5 NIGHT 08. Web × パフォーマンス技術
HTML5 NIGHT 08. Web × パフォーマンス技術HTML5 NIGHT 08. Web × パフォーマンス技術
HTML5 NIGHT 08. Web × パフォーマンス技術
 
20060520.tcp
20060520.tcp20060520.tcp
20060520.tcp
 
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
 
Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎
 
さくらのクラウドを使ってみよう
さくらのクラウドを使ってみようさくらのクラウドを使ってみよう
さくらのクラウドを使ってみよう
 
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdf
 
20210510 software design
20210510 software design20210510 software design
20210510 software design
 
201104016 osc2011 kobe
201104016 osc2011 kobe201104016 osc2011 kobe
201104016 osc2011 kobe
 
GoでEPC作って本番運用している話
GoでEPC作って本番運用している話GoでEPC作って本番運用している話
GoでEPC作って本番運用している話
 
Kernel vm-2014-05-25
Kernel vm-2014-05-25Kernel vm-2014-05-25
Kernel vm-2014-05-25
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
 
20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...
20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...
20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...
 
20120525 mt websocket
20120525 mt websocket20120525 mt websocket
20120525 mt websocket
 
Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向
 
SORACOM UG 東海 #1 | SORACOM 紹介
SORACOM UG 東海 #1 | SORACOM 紹介SORACOM UG 東海 #1 | SORACOM 紹介
SORACOM UG 東海 #1 | SORACOM 紹介
 
Lagopus Project (Open Source Conference)
Lagopus Project (Open Source Conference)Lagopus Project (Open Source Conference)
Lagopus Project (Open Source Conference)
 
cs-13. 中間まとめ
cs-13. 中間まとめcs-13. 中間まとめ
cs-13. 中間まとめ
 
クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門クラウド時代のネットワーク再入門
クラウド時代のネットワーク再入門
 
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターンSORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
SORACOM Conference Discovery 2017 | E3. デバイスからのクラウド連携パターン
 
PreadNet
PreadNetPreadNet
PreadNet
 

ゲームの通信をつくる仕事はどうなるのだろう?