リンクレイヤーを理解するとネットワークが良くわかる!
一般的な通信プログラムはTCPやUDPを使って通信するようなプログラムを作ります。もっとも、WEBシステムも通信プログラムと考えると、TCPを直接扱うことすら少なく、通信部分はアプリケーションサーバやミドルウェアが何とかしてくれることも多いでしょう。
当社が得意としている技術の一つが、リンクレイヤーでパケットを扱うプログラムの開発です。リンクレイヤーとは、データリンク層とも呼ばれ、OSIの7階層でいう所の、2層目で、LAN媒体に接続された2ノード間でのデータ転送のためのプロトコルです。EthernetやPPPが相当します。その上にIPやARPが存在し、さらに上にTCPやUDPがあります。
製品で考えると、
・不正接続検知/排除システム:IntraGuardian2、IntraGuardian2 EX
・回線遅延シミュレータ:Ethdelay、EthdelayEx、EthdelayPro
・コンパクトパケットキャプチャ:Ethcapture
・メール宛先制御システム:BridgeFilter
・大規模向けDHCPサーバ:ProDHCP
・キャリアグレードDHCPv6サーバ:ProDHCPv6
なんと、ほとんどの製品がリンクレイヤーでパケットを扱っています。
さらに、特注品の開発でも、
・特殊ブリッジ
・特殊ルーター
・特殊無線傍受システム
など、数々の開発を行ってきました。
なぜか、プログラマーはDBやUIは得意でも、ネットワークは苦手という人が多く、TCPやUDPのプログラミングでも手を出したくない人が多いようですが、リンクレイヤーとなるとますますできる人が少ないようです。しかし、リンクレイヤーを理解しているとメリットが多いのです。
・ネットワークシステム障害の切り分けができる
パケットキャプチャは基本的にリンクレイヤーでキャプチャしますので、そこから理解できているとほとんどのことを理解できる。
・ネットワーク構成の問題も理解できる
ネットワークを構成するスイッチングHUBやルーターなどの役割を理解でき、ネットワークの仕組みがわかる。
・リンクレイヤーならほとんどの要求に対応できる
リンクレイヤーから扱えるということは、ソフトウエアでできることが全てできるということになります。普通のTCPやUDPでは対応ができないような仕組みも作り出すことができます。あまり大きな声では言えませんが、他人の通信を妨害したり、LANをダウンさせたりすることもできてしまいます。悪用はいけません。。
そんなわけで、私としてはネットワークに興味が少しでもあるプログラマーには、是非ともリンクレイヤーの技術を身につけて欲しいと思っています!
リンクレイヤーのプログラミングが一番やりやすいのはLinuxです。BSDはもう少し面倒で、Solarisはとても面倒です。Windowsだと素の状態ではリンクレイヤーでパケットを送出できません。幸いなことにLinuxはとても普及しているので、環境面ではそれほど困らないでしょう。
あとはとにかくやってみればいいのですが・・・とりあえず自分が関与した書籍を紹介しておきます。。
メンバーの種田君との共著です。前著「C for Linux 2」の改訂版みたいな感じです。分厚い本ですが、サンプルソースもたくさん出ていて、まずは動かしてみると理解できるものです!
まだAmazonに登場していませんが、まもなく発売になる著書です。ブリッジやルーターを自作することにより、パケットの流れを理解しよう、という感じの内容です。
Amazonにも登場しました!
なんとなく著書の宣伝みたいになってしまいましたが、リンクレイヤーで遊べるようになると、ネットワークがとてもよく理解できます。是非チャレンジしてみてください!