Mmo game networking_1
-
Upload
katsutoshi-makino -
Category
Technology
-
view
1.124 -
download
4
Transcript of Mmo game networking_1
牧野 克俊
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 生成アルゴリズム
モック支援
なんかまだいろいろ言った方がいいことあった気がするけど思い出せないから
おわり