Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Seccamp 2016 チューター成果報告

2,423 views

Published on

セキュキャンチューター成果報告発表資料です。

Published in: Internet
  • Be the first to comment

Seccamp 2016 チューター成果報告

  1. 1. プロトコルスタック自作で学ぶ OSのNW処理実装と 高速パケット処理 @slankdev IoTトラックチューター 2016.8 seccamp2016 1
  2. 2. 自己紹介 oすらんくでぶ (slankdev) ◦ Twitterとか: slankdev ◦ 学部 3年 ◦ サイボウズ・ラボユース 第5,6期生 ◦ 2015キャンプ修了生 oパケットの世界から一歩一歩レイヤを下げて生活 oタイヤを再発明するのがとっても得意 2016.8 seccamp2016 2
  3. 3. 2016.8 seccamp2016 3 ARPパケット ってc言語で 送れる? 大学入学時
  4. 4. 2016.8 seccamp2016 4 ARPパケット ってc言語で 送れる? パケット解析 ライブラリを C++で 大学入学時
  5. 5. 2016.8 seccamp2016 5 ARPパケット ってc言語で 送れる? パケット解析 ライブラリを C++で 大学入学時 自分でプロトコルス タック実装して オレオレネットワーク するんじゃ
  6. 6. 2016.8 seccamp2016 6 ARPパケット ってc言語で 送れる? パケット解析 ライブラリを C++で 大学入学時 自分でプロトコルス タック実装して オレオレネットワーク するんじゃ 現在
  7. 7. Agenda 1. なぜプロトコルスタック開発なのか 2. 開発物の概要 3. 開発の流れ、出来事、知見、現状 4. 今後の展望 細かく説明する時間がないので、 気になった方は直接お話を!!! 2016.8 seccamp2016 7
  8. 8. なぜプロトコルスタック o昨年度はパケット解析ツール oパケット屋さんになるはずが… oLinuxカーネルのプロトコルスタックは遅い o研究に使いたい(夢) oオレオレ物が大好き o高速化など今の僕にはいい勉強になる oサイボウズラボユース 2016.8 seccamp2016 8
  9. 9. パケット処理高速化の手法 oLRO (Large Receive Offload) ◦ デフラグメントをHW処理 oLSO (Large Segment Offload) ◦ フラグメントをHW処理 oチェックサムをOffloading 2016.8 seccamp2016 9
  10. 10. パケット処理高速化の手法 oLRO (Large Receive Offload) ◦ デフラグメントをHW処理 oLSO (Large Segment Offload) ◦ フラグメントをHW処理 oチェックサムをOffloading 2016.8 seccamp2016 10
  11. 11. Segmentation Offloadとの出会い oNICに癖があってルータ自作で死んだことがあって oreadでLROされてるけど、 owriteでLSOされないから 2016.8 seccamp2016 11
  12. 12. プロトコルスタック開発概要 o名前 stcp (slankdev’s tcp/ip) -> 名前未定 ohttp://github.com/slankdev/stcp oユーザランドで動作 o極力ゼロコピー oマルチインターフェースをサポート oIOエンジンはDPDKを使用 oC++11で開発 2016.8 seccamp2016 12
  13. 13. 開発手法 oBSD, Linuxから勉強 oC++でまとめる oDPDKを使いこなす o読書->ソース確認->実装->テスト->読書->… o開発にかける時間の9割が読書とソースリード 2016.8 seccamp2016 13
  14. 14. 情報収集の方法 oBSDの黄色い本 oBSD >>> Linux o動的解析はLinuxでSystemTap oBSD版のSystemTapみたいなの あれば教えてください 2016.8 seccamp2016 14
  15. 15. DPDK (Data Plane Development Kit) o (ほぼIntelNICのみサポート) ユーザランド高速パケットIOドライバ oカーネル処理より相当早い 2016.8 seccamp2016 15
  16. 16. STCPの設計 (理想) 2016.8 seccamp2016 16
  17. 17. STCPの設計 (現実) 2016.8 seccamp2016 17
  18. 18. パケットの管理 ombufを使用して実装 (Linuxだとskb) -> DPDKにもmbuf相当のものがあるよ! o線形リストになっている oパケットの先頭や末尾にデータを追加、消去しやすいデー タ構造 o参照数とかのカウントや受信ポート情報とかの情報も持つ 2016.8 seccamp2016 18
  19. 19. mbufとは 2016.8 seccamp2016 19
  20. 20. ただのNWプログラミングだと ouint8_t [1600]みたいなのに先頭から詰める のがよくある oでも先頭にヘッダを追加したりしたい時は? oいちいちコピーし直さないといけない!! 2016.8 seccamp2016 20 パ ケ ッ ト
  21. 21. 典型的なmbufの例 2016.8 seccamp2016 21
  22. 22. 各プロトコル間やデバイスの管理 2016.8 seccamp2016 22
  23. 23. 「C++でまとめる」..とは o伝統 -> リンクリスト o今回 -> Vector oリサイズでメモリ解放してくれなかったりもっといい手法が あるかもだけどとりあえずこれで oなるべくシンプルにすることが目標 2016.8 seccamp2016 23
  24. 24. ゼロコピーを実現 o各プロトコルモジュール間のデータ移動は線形リスト oパケット管理は DPDKがある程度束縛するのでSTLと相性悪い 2016.8 seccamp2016 24 私 DPDK C++11
  25. 25. 現状 oARP処理部分まで o現状では完全ゼロコピー oDPDKのチューニングとかで パフォーマンスは変わりそう o現在はDPDKのラップとか設 計ばかり 2016.8 seccamp2016 25
  26. 26. 今後の展望 o組み替えたりチューニングしやすいように oAPIの提供 oデータプレーンを変えられる -> 別HW…? 2016.8 seccamp2016 26
  27. 27. 感想 oさらに知りたいことがたくさん見つかる o昔は(使いやすい?)車輪を。今度は早くする工夫を oパケット処理の高速化はたくさん方法がある ◦ 処理を早くする ◦ オフローディング ◦ メモリアクセスを賢く ◦ etc.. oどんどんレイヤが下がる一方 2016.8 seccamp2016 27
  28. 28. 2016.8 seccamp2016 28 aabb ccdd eeff 0011 2233 4455 0800 4500 2800 0001 0000 4006 b9a2 c0a8 b302 c0a8 6501 3039 3039 0000 0000 0000 0000 5001 2000 961c 0000 ありがとうございました サイボウズ・ラボユース

×