資料館/ネトゲ製作/000

Last-modified: 2008-09-30 (火) 04:11:56

ネトゲーを実際に作るぞ

ああん、最近どうもネットゲーを作りたいヤツラが増えているようだ。おちゃっこLOVE(ラボ)にまで質問が飛んでくるんだからいないわけ無いよな。
そんなチルドレン達のために、素人が経験談と憶測を交えながら連載形式でネトゲーを作ってみるってのが今回の趣旨だ。


来年の文化祭には間に合わせてやる予定なので、今年3年生でない人たちは1年かけて頑張ってくれ。

始める前の大前提知識

さて、ネトゲーを作るに当たって幾つか抑えておかなければならない重要な知識がある。これはネトゲーに限った事ではなく、通信を行ううえで須く必要な知識が殆どであり、チルドレン達は今から勉強しておいたら5年後くらいとかにソッチ系の大学に進んだ時とかに鼻高々かもしれないので、難しそうだと構えずにゆっくりしていってね!!


ヤダ、早くゲームを作らせろ、というような早漏は回れ右。なるべく難しい事は言わずにフランクに概念だけを説明するので不足分はググる。細かい理論は自分で勉強しれ。俺はそのスタイルでネトゲーを作れた。
一応、参考になりそうなwikipediaの記事があれば注釈を入れておくことにする。

  • 基礎知識に自身のある自称ぷろふぇっそなる
  • 本講座の荒を探そうとしているモノホンのプロフェッショナル

は、読み飛ばしてください。また何かオヤッ?と感じた時に戻ってくるのもよし。

ネットワークとは

パソコン等のメカマシン機械同士のつながりをそう呼ぶ。(原則として)2つ以上の物体が繋がって、一つのネットワークを構成する。ローカルエリアネットワーク(LANねえちゃん)と呼ぶことがある。

インターネットとは

ネットワーク同士を相互に接続したものである。タコ足状態のタップがあるだろ。アレを一つのネットワークとして考えれば簡単だ。タコ足にタコ足してタコ足されてる。
我々一般ピーポゥのパソコンがインターネットに接続する場合、大抵はプロバイダと契約しているはずだ。ぷららとかアホーとか。つまり我々は今、プロバイダと接続し、そのプロバイダ同士が接続する事で世界中のマシンと繋がっている、というような理解をしておこう。AさんとBさんがネット対戦をする場合、直接繋がっているのではなく色々な場所を経由しているという事は頭に入れておこう。


最低でも、自分のパソコン>自分のプロバイダ>相手のプロバイダ>送り先、という経路を通っている事ぐらいはわかるはず。*1

ポート

ポート何番で通信とかあるだろ。アレだよ。アレ。
ネットワークに繋がってるケーブルは普通1本だ。でも誰かさんは○コ動で作業用BGMを流しながら攻略サイトを見つつネトゲーしながらス○イプでボイチャしてsha(ryを起動して同時に通信している。一本の回線に様々なタイミングでごちゃ混ぜに入ってくるデータを、通信機器がうまい事さばいてくれるのだ。
この、送り先のアプリケーションを一意に識別するのにポート番号を使う。ネットは80番、俺のゲームは6000番、という風に決めておけば、ルーターはそのポート宛てのデータだけを流してくれる。従って既に通信しているポートと同じ番号を新たに使おうとすると問題が発生する。
自作ゲームでポートを制定する際は、なるべく使われてなさそうな値を使用しよう。

厨房とMMOの最大の敵、ルーター

相手の識別

ネットワークに接続した機器には、須くIPアドレスというものが割り当てられる。同ネットワーク内では重複しないので、これによって機器を一意に識別できる。
同ネットワーク内で、というのが理解するうえで重要だが、他のネットワークでは重複しうる。また、一つのマシンが数種類のIPアドレスを持つ事が多い。
オラが現在使っているマシンのローカルIPは192.168.11.16だが、中にはこれと同じローカルIPを持ってる人も居るだろう。
プロバイダと契約し、ネットワークに直接接続したマシンには一意にグローバルIPアドレスが与えられる。このほかに、自身をネットワークと仮定したローカルIP(デフォルトでは192.168.11.1だとおもう)を持つ。世界中にこの192.168.11.1を持つパソコンは存在するが、グローバルIPは世界でタダ一つ、このマシンだけに与えられたもの(と考えて差し支えない。もうすぐ本当にそうなるだろう)である。*2
グローバルIPによりインターネット上の通信機器が一意に識別できたので、これを利用すれば相手を指定して通信する事が可能だ。もちろん、先に述べたように相手のマシンと一本の線で結ばれるわけではないが。
ところが昨今の家庭事情は社会情勢同様複雑怪奇、このような単純なお話にならない場合がある。厨房の宿敵、ルーターの登場である。*3

グローバルIPとローカルIPの違い

インターネットの定義をもう一度見てみる。ネットワーク同士を接続したものである。家庭にパソコンが数台あり、無線などの機能を用いて複数のパソコンがネットに繋がってる場合がある。今の世の中珍しくないだろう。うちの祖父の家にだって光回線とルーターがある。
家庭内LANの方式は主に二つ有り、前者の方が多い気がする。ただ、昔の友達に一人後者のタイプがいたので、少ないというわけでもないのかもしれんね。

  • ルーターに各々のマシンが接続し、データを通信している
  • 一台のパソコンがネットに接続し、そのパソコンに他のマシンが繋いでいる

前者と後者が似ている事に注意。というか、後者は一台のパソコンがルーターの役割をしているだけ。後者の場合、ホストとなるパソコンの電源が入っていないときは他のマシンもネットが出来ない。パパが寝ているときはエロ動画が見れないと嘆いているヤツは俺の友達といい飲み友達になりそうだ。


ここで問題になるのはインターネットの定義である。
仮に、前者後者ともに3台のパソコンA、B、Cがあったとする。後者の場合、Aがホストとなり、BとCはAに接続している。フィーリングでわかれ。
全部で3台のマシンがネットに接続しているわけだが、プロバイダはグローバルIPを3つもくれない。あくまでプロバイダ―我が家間の線は一本であり、家庭内ネットワーク全体で一つのグローバルIPを割り当てられる。誰かがグローバルIPを打ち込み、データを送信しても、後者ではホストであるAまで、前者にいたってはルーターまでしかデータが届かない(ようなノリ)になる。

こういうときに必要なのがローカルIPだ。グローバルIPでホストとなるルーターまでデータを引っ張ってきて、そこからは身内で決めたローカルIPを使って送り先を決める。


名前を例に取ると、身内で適当に決めた名前(太郎)はそれこそ世界中に5万といるが、地球にある日本国籍○○県×市△区の山田太郎、は世界中に一人しかいない。この場合、地球~山田までがグローバルIP、太郎がローカルIPに当たる。~山田、まで書けばとりあえずハガキは届くがだれ宛てかわからない。きちんとローカルIPである太郎、までを指定できて初めて、太郎宛にハガキが届く。正確には、郵便受けに入ったハガキをママが太郎に渡してくれる。

ポート開放ワカンネ

ところが、現実はそう都合よく行かない。あて先欄に書ける文字には限界があるのだ。大抵の場合、グローバルIPとローカルIPを繋げて書くことは出来ない。さっきの例では、山田様、とまでしか書くことが出来ないのだ。困ったね。


ここでポート開放が登場する。ポート開放という日本語がいかんとおもう。ポート割り当てというのが正しい。つまり任意のポートに流れてきたデータは、ローカルIPで指定したマシンに流す、という設定を行う事である。わかりやすく言えば、パパと太郎がママに「今日封筒と小包が届くんだけど、小包はパパ、封筒は太郎のだから来たら頂戴」と言っておくことである。これさえやっておけば、宛名が「山田様」の荷物が届いても、ママは怪しむことなくそれをパパや太郎に渡すだろう。

これを利用すれば、家庭内LANで自身がグローバルIPを持っていなくても、グローバルIPを持っているような感覚で通信できる。
ところがこれが困った事に小学生には難しい作業らしく「ポート開放教えてください^^」みたいな質問が散見される。メーカーによって異なるのでメーカーくらいは書きましょう。ルーターの説明書には記載されているとおもう。
また、パパがルーターの管理を独占している場合も多い。俺は将来家庭を持つなら絶対そうする。この場合は、きちんと理由を説明してパパにポートを割り当ててもらおう。

○:ネットワークプログラミングの勉強がしたくて、どうしてもポートxxxx番を使いたいんだ!
×:MMORPGが出来なくて友達にハブられそうだお!なんとかしてほしいお!

オマケ:ポート開放の大まかな流れ

また、パパがネットに堪能でない場合に備え、要所要所をぼかしながら説明しておく。
WindowsXP前提で喋ってる。

  1. 割り当てたいパソコンのローカルIPを調べる
    • 以下調べ方
      1. スタートメニュー>プログラム>アクセサリの中にあるコマンドプロンプトを起動
      2. ipconfigと入力する。
      3. IP Addressに記されている192~で始まるものがローカルIP
        ちなみにもしここが192で始まっていないなら、グローバルIPが割り当てられている可能性がある
      4. Default Gatewayに記されているIPは、ルーターのIP。後々使うのでメモれ。
    • 何にも弄っていないなら、この値は接続した順に192.168.11.1の末尾が1ずつ増えていく
    • 接続順序によっては変わりうるので、場合によっては固定という作業が必要。マンドクセ。ググれ。
  2. やりたいゲーム野望実現に使用するポートを調べるor決める。
  3. ルーターにアクセスし、使用ポートを割り当てる
    • http://デフォルトゲートウェイのIP/と打つと大抵アクセスできる
      • 弄ってないならhttp://192.168.11.1/である事が殆ど。上記方法で調べられる。
    • IDとパスワードの入力を求められる。説明書とかに書いてるのでくまなく探せ。
      • ID:root パスワード空白でエンターを押すと入れたりするとかしないとか・・・
    • ルーターによっては、ポート割り当てを以下のようにいう場合がある
      • ポート開放
      • アドレス変換(これが正しい呼称だとおもう)

総評

とりあえず0回目の基礎知識はこのくらいにしとこう。これからも重要な用語は適宜説明とwikipediaへのリンクをはっつけていくつもりだ。これだけわかってれば何となくネトゲーは作れてしまうとおもうが、よし、ネトゲー作るお!でこの基礎知識編を見ている方々は、一読して全てを理解するのは難しいとおもうので、適宜進んで戻り、進んで戻りを繰り返して行くとよいとおもいます。

また、(少なくとも小規模な)ネトゲーを作るに当たって、ネットワークの知識を1から10まで100%覚える必要は無いと思います。オイラだって7階層全部を丸暗記してるわけではないです。なんで必要な知識だけを取り込んでいって、その道程で興味を持ったものについてはググればいいと思います。これからの社会においてネットワークの知識はムダにはならないでしょう。知り合いに、このような順序で脱サラし、ネットワーク技術者になって再就職しようとしている人が居ます。
ネットワーク技術者になるには到底足りませんが、ネット対戦を通じてネットワークに興味を持ったなら、一発ネトゲーを作ってみるのも一興かと思います。そのお手伝いを、連載していくます。


*1 実際はもっと色々な所をたらいまわしにされている。Internet Protocol
*2 IPアドレス枯渇問題
*3 でも最近は意識しなくても出来るゲームとかあるよね。uPnP使ってんのかしら。わからん。