第1回 KLab Expert Campに行ってきました(TCP/IPプロトコルスタック自作インターン)
2019年8月26日から2019年8月29日の4日間、KLab社の技術系インターンシップKLab Expert Campに参加してきました。
やっていき#KLabExpertCamp#プロトコルスタック自作 pic.twitter.com/asBN50oUeI
— いの (@iciclize) August 26, 2019
今後テーマが変わるのかは不明ですが、第一回目のテーマはTCP/IPプロトコルスタック自作でした。
参加のきっかけ
これは2019年春頃の話です。
ルーター自作本の写経を終えて、春学期が始まり、夏休みはTCP/IP自作本を写経しようと考えていたときのことでした。
あるとき、ルーター自作本を写経していた頃のツイートに、KLab社の山本さんからいいねをもらいました。(エゴサーチされたのでしょう)
早くルーター実装しないとプロトコルスタックの実装までありつけないぞオイ
— いの (@iciclize) September 11, 2018
多分そこで初めて山本さんを知って、山本さんのツイートからKLab Expert Camp開催のことを知りました。
夏休みにやろうと思っていたことにドンピシャだったのでこれは応募せねばと思い、エントリーシートを提出しました。
インターンの内 容
Expert Campには、用意された教材に沿って進む講義形式の基本コースと、発展的な課題を自分で進める発展コースがあり、コースはエントリー時に選びます。
参加人数は全部で12人くらいで、低レイヤーの人間が多めで、学部4年と修士1年の割合が高い印象でした。
基本コースには、詳しくなりたい人、教育用ボードにプロトコルスタックを積みたい人、自作OSにプロトコルスタックを積みたい人などが参加していました。
発展コースの参加者は4人で、全員キャンパーです。強い。
僕は基本コースです。
講義の内容は、プロトコルスタックとはという話から始まり、メモリアライメントやバイトオーダーといったネットワークプログラミングの基礎や、デバイスからEthernetフレームを取得する方法などを学んだ後、山本さんの開発するプロトコルスタックの教材 microps を下のレイヤーから紐解いていきます。途中に小さな演習を挟んで手を動かしたりもします。
初日と最終日は懇親会があって、Pizza, Sushi, Sakeなど囲みながら他の参加者や講師・チューターの方とワイワイお話できました。
個人的な体験談
直前に取り組んだこと
TCP/IP自作本を写経してからExpert Campに臨みました。
そのコードと似通った部分を microps の所々に見つけることができて理解の助けになりました。
Expert Camp中に取り組んでいたこと
実は僕には前々から野望があって、それは「HTTP上の画像を書き換える悪いルーターの作成」でした。
これをするには、TCPのseq番号・ack番号を書き換える必要があって、TCP/IPの実装を理解するまでは難しいと思い保留にしていたので すが、せっかくのExpert Campなのでここで一気に悪いルーターを完成させて披露しようと思いました。
Expert Camp中、演習で手を動かすだけでなくフルで写経する人も居た中で、僕は悪いルーターの設計のことを考えていました。
しかしこの悪いルーターは、最後まで粘ったのに全く完成しませんでした。(は?)
まとめの発表
最終日に4日間のまとめを発表する時間がありました。
基本コースではみんな基本同じことをしていますが、みなさんそれぞれ見事なまとめ、あるいはそれと追加でやってみたことを発表していました。
一方僕はというと悪いルーターは完成せず、しかも最後まで粘ってしまったので、ほとんどすっからかんのスライドで、内容もガバガバな発表をしてしまいました…(あ ほ く さ)
後日
悔しかったので、俺のKLab Expert Campは悪いルーターを完成させるまで終わらねえという気持ちで、10日間以上に渡り開発を続け(長すぎ)とうとう悪いルーターを完成させましたが、この話はまたの機会に。
感想
実はこれまでネットワークや低レイヤーの猛者に出会ったことがなく、そういう人たちに実際に出会って刺激を受けることができて楽しかったです。
ネットワークプログラミングの基礎から教わることができたので、写経するときになあなあに済ませていたことを身につけることができたと思います。(スレッドプログラミングとかも)
今後、ネットワーク機能のないマイコンに自分でプロトコルスタック積めたら面白そうだなと思いました。
一つ教訓として得たのは、どんなに進捗ダメでも発表はきちんとしようということですね(戒め)
おまけ
素敵な修了証をいただきました!
あとネームカード絶対に捨てないでって言われました(笑)
ほかの記事
- デフォルトゲートウェイには、同一セグメント内の/直接接続された/リンク上の ホストのIPアドレスを設定します。そのIPアドレスからそのホストのMACアドレスを調べられることが条件です。
- ふと、Let's Encryptじゃない認証局の証明書でhttps通信したいなと思ったので、Buypassという認証局を試してみました。でも珍しい証明書を使うということはつまり・・・
- ニコニコ動画の埋め込みにscriptを使うとうまくいかない場合は、それが埋め込もうとするiframeを直接埋め込んで使うといいよという話。
- Raspberry Piで、HTTP上を流れる画像をすり替える悪いルーターを作りました。ルーター自作本をベースに、ルーティングテーブル、NAPTを実装してから、画像のすり替えを実装しました。丸10日かかりました…
- UbuntuのインストールUSBを作成し、父のお古のVistaマシンのHDDにUbuntu 16.04をインストール。マシンの起動時にGRUB2の画面で、起動するOSをWindows VistaかUbuntuかで選べるようになった。
- 現代アート先輩の配色は、顔 : #A1736B, 服: #3E343F, ブラインド: #979F9B, 壁: #C9BFB6です。