教科書には載っていない ネットワークエンジニアの実践技術

第10回論理演算で考えるネットマスクの仕組み

問題

IPアドレス:199.32.10.85、ネットマスク:255.255.255.192と設定された端末がある。この端末が所属するネットワークのネットワークアドレスを答えなさい。

CCNAなどネットワーク関連の資格試験には、このような問題が頻出されていますね。また実務においても、ネットワーク機器の設計や設定を行うためには、IPアドレスとネットマスク値からネットワークアドレスや収容できるホスト数を算出できなくてはいけません。

このような計算をするたびに、

  • 「なぜ、こんなに面倒な計算をするのだろう?」
  • 「誰が、こんな面倒なことを考えたのだろう?」

と思うことはありませんか?

今回のコラムでは、⁠ルータを作った人たち」の気持ちになって、ネットマスク、ワイルドカードマスクの仕組みを理解してみようと思います。

ネットマスク、ワイルドカードマスクの仕組みを理解する

まず、ルータにIPパケットが到着したときの動作を考えてみましょう。

  1. インターフェースにIPパケットが到着すると、ルータは宛先IPアドレスを読み込みます。
  2. 次に、ルーティングテーブルを検索し、ネクストホップのアドレスなどを調べます。
  3. ネクストホップの方向へIPパケットを転送します。

この動作をパケットが到着するたびに行うわけですから、当然ながらなるべく簡単な方法(CPU負荷の低い処理方法)で実現できたほうが、ルータの性能が向上しますね。

さらに、上記の2.の処理の詳細について考えてみましょう。

たとえば、ルーティングテーブルに「199.32.10.64/26」の情報が記載されていたとして、宛先のIPアドレスが「199.32.10.85」のパケットが到着した場合、以下のような処理が行われます。

まず、ルータ(CPU)の内部では、全ての数値は2進数として処理されます。

199.32.10.85 →11000111.00100000.0001010.01010101

そして、宛先IPアドレスとネットマスクの論理積(AND)を計算します。

ここで言う"AND"とはいわゆる論理演算の一種であり、コンピュータが持っている最も基本的な能力のひとつです。論理演算については、皆さんもご存知だと思いますが、念のためANDの動作を説明します。

図1

要は 1 AND 1 の場合だけ答えが⁠1⁠になるわけですが、別の見方をすると、

  • 2番目の数値が"0"なら、答えは必ず"0"
  • 2番目の数値が"1"なら、答えは1番目の数値と同じ

と言うこともできますね。

この特性によってIPアドレスとネットマスクのANDを計算すると、ネットワークアドレスを得ることができるのです。

図2

これをルーティングテーブルに掲載されているネットワークアドレスと比較すれば良さそうですね。ちなみに、2進数の比較は排他的論理輪(XOR)を使うと簡単です。

図3

2つの数値が同じ場合だけ、XORの結果が"0"になりますね。ですから、比較したい2進数のXORを計算し、結果が0になれば「一致⁠⁠、0以外の結果になれば「不一致」と判断できます。

ANDやXORのような論理演算は、私たち人間が息をするのと同じくらい、コンピュータにとっては基本的な動作であり、ネットマスクによって、たった1回のANDを計算するだけでIPアドレスからネットワークアドレスを取得できるよう、合理的に考えられているのですね。

ワイルドカードマスク

次に、Cisco IOSのアクセスリストなどで使われる「ワイルドカードマスク」についても考えてみましょう。例として、以下のようなアクセスリストが設定されていたとします。

  • (1行目)deny 199.32.10.64 0.0.0.7
  • (2行目)permit 199.32.10.64 0.0.0.31

ここに、送信元が「199.32.10.85」のIPパケットが到着しました。どのような処理が行われるでしょうか?

まず、アクセスリストが設定された時点で、設定されたIPアドレスとワイルドカードマスクの論理和(OR)を算出します(ここでは、この結果を「フィルターアドレス」と呼ぶことにします⁠⁠。ORの計算については、念のため、以下に示します。

図4

ANDと逆の性質を持っていますね。フィルターアドレスの算出結果は以下のとおりです。

図5

この例の場合、1行目のフィルターアドレスが「199.32.10.71⁠⁠、2行目が「199.32.10.95」となりました。

そして、比較対象となるIPパケットが到着すると、同じように各行のワイルドカードマスクとのORを算出し、さきほどのフィルターアドレスとの比較を行います。

図6

1行目のワイルドカードマスク「0.0.0.7」とIPアドレス「199.32.10.85」のORは「199.32.10.87」であり、さきほど算出した1行目のフィルターアドレスと一致しません。したがって、このパケットは1行目のアクセスリストにはヒットしません。

2行目は「199.32.10.95」でフィルターアドレスと一致するので、アクセスリストにマッチして、このパケットは"permit"(許可)されることになります。

ちょっと複雑でしたが、ご理解いただけましたでしょうか? ネットマスクと同様に、私たち人間には難しく感じますが、コンピュータが扱う2進数と論理演算に置き換えて考えると、とても合理的にできていることがわかると思います。

なお、ここで紹介した考え方は原始的なルータの動作原理を示したものであり、現在販売されている製品は、高速化・高機能化のためのさまざまな仕組みが追加されていますので、実際のCisco IOSがこのような内部処理を行っているわけではありません。

おすすめ記事

記事・ニュース一覧