2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

レバウェル開発部Advent Calendar 2024

Day 23

「体験しながら学ぶ ネットワーク技術入門」を読んで学んだこと

Last updated at Posted at 2024-12-22

はじめに

レバウェル開発部アドベントカレンダー23日目になります。

普段、私たちがインターネットを利用する際には、ネットワーク技術の仕組みが背後で動いています。しかし、その仕組みを意識する機会はあまり多くありません。

私自身、資格試験の勉強を通じてネットワークに関する基本的な知識は得ていましたが、それが実際どのように動作しているのか、具体的なイメージをつかむ機会はありませんでした。また、普段の業務ではネットワーク関連に触れることが少なく、学んだ知識を活かす場面も限られていました。

今回は、「体験しながら学ぶ ネットワーク技術入門」を読んで学んだことをご紹介したいと思います。

9784815618599-2-468x596.jpg

「体験しながら学ぶ ネットワーク技術入門」

本書の構成

第1章「検証環境を構築しよう」
第2章「レイヤー2プロトコルを知ろう」
第3章「レイヤー3プロトコルを知ろう」
第4章「レイヤー4プロトコルを知ろう」
第5章「レイヤー7プロトコルを知ろう」
第6章「総仕上げ」

検証環境を構築するのに必要なツールはWSL(WindowsOSの場合)、docker、tinetです。
セットアップ用のスクリプトや各章のtinet設定ファイルが用意されているため、簡単に環境構築ができます。

※↓検証環境を可視化した図
spec_01.png

名称
rt ルーター
sv サーバー
lb ロードバランサー
sw スイッチ
fw ファイアウォール
ns ネームサーバー
cl クライアント

本記事では、一例として、第4章「レイヤー4プロトコルを知ろう」にある、TCPセグメントをキャプチャして中身を見る方法をご紹介します。

TCPセグメントをキャプチャしてみよう

cl1 から ns1 にあるファイル(/var/tmp/10KB)をダウンロードして、そのパケットを ns1 でキャプチャします。

コマンドを実行する

ns1 をTCPサーバーにして、TCPセグメントを待ち受けます。
ns1 にログインして、以下のncコマンドを実行します。宛先ポート番号が 60000 番のTCPセグメントを待ち受けます。

root@ns1:/var/tmp# nc -l 60000 < /var/tmp/10KB

別タブでssコマンドを実行します。ncコマンドのプロセスが 60000 番でパケットを待ち受けていることが確認できます。

root@ns1:/# ss -nltp
State          Recv-Q         Send-Q                 Local Address:Port                    Peer Address:Port         Process
LISTEN         0              1                            0.0.0.0:60000                        0.0.0.0:*             users:(("nc",pid=127,fd=3))
LISTEN         0              256                          0.0.0.0:53                           0.0.0.0:*             users:(("unbound",pid=108,fd=4))
LISTEN         0              256                        127.0.0.1:8953                         0.0.0.0:*             users:(("unbound",pid=108,fd=5))

同じく ns1 でtcpdumpコマンドを実行します。インターフェースが net0 であり、宛先ポート番号(or 送信元ポート番号)が 60000 番であるTCPセグメントをキャプチャし、 tcp.pcapng というファイル名で書き出します。

root@ns1:/# tcpdump -i net0 -w /tmp/tinet/tcp.pcapng tcp port 60000
tcpdump: listening on net0, link-type EN10MB (Ethernet), capture size 262144 bytes

cl1 で ns1 のファイルをダウンロードします。cl1 にログインして、ncコマンドを実行します。
ns1(10.1.2.53) のポート 60000 番に接続します。接続完了後、ncコマンドを終了します。

root@cl1:/var/tmp# nc -v 10.1.2.53 60000 > /dev/null
Connection to 10.1.2.53 60000 port [tcp/*] succeeded!

Wiresharkでパケットの中身を確認

WiresharkはGUIでパケットをキャプチャしたり、キャプチャしたパケットをフィルターしたり解析することができるツールです。
画像のように、パケットやその中身を見ることができます。

スクリーンショット 2024-12-19 050627.png

黄枠で囲まれた部分

最初のパケットの内容です。
TCPヘッダーが送信元ポート番号や宛先ポート番号など様々なフィールドで構成されていることが分かります。

青枠で囲まれた部分

接続開始フェーズです。SYN → SYN/ACK → ACK の3ウェイハンドシェイクから始まります。
画像のinfo列でフラグが確認できます。

赤枠で囲まれた部分

接続確立フェーズです。3ウェイハンドシェイクが終わると、アプリケーションデータのやり取りを行います。
画像のTCP Segment Len列でTCPペイロードの長さを確認すると、10KBのアプリケーションデータを14481バイトずつに分割しており、それを送信していることが分かります。

緑枠で囲まれた部分

接続終了フェーズです。cl1 でncコマンドを終了した際に、FIN/ACKパケットを送信します。
3ウェイハンドシェイクで接続終了処理を行っていることが確認できました。

おわりに

本記事では、ネットワーク環境に関する基本的な操作を取り上げました。実際に自分でネットワーク環境を構築するのは大変な作業ですが、PC一つで仮想ネットワーク環境を構築できる点が非常に便利だと感じました。

記事内には掲載できなかったものの、書籍内の図や表は非常に分かりやすく、実行したコマンドがどのように動作しているのか理解しやすい内容でした。また、ネットワーク構築の実践的な雰囲気を感じられる点も良かったです。

さらに、ネットワーク関連のコマンドには、これまであまり目にしたことのないものが多く、もっと深く学びたいという意欲が湧きました。これを機に、ネットワークの知識をさらに広げていきたいと思います。

  1. 1448バイト* = 1500バイト(MTU) - 20バイト(IPヘッダー) - 20バイト(TCPヘッダー) - 12バイト(タイムスタンプ)

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?