mmo game networking_1

22
牧野 克俊 2011/06/02

Upload: katsutoshi-makino

Post on 06-Jul-2015

1.119 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Mmo game networking_1

牧野 克俊

2011/06/02

Page 2: Mmo game networking_1

1.速度

2.信頼性

3.通信量

4.安全性

5.使いやすさ

6.変更に対するコスト

Page 3: Mmo game networking_1

通信の速度とは

プログラムの時間

OS内部の時間

ケーブルを伝わる時間

Page 4: Mmo game networking_1

プログラムの時間関数呼び出し

← ほぼ無視できる

検索

← 実装次第だがほぼ無視できる

メモリコピー

← 量によるが一番ボトルネックになりやすい

Page 5: Mmo game networking_1

OS内部の時間

基本どうしようもない

調整可能な部分

Nagle アルゴリズム

← 設定で回避

バッファ量 = TCP ウインドウサイズ

転送量 = MTU

Page 6: Mmo game networking_1

ケーブルを伝わる時間

東京 – サンフランシスコ = 8630km

↑は光の速さで 0.0287666 秒 = 28 ms

Page 7: Mmo game networking_1

信頼性ってなに?

パケットロス

到着順

→ これらは TCP なら OS がやってくれるのでほぼ気にならない

帯域の確保

祈るしかないです

Page 8: Mmo game networking_1

少なければ少ないほどいい

→ が、基本的に通信量を減らすと同期が甘くなる

パケットヘッダ

Ethernet(14)+ CRC(4)+ IP(20)+(TCP(20)or UDP(8))

IPv6 だと IP ヘッダは 40 バイト

Ack や KeepAlive に必要なパケット

Page 9: Mmo game networking_1

代表的なネットワークに対する攻撃 DDOS

SynFlood

Sniffing

IP Spoofing

セッションハイジャック

アプリケーションへの攻撃 壊れたデータを送る

巨大なデータを送る

意図的なデータ書き換え

Page 10: Mmo game networking_1

まだまだいっぱいあります

Page 11: Mmo game networking_1

通信経路が気にならない

通信方法が気にならない

パケットのフォーマットが気にならない

デバッグ時はパケットの中身を見れる

Page 12: Mmo game networking_1

よく変更されるもの?ネットワーク構成

コントラクト(通信規約)

実装方法による違いコード生成

実行コスト → 低

変更コスト → 高

データドリブン実行コスト → 高

変更コスト → 低

Page 13: Mmo game networking_1

じゃあ、どんなの作ろっか

Page 14: Mmo game networking_1

オーバーレイネットワーク

エンティティ(オブジェクト or インスタンス)同期

RPC(Remote Procedure Call)

通信状態の可視化

その他

Page 15: Mmo game networking_1

なにそれ?

あるコンピュータネットワークの上に構築された別のコンピュータネットワークのことである。(Wikipedia)

Game1

Game2

Database

Message

192.168.0.2 192.168.0.3

Page 16: Mmo game networking_1

経路探索

最適解をだすのはとても難しい

参考:グラフ理論、最大流問題、ダイクストラ法

疎通確認

繋がっているのか?Ping 値は?

グループ化

セキュリティの都合上必要

一斉送信

いちいちループ回すの面倒

Page 17: Mmo game networking_1

座標を同期したい→ キャラクタ、敵の状態を同期したい

なるべく楽をしたい→ 開発はデータドリブン、リリースはコード生成

権限の設定→ だれもが値の変更ができるはまずい

閾値設定→ ある程度以上離れたら同期

補完→ 時間、向き

Page 18: Mmo game networking_1

ゲーム開始、終了、etc

→ 値が変更されたときに何か処理をしたい

コード生成?前述の同期の上に乗っければいいんじゃないかな

Page 19: Mmo game networking_1

取れるべき情報

送受信量(合計、単位時間当たり)

RTT(Round Trip Time)

セッション数

使用メモリ

etc

Page 20: Mmo game networking_1

暗号化

圧縮

予測されにくい ID 生成アルゴリズム

モック支援

Page 21: Mmo game networking_1

なんかまだいろいろ言った方がいいことあった気がするけど思い出せないから

Page 22: Mmo game networking_1

おわり