2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

体験しながら学ぶネットワーク技術入門 をやってみた

Last updated at Posted at 2024-03-28

概要

tinet を使って簡単に、Web server / DNS / Client ができた!
image.png

参考文献

体験しながら学ぶネットワーク技術入門 みやたひろし著

更新履歴

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がコンテナを建てて、設定とテストをしてくれる。
    image.png

ネットワーク構成図の生成

  • graphvizの apt install
  • tinet img ネットワーク
    image.png
    ポンチ絵にするとこんな感じ

1-4-3 動作確認

  • client 1から sv1 に curl http get
    ポンチ絵にするとこんな感じ

image.png

2 レイヤー2

2-1 イーサーネット

image.png

|宛先MAC||送信元MAC|
|タイプ IPv4なら-x0800 ||ペイロード|

MACアドレスの1byte目の下位2bitが、ユニキャスト・ブロードキャスト、ユニバーサル・ローカルアドレスの識別

 xx :xx :xx : yy :yy :yy
|ベンダを識別| ID        |
  • tinet down 01.yaml
  • tinet up 02.yaml
  • pingをキャプチャする
  • etherの構成とMACアドレスの構成を確認する
    image.png

2-2 ARP(Address Resolution Protocol)

フォーマット
image.png

|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アドレスを登録
image.png

2-3 L2スイッチ OVS(Open vSwitch)

-L2スイッチの物理ポートと接続している対向のクライアントのMACアドレスを紐づける。
-[x] sw1のMACアドレステーブルを見る ovs-appctl
image.png

2-3-2 VLAN (OVSでポートVLAN・タグVLAN)

  • ポートVLAN 1台のL2SWを分ける。物理ポート毎に異なるVLAN ID
  • タグVLAN 1つの物理ポートで複数のVLANを識別
  • OVSにポートVLANとタグVLANを設定し、pingの疎通を確認
    image.png

3章 レイヤー3

  • BBルーター WANポートとLANポートがあり、ルーチング・DHCP・NAT機能がある。
  • IPヘッダ
|バージョン IPv4(0100)|ヘッダ長| ToS(DSCP+ECN 優先と輻輳制御)|パケット長|
|識別子(フラグメント用)|フラグ(フラグメント可否等)|フラグメントオフセット|
|TTL|プロトコル番号|ヘッダーチェックサム|
|送信元IP|
|宛先IP|
  • ICMPのパケットフォーマット
    image.png
|タイプ: 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は別途勉強せねば。
image.png

3-3 NAT

  • 静的NAT iptableを使い静的NATのを設定。
    image.png

3-4 NAPT

  • iptablesを-j MASQUERADEに設定したらできた。

レイヤー4

ncコマンド UDP/TCPの送受信ができる。

4-1 UDP

-ncコマンド UDP/TCPの待ち受けポートを指定したり、送信したり
-ssコマンド 待ち受け中のポートが見れる。

実践UDP

cl1 から ns1に UDPで Helloを送る。
image.png

4-2 TCP

  • TCPのフォーマット
    image.png
|送信元ポート|宛先ポート|
|シーケンス番号:最初はランダム値、次回は送信したアプリデータのバイト数分増やす|
|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ハンドシェーク後に、ペイロードが送られている様子がパケットを見てわかった。
image.png
送るペイロードサイズ分シーケンス番号が増える。
データ受け取ったら、受信した分ACK番号増やしてACKする。
image.png

実践UDPファイアウォール

destination アドレスを間違えて、DROPしたりしてしまったが何とか出来た。
image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?