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

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

久しぶりに社内勉強会:仮想IPホストを自作

»

先週末、久しぶりに社内勉強会を開催してみました。お題は「リンクレイヤープログラミング勉強会:仮想IPホストを自作してみよう」という感じです。

私の会社では「パケットオタク」と呼ばれる(?)ネットワークパケットを扱うのが好きなメンバーがいて、私自身もパケットをいじくるプログラムを作ることで、製品や特注品を開発してきました。馴染みがあるものとして、Wiresharkなどのパケットキャプチャはまさにパケットを扱うプログラムです。Linuxではパケットを扱うにはPF_PACKET(AF_PACKET)を使いこなすという感じです。ProDHCPIntraGuardianシリーズEthdelayシリーズEthCaptureシリーズなど、自社製品でもたくさん使っていますし、回線事業者向けの特注品などもこの技術でいろいろなものを作りました。

普通のネットワークプログラミングではソケットライブラリを使い、TCPやUDPはもちろん、IPやイーサフレームに関しては全てカーネルにお任せです。おかげで簡単に相互接続性が高い基準に準拠したシステムが構築できるわけですが、IPやUDP、TCPの仕組みを理解しなくても使えてしまうのは、きちんと理解してシステムを構築する面ではマイナスでもあります。書籍などで勉強するのも良いのですが、やはり自分で作って動かしてみることがなによりも良い勉強になります。

以前、「ルーター自作でわかるパケットの流れ」という本を書きました。PF_PACKETでパケットを仲介しながら、ブリッジやルーターを自作してみてネットワークを理解してみるという感じの本で、実際にこの本で使った技術は製品開発などにも使っていますので、勉強だけでなく実務にも使えるないようだと考えて書いたのですが、読者の方からは「なにもルーターじゃなくて、もう少しシンプルな例の方がわかりやすいのでは?」という意見もいただき、早速社内の勉強会でも、「仮想IPホストを作る」という、実用にはあまり応用しにくいかもしれませんが、より身近でシンプルなプログラミング例で説明をしてみました。

・IPアドレスを持つというのはどういうこと?
・どんな機能があればIPホストと言えるの?

意外と答えられない人が多いのではないでしょうか。とりあえず、勉強会1回目でこの回答ができるところまでは進み、この後UDP、TCPを自作する感じで進めます。

実は先日、

「セキュリティ・キャンプ全国大会2017」:https://www.ipa.go.jp/jinzai/camp/2017/zenkoku2017.html

これの講師を担当してもらえないかとお声がけいただき、そこでも「仮想IPホストを作ってみる」感じで実習することになりました。それがどうセキュリティに繋がるのか?と疑問かもしれませんが、通信プロトコルの基本を理解せずに通信のセキュリティは考えられません。作って体験してみるのが大事ということです。

私自身はプログラミングもネットワークもほとんどまともに教わったことがなく、いろいろネットワークプログラミングで作ったものの数は負けないけれど、「基礎はないけど、それでも良いの?」と確認したところ、「基礎がなくても作れる力があり、そういう手法を教えられる講師も必要」と、禅問答のような回答をいただき、「ではやってみましょう!」となりました。もし興味がある若者(若者だけが対象なので・・・)がいるようでしたら、ぜひ参加してみてください!

Comment(0)