ネットワークを考えるときに考えること(1)

はじめに

個人的にこういうのやってみようと思っているネタはあれども、どうも休みになると何もやりたくない症候群が始まってさっぱり手が付かないんですわ。仕事やらねば…土日考えよう…と思ってみたりしても同じくさっぱりやる気にならず、非生産的な時間を過ごしてしまっているので、だったら最近 blog なんにも書いてないし、ネットワーク系のネタで何か書いてみようと思ったのでした……それも図とか面倒なものを含めず、テキストだけで書けそうな何かを(ぉ

過去、似たような話は前にも書いてあるんだけど、

ネットワークを考える(設計する)ときにどういった観点でどういうことを考えるか、という話でまとめて書いてみるのもアリかなあとね。基本的には SIer的観点でキャンパス系(オフィスやフロアのネットワーク)、エンタープライズ系(企業情報システムのネットワーク)、データセンタネットワーク、というあたりを想定していろいろ挙げてみます。狙い所によって考え方とか選択基準は変わるかなあと思いますが(キャリアバックボーンみたいなところに対してはまた考え方が違うでしょう…)、まあこういう見方もあるよね、くらいの参考程度になればいいかなと。個人的見解なのでホント参考程度だと思ってください。他にもこういうポイントをってのがあればツッコミきぼんぬ。

ネットワークってなんだろう?

ネットワークどうするかってのを考える前に、そもそも情報システムにおけるネットワーク…「ネットワーク」の役割とか位置づけって何だろうね、という話を考えてみます。もしも「ネットワーク」がないとどうなるんだろう? 「ネットワーク」があるから何ができるんだろう? われわれは、「ネットワーク」に何を期待しているのだろう?

……というのを考えてみるとまあいくつか出てくるでしょう。まあ結局のところネットワークに求められているのは、離れたところにあるたくさんのノードと高速かつ大量の情報のやりとりができるようになることだろうなと。もうちょっと抽象化すると、物理的な位置・配置を抽象化するってあたりなのかなと思います。(情報交換の仕組みの抽象化(標準化?)ってポイントもあるけど、プロトコル周りの話はここでははずしちゃいます。Ethernet + TCP/IPなネットワークの設計、という前提にしちゃってるので。)

我々は、ネットワークがあるからこそ、太平洋の向こう側にあるサーバに手元で作ったアプリケーションをデプロイして動かしたり、地球の裏側にいる人とリアルタイムに会話ができたりするわけです。ネットワークがあるからこそ、電気信号の調整とか、通話経路の計算をしなくても、IDを指定するだけで情報の交換ができる……。というのは、現実世界の、物理的な機器や通信ノードの配置を抽象化・モデル化して論理的に情報交換が成り立つからです。それを実現するのがネットワークの役割かな、と思うわけですね。

あともう一つ。ネットワーク…というか通信というのは必ず複数のノードが必要になります。最低でも2点(source/destination)、自分と相手がいてはじめて「情報の伝達」が発生します。したがって、ネットワーク設計は「関係性の設計」でもあります。ネットワークを考える上で必要になるのは、誰が、誰と、どういう関係性を持つ必要があるか、です。何がどこにあるか、だけでなく、ある物がある物とどう連携しているか(連携する必要があるか)に注意してください。

ネットワークを考えるときに何を考えれば良いのか

「ネットワーク」は物理的な位置や配置を抽象化するもの、と考えればネットワークを考えるときに考えなければいけないことがなんとなく見えてきます。つまり、

  • 物理的な構造
    • ネットワークは物理的な配置や位置を抽象化する物であれば、ネットワークを考えるときには物理的な位置や配置、システムの物理的な構成を考える必要があります。ネットワークの上で成り立つシステムは、ネットワークがこうした物理的側面を抽象化してくれるので、これらの問題を気にする必要が(あまり)無くなります。
  • 論理的な構造
    • 物理構造の抽象化、論理構造とのマッピング、という話は必然的にどういった論理構造にすべきか、という話が含まれます。

論理的なネットワーク構造をどう考えるか? それと物理構造との対応はどうするか? ということを考える必要があります。

あとは、実際のところネットワークって何ができればいいのか、ってところを見る必要があります。ネットワークの上でなにができればいいのか……どういう通信が実現できれば良いのか、どういう条件を満たす必要があるのか。機能・非機能要件の検討、ってやつです。この辺はある程度お決まりのパターンがあるのでそれについて見ておきましょう。当然、物理構造に対する機能・非機能面の要求がありますし、論理構造に対する機能・非機能の要求があります。

ネットワークに限らず、システムの検討をやる場合はこれらの条件をそろえて上手いことバランスを取る必要があります。大抵、こうした検討項目は相互に関連があるので、ある点を動かすと別の点も合わせて動かす必要があったりします。明示的にトレードオフになる項目も少なくありません。大切なのは、それらの関連性を洗い出した上で、実際のシステムで何をどこまで実現するかという方針立てをなるべく明確にすることです。ある物を他の物よりも重要視するのであれば、何故、どのような理由でそうするのかを明確にしてください。こうした設計上の理由: 「何故」が記録されていないと、今後のシステム変更が非常にやりにくくなります。

もう一つ。「関係性の設計」という点を踏まえると、ひとつの通信 = 関係性は必ず、最低でも2点の始点と終点によって定義されます。特にネットワークを専門としない担当者においては、「自分は」何をする必要があるという点については見ていますが「誰と」何をするかについてはあまり見えていないケースがあります。ネットワーク担当者はシステムを構成するコンポーネントと全体の関係性を調査してゆく必要がありますし、ネットワーク以外の担当者は、自分の担当するコンポーネントがどこと(誰と)連係して動作する必要があるのかを伝えられるようになっている必要があります。

ということで、基本は5W1Hですね…

  • いつ: 時間的特性やシーケンス、フェイズ
  • どこで: 物理的、論理的な配置
  • だれが: 誰から(source)、誰に対して(destination)
  • なにを: どういったデータを
  • どのように: どのような方式で(プロトコルで)

次回

じゃネットワーク考える時ってどういう情報を集めりゃいいんだろうか、という話をします。