KLab Expert Campに参加したよ。

というワケでKLab株式会社さんでKLab Expert Campという4日間のインターン(ワークショップ?)に参加してきました。というワケとは。

事の発端は部活の先輩が僕とKLabさんを繋げてくださって。
そんなこんなで気付いたら参加していました。

KLab Expert Campとぼく

今回は第一回ということで、「自作TCP/IPプロトコルスタックを作ろうや」みたいな内容でした。
僕自身はWeb技術ばっかり触っているヲタクだったのですが、低レイヤ自体には前々から興味は持っていました。
参加が決まってからC言語に入門したり、ソケットプログラミングしたり、Linuxの色んな概念に触れたりしていました。
事前にある程度勉強してきたとはいえ、こんな人間を参加させてくださってマジでありがたい。

Day 1

13時過ぎに集合だったので遅めの早起き(は?)をしてクソ田舎兵庫からおのぼりさんをしました。
これまでにも東京自体は何度か行ったことはあったんですが、六本木に行くのは初めてでした。
とりあえず森タワーデカすぎて10分ぐらい建物の中で迷子になった後、無事に洗礼を受けてオフィスまで到達することができました。
この日はネットワークプログラミングをする上でのC言語の基礎とか、TCPUDPのエコーサーバ/クライアントを作るみたいな内容だったと思います。
Twitter上で見たことがある人も何人か観測して、本当に存在しているのだなと思いましたね。 そして寿司🍣。

Day 2

起床成功。
この日はパケットソケットとかBPF、TUN/TAPのお話でした。
普段アプリケーション層しか扱わない人間にとってはいきなりリンク層まで下がったのでビビリ散らしましたがバイト列が流れるのを見てニヤニヤできたので楽しかったです。
LinuxBSD系で結構実装方法が変わるのも面白かった。
あと仮想インタフェースを生やしたりできるのも初めて知った。
その後も色々した気がしますが記憶を失ってしまいました。

Day 3

起床成功。
この日はメンターの山本雅也(@pandax381)さんが書いた小さなTCP/IPプロトコルスタックmicropsARP -> IP -> ICMP -> UDP -> TCPと読み進めていく講義でした。
講義についていくのに必死でしたが、読みやすいソースコードだったのとビジュアル的に理解しやすい構成になっていたので、TCP/IPプロトコルスタックの実装方法をおおよそ理解しました(ほんまか?)。

Day 4

起床成功。
この日は最終日ということで、少しの講義と成果発表、そして懇親会でした。
講義はオレオレソケットAPIを作ろうみたいな内容でした。
そして成果発表ですが、何も発表できるものが無かったので簡易的なパケットアナライザみたいなものを作って発表しました。
SSHのパケットを弾いていなかったので死ぬほどSSHのパケットをアナライズしていました。
懇親会の寿司🍣は相変わらず美味しかった。

これからどうするか

もっとmicropsを熟読してTCP/IPプロトコルスタックを一から実装できるレベルを目指そうと思いました。
あとは他の発表者の内容を聞いていると、RFCに準拠していない機能が存在していたりして、そういうのも面白そうなのであえて準拠していない部分を作り込んだプロトコルスタックとかできたらいいなーと思った次第でございます。