mmo game networking_1

Post on 06-Jul-2015

1.125 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

牧野 克俊

2011/06/02

1.速度

2.信頼性

3.通信量

4.安全性

5.使いやすさ

6.変更に対するコスト

通信の速度とは

プログラムの時間

OS内部の時間

ケーブルを伝わる時間

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

← ほぼ無視できる

検索

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

メモリコピー

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

OS内部の時間

基本どうしようもない

調整可能な部分

Nagle アルゴリズム

← 設定で回避

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

転送量 = MTU

ケーブルを伝わる時間

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

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

信頼性ってなに?

パケットロス

到着順

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

帯域の確保

祈るしかないです

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

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

パケットヘッダ

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

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

Ack や KeepAlive に必要なパケット

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

SynFlood

Sniffing

IP Spoofing

セッションハイジャック

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

巨大なデータを送る

意図的なデータ書き換え

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

通信経路が気にならない

通信方法が気にならない

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

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

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

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

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

実行コスト → 低

変更コスト → 高

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

変更コスト → 低

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

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

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

RPC(Remote Procedure Call)

通信状態の可視化

その他

なにそれ?

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

Game1

Game2

Database

Message

192.168.0.2 192.168.0.3

経路探索

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

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

疎通確認

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

グループ化

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

一斉送信

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

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

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

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

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

補完→ 時間、向き

ゲーム開始、終了、etc

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

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

取れるべき情報

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

RTT(Round Trip Time)

セッション数

使用メモリ

etc

暗号化

圧縮

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

モック支援

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

おわり

top related