概要
tinet を使って簡単に、Web server / DNS / Client ができた!
参考文献
体験しながら学ぶネットワーク技術入門 みやたひろし著
更新履歴
1章 2024年3月29日
2章 2024年12月28日
詳細
1 検証環境 WSL2, Docker
1-2-3. WSL2
- WSLをインストール
-
タスクマネージャ>仮想化
有効
よし! -
Powershell > WSLのバージョン
2
よし!
1-2-3 セットアップスクリプト実行
- 本のURLからtinetをダウンロード
- setup.shをubuntuで実行
1-3-3 tinetの使い方
- tinet up イメージのDL、 コンテナ起動
- tinet conf IPアドレスの設定、サービスの起動
-
tinet test テストコマンド pingを打つ等
こんなイメージでtinetがコンテナを建てて、設定とテストをしてくれる。
ネットワーク構成図の生成
1-4-3 動作確認
-
client 1から sv1 に curl http get
ポンチ絵にするとこんな感じ
2 レイヤー2
2-1 イーサーネット
|宛先MAC||送信元MAC|
|タイプ IPv4なら-x0800 ||ペイロード|
MACアドレスの1byte目の下位2bitが、ユニキャスト・ブロードキャスト、ユニバーサル・ローカルアドレスの識別
xx :xx :xx : yy :yy :yy
|ベンダを識別| ID |
2-2 ARP(Address Resolution Protocol)
|Hardware type = 0x0001 ether | Protocol type = 0x0800 IPv4 |
|Hardware size = MAC 6 byte| Protorlsize = IIPアドレス 4byyte| Opcode|
|Sencer Mac Address|
|Sender IP address |
|Target Mac Address|
|Target IP Address |
-[x] ARPテーブルをクリア ip enigh flush all
-[x] cl3 ⇒ rt1にpinng。ARPテーブルにcl3のIPアドレスとMACアドレスを登録
2-3 L2スイッチ OVS(Open vSwitch)
-L2スイッチの物理ポートと接続している対向のクライアントのMACアドレスを紐づける。
-[x] sw1のMACアドレステーブルを見る ovs-appctl
2-3-2 VLAN (OVSでポートVLAN・タグVLAN)
3章 レイヤー3
- BBルーター WANポートとLANポートがあり、ルーチング・DHCP・NAT機能がある。
- IPヘッダ
|バージョン IPv4(0100)|ヘッダ長| ToS(DSCP+ECN 優先と輻輳制御)|パケット長|
|識別子(フラグメント用)|フラグ(フラグメント可否等)|フラグメントオフセット|
|TTL|プロトコル番号|ヘッダーチェックサム|
|送信元IP|
|宛先IP|
|タイプ: 8=Echo requst|コード: 0=Echo request |
pingを打って、IPとICMPのフォーマットを確認
[x] tinet down, tinet up, tinet conf
[x] Cl2でtcpdumpスタート
[x] Cl1からCl2にpingを打つ
3-2 静的・動的ルーティング
vtyshでOSPFをなんとなく設定したらできた。動的ルーティングが設定できた。OSPFは別途勉強せねば。
3-3 NAT
3-4 NAPT
- iptablesを-j MASQUERADEに設定したらできた。
レイヤー4
ncコマンド UDP/TCPの送受信ができる。
4-1 UDP
-ncコマンド UDP/TCPの待ち受けポートを指定したり、送信したり
-ssコマンド 待ち受け中のポートが見れる。
実践UDP
4-2 TCP
|送信元ポート|宛先ポート|
|シーケンス番号:最初はランダム値、次回は送信したアプリデータのバイト数分増やす|
|ACK番号:データ受取り時にシーケンス番号+データのバイト数をレスポンス|
|データオフセット:ヘッダ長|予約領域|コントロールビット:途中のルータで輻輳を検知するとECN-Echoビットを立ててレスポンス。送信側はそれを見てCongestion Window Reducedビットを立てる?、ACK, SYN, FIN等|ウィンドウサイズ:受信側で受け取れるデータサイズ|
|チェックサム|緊急ポインタ|
|オプション:Maximum Segment Size, Selective ACK(受信できなったデータの後に受信したデータの分のACKを返す)|
- 状態遷移
実践TCP
- サーバ側(ns1)でncコマンド(TCP待ち受けの設定)
- ss -nltpコマンドで確認したがポートが開いてなさそう
- うまくいかなかったので、wsl --shutdown, tinet up/confからやり直したらできた。
TCPの3ハンドシェーク後に、ペイロードが送られている様子がパケットを見てわかった。
送るペイロードサイズ分シーケンス番号が増える。
データ受け取ったら、受信した分ACK番号増やしてACKする。