Rustで作るTCP

>100 Views

May 16, 26

スライド概要

RustでTCPを実装しました。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Rustで作るTCP Eucalyptus_0403 Okayama Revengers LT大会 #3 1

2.

自己紹介 ➢岡山大学工学部工学科情報・電気・数理 データサイエンス系ネットワーク工学コー ス4年医用情報ネットワーク学研究室所属 ➢岡山大学大学院ヘルスシステム統合科学研 究科医用機器医用材料部門医用情報ネット ワーク学分野進学予定 ➢okarev LT大会 2回目(前回#2参加) Okayama Revengers LT大会 #3 Eucalyptus_0403 2

3.

TCPとは ➢Transmission Control Protocol の略 • RFC793で規定(改訂版:RFC9293) • 高速通信 < 安全・信頼性 • 高速さを優先: UDP(User Datagram Protocol) ➢宅配便で例えると… All rights reserved. • ヤマト運輸(ちょい遅いけど丁寧に届けるよ)→ TCP • Amazon(たまに荷物投げてまうかも (m´・ω・`)m)→ UDP ヤマトも荷物投げることあるみたい? Okayama Revengers LT大会 #3 Eucalyptus_0403 3

4.

Rustで実装しよう ➢Rustとは • Mozillaが支援し2006年に開発スタート • C, C++ に代わる言語 • 処理速度・並行処理・安全性 Okayama Revengers LT大会 #3 Eucalyptus_0403 4

5.

実験環境 ➢仮想的に以下のネットワークを構築 • Ubuntu 24.04 LTS host1-veth1 host2-veth1 router RTXはいいゾ! .1 .254 .254 10.0.0.0/24 Okayama Revengers LT大会 #3 .1 10.0.1.0/24 Eucalyptus_0403 5

6.

簡易実装で通信開始 ➢線鮫で小包を捕獲(hoet1 → host2) Bogus TCP header length Okayama Revengers LT大会 #3 Eucalyptus_0403 6

7.

tcpdumpで見てみる ➢なんかおかしい • TCPヘッダ長がおかしい • 簡易的な実装にしているため ➢より本格的な実装へ • three-way handshaking • Retransmission Okayama Revengers LT大会 #3 Eucalyptus_0403 7

8.

TCPの完成 ➢three-way handshaking • TCPコネクションの確立 Okayama Revengers LT大会 #3 Eucalyptus_0403 9

9.

実際に情報を送ってみる ➢Server Okayama Revengers LT大会 #3 ➢Client Eucalyptus_0403 11

10.

今回の実装に関して ➢RSTセグメントを破棄 • 自作TCPが流すSYNセグメントがOSのTCPと競合 ➢チェックサムオフロードの無効化 • エラー検出などに透明性をもたせるため ➢IPv4のみ対応 ➢輻輳制御,フロー制御,セキュリティの考慮は無し Okayama Revengers LT大会 #3 Eucalyptus_0403 12

11.

ぎてゅbにあるよ ➢https://github.com/teru01/toytcp ➢そのへんに転がってるUbuntuでできる ➢Rustで始めるTCP自作入門 • 著:小野輝也 ➢動かすだけなら簡単 • Rustのインストール • git clone → Okayama Revengers LT大会 #3 cargo build Eucalyptus_0403 13