オルタナティブ・ブログ > プログラマー社長のブログ >

プログラミングでメシが食えるか!?

ルーターだけでなくブリッジも作成

»

ルーターの自作に関する記事を書いてから、少々間が空きましたが、常に手元のWindows機の方を自作ルーター経由で使い続け、安定稼働の確認などをしていました。

いくつか評価いただいた方から要望をいただきましたので、今日はそれらを実装していたのですが、そのうちの一つが、ブリッジでも使いたい、というものでしたので、ルーターとブリッジの違いでも書いてみようと思います。

ルーターは異なるネットワークセグメントを接続するためのもので、例えば2つのセグメントを中継するためには、2つの異なるネットワークセグメントに属しているIPアドレスをもつことになります。ルーターは自分が知らないセグメント宛の場合にはさらに他のルーターに中継を依頼して、ルーターが連携することにより、インターネットでは世界中が接続されています。

一方、ブリッジは同一ネットワークセグメントを接続するだけですので、HUBと同じようなものです。厳密には、リピーターHUBとブリッジは別のもので、スイッチングHUBと同じようなものです。

言葉の定義はGoogle先生に聞いていただくとして、プログラムとしてはどのように違うのかを簡単に紹介しましょう。

ルーターの場合は、クライアントが中継して欲しいパケットをルーターのMACアドレス宛に送信してきます。受信したパケットのMACアドレスが自分宛で、宛先IPアドレスが自分宛でない場合に、もう片側のネットワークインターフェースから送信しますが、その際に送信元のMACアドレスを送信インターフェースのMACアドレスにします。そうすることによって次のルーターあるいは宛先から応答パケットをもらうことができ、それをまたクライアントに戻すことができるようになります。また、中継が無限に起きないように、TTLをカウントダウンしたりチェックしたりもします。

ブリッジの場合は、パケットは自分宛に来ません。そもそもネットワークインターフェースにIPアドレスを持っていないことも多いのです。ブリッジはネットワークインターフェースをプロミスキャスモードにして、自分宛以外のパケットを傍受しながら、もう片方のインターフェースからそのまま送信します。単にパケットの中継をするだけです。パケットの書き換えは行いません。スイッチングHUBなどではMACアドレスをチェックすることで、ポートの振り分けを行います。

単にパケットの中継するだけなら、ブリッジは何のために使うのか?と思うかも知れませんが、例えば2拠点で同一セグメントでネットワークを使いたい場合、インターネットを使ってパケットを行き来させることで接続できるようになり、さらに暗号化を行えば、VPNとなるわけです。

ネットワークセグメントを分けるかどうかの判断基準としては、分けない方が直接やりとりできる反面、台数が増えるとブロードキャストが飛び交って遅くなったり、障害発生時の影響範囲が大きくなるなどの問題もあります。基本的には256台を越えるような台数を接続する場合にはセグメントを分けた方が安心です。

ということで、ブリッジとして作成したプログラムをルーターにするのは、追加すべき機能が多いので結構大変ですが、ルーターとして作ったものをブリッジにするのは余計な処理を省くくらいで、簡単にできます。もっとも、今回作っているプログラムは単なるルーター・ブリッジではないので、それほど単純ではありませんが。

ネットワークの理解のためにも、ルーター・ブリッジ、是非自作してみましょう!

※本当はこのところアクセス数がとても多い、「フレッツスポットはiPhone,iPod,iPadで使えない?」の続きを書こうと思ったのですが、まだ接続実験ができていないので、また今度。。

Comment(2)

コメント

私が担当した某製品は最初ブリッジとして作って、引き継いだメンバーがあとからルータ機能をつけてくれたとき、相当苦労していました。
やはりルータのほうが難しいです。

が、ブリッジもスイッチ機能とかつけると難しいのですがね。
そう考えると Linux の br なかなか高性能な気がします。

まあ、ひと言で言えば自分で送信先を考えるかどうかの違いくらいだけどね。
スイッチ機能は、下手に作るとかえって遅くなるかもね。。

コメントを投稿する