迫真の氷結晶

初投稿です。

  • HOME
  • 自己紹介
  • 作品集
  • ポエム系

第1回 KLab Expert Campに行ってきました(TCP/IPプロトコルスタック自作インターン)

2019-10-10

2019年8月26日から2019年8月29日の4日間、KLab社の技術系インターンシップKLab Expert Campに参加してきました。

今後テーマが変わるのかは不明ですが、第一回目のテーマはTCP/IPプロトコルスタック自作でした。

参加のきっかけ

これは2019年春頃の話です。

ルーター自作本の写経を終えて、春学期が始まり、夏休みはTCP/IP自作本を写経しようと考えていたときのことでした。

あるとき、ルーター自作本を写経していた頃のツイートに、KLab社の山本さんからいいねをもらいました。(エゴサーチされたのでしょう)

多分そこで初めて山本さんを知って、山本さんのツイートから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日間以上に渡り開発を続け(長すぎ)とうとう悪いルーターを完成させましたが、この話はまたの機会に。

感想

実はこれまでネットワークや低レイヤーの猛者に出会ったことがなく、そういう人たちに実際に出会って刺激を受けることができて楽しかったです。

ネットワークプログラミングの基礎から教わることができたので、写経するときになあなあに済ませていたことを身につけることができたと思います。(スレッドプログラミングとかも)

今後、ネットワーク機能のないマイコンに自分でプロトコルスタック積めたら面白そうだなと思いました。

一つ教訓として得たのは、どんなに進捗ダメでも発表はきちんとしようということですね(戒め)

おまけ

素敵な修了証をいただきました!

あとネームカード絶対に捨てないでって言われました(笑)

修了証/certificate

  • #技術系
  • #ネットワーク