👻

Day 23: ネットワークの概念や基本プロトコルの理解 - ネットワークの知識

2024/11/21に公開

はじめに

今回は、これまで触れる機会が少なかったネットワーク通信の基本概念や、主要なプロトコルの一部について具体的に解説していきます。要点として以下の内容を取り上げました。

  • OSIモデルとTCP/IPモデル
  • カプセル化と非カプセル化
  • PDU(Protocol Data Unit)
  • IP・IPアドレスとサブネットマスク
  • DHCPやARPの仕組み

これらの基礎知識を学ぶことで、ネットワークセキュリティで重要なネットワーク解析やスキャンの仕組みがより明確に理解できるようになるはずです。また、前回の記事で紹介したWiresharkというネットワークツールを活用し、パケットキャプチャを行いながら、実際の通信内容を具体的に確認する方法についても解説します。


ネットワークの概念

普段、何気なく恩恵を受けているネットワークについて、その中身を少しづつのぞいていきます。
ネットワーク通信を理解するためには、もちろんのことデータがどのように処理されて送られるかを知ることが欠かせません。その仕組みを分かりやすく整理したのが、OSIモデルTCP/IPモデルです。

OSIモデルとTCP/IPモデル

これらのモデルは、通信を段階的に分けた「階層構造」で考える方法です。この階層構造により、各役割を分担して効率的に通信を行います。通信にはルールが必要で、そのルールのことをプロトコルと呼びます。このプロトコルを利用することで、各層は役割を果たしています。

  • OSIモデルは7つの層(レイヤ)で構成され、通信の仕組みを細かく整理しています。
  • TCP/IPモデルは実際のインターネットで使われる4層構造のモデルで、シンプルですが、OSIモデルを基にしています。

このような各層で役割ごとに整理されたプロトコルの集まりのことをプロトコルスタックと呼びます。(プロトコルスイートやネットワークアーキテクチャと呼ばれることもあります。)
そんなプロトコルスタックの一つであるTCP/IPモデルは、OSIモデルを簡略化したものです。

OSIモデルは、実用性や現実的な部分で簡略化した方が良い点がいくつかありました。その為TCP/IPモデルでは、簡略化されています。とはいえ、OSIモデルは細かく整理されている分、通信の仕組みを体系的に理解するのに適したプロトコルスタックです。

そのため、OSIモデルを中心に使って各層の役割を詳しく解説していきます。

OSIモデル

OSIモデルでは、通信を7つの層(レイヤ)に分けて考えます。それぞれの層が特定の役割を持ち、下の層が上の層をサポートする仕組みです。

レイヤ番号 名前 主な役割 例となるプロトコル
7 アプリケーション層 ユーザーが利用するアプリケーションの操作をサポート HTTP, FTP, DNS, SMTP
6 プレゼンテーション層 データの形式変換、暗号化、圧縮 JPEG, PNG, SSL/TLS
5 セッション層 通信の開始、維持、終了を管理 NFS, RPC
4 トランスポート層 信頼性のあるデータ送受信 TCP, UDP
3 ネットワーク層 IPアドレスによるデータルーティング IP, ICMP, IPSec
2 データリンク層 隣接ノード間のデータ転送の制御 Ethernet, Wi-Fi
1 物理層 データを物理的に送信 電気信号、光信号、無線信号

この表をもとに、各レイヤの役割を少し掘り下げていきます。


レイヤ1: 物理層

物理層は、データを物理的に送受信する役割を持つ層です。通信には、ケーブルや無線などの「物理的な仕組み」が必要です。この層では、データを電気信号や光信号、無線信号に変換して転送します。

  • データを送る手段(伝送手段): Ethernetケーブル(有線)、Wi-Fi(無線)、光ファイバーなど。
  • 役割: 信号を作り出し、ケーブルや電波で送信する。

このようにして物理的な技術を使用し、物理層で信号が送受信されたものが上位層に渡されて初めてデータ通信が成立しています。


レイヤ2: データリンク層

データリンク層は、隣り合うネットワーク機器間での通信を制御します。この層では、データを「フレーム」という単位に分け、送り先や送り元を特定するためにMACアドレスを利用します。

  • フレーム化: データを分割し、送信先の情報を付ける。
  • 誤り検出: 通信中に発生したエラーをチェック。
  • 使用例: LANでの通信、Wi-Fi接続。

例えば、LAN内の通信では、データリンク層が送信元と宛先のMACアドレスを用いて正確にデータをフレーム化し、物理層へ渡します。受信側では、フレームを解析し、上位層で処理する準備を行います。


レイヤ3: ネットワーク層

ネットワーク層は、データを目的のネットワークまで届ける役割を担います。この層では、IPアドレスを使ってデータを転送し、最適な経路(ルート)を選択します。

  • IPアドレス: データの送り先を特定する住所のようなもの。デバイスを一意に識別し、データの送信元と宛先を指定。
  • ルーティング: 最適な経路を決める。複数のネットワークをまたぐ通信で、データが最適な経路を通るように制御。

例えば、あるデバイスから別のデバイスにデータを送る際、ネットワーク層では送信元と宛先のIPアドレスをもとにルートを決定し、データをパケットとしてルーティングします。ルーターがこの役割を担うことで、インターネットや異なるネットワーク間の通信が可能になります。


レイヤ4: トランスポート層

トランスポート層は、送信元から宛先まで(エンドツーエンド)データを確実に届ける役割を果たします。この層では、データを「セグメント」という単位に分けて送ります。

  • TCP: データの順序や正確性を保証する。
  • UDP: 高速だが簡易的な通信を提供。

例えば、TCPを使用する場合、トランスポート層が送信元と宛先で3回のやり取りを行い通信の確立を保証する「3ウェイハンドシェイク」を行います。これにより、データが途中で欠損することなく正確に送信元から宛先へ届けられます。


レイヤ5: セッション層

セッション層は、通信の「セッション」を管理します。通信の開始・維持・終了を制御し、途中で接続が途切れても再接続をサポートします。

  • 役割: 接続を安定して維持すること。
  • 使用例: Zoomのようなビデオ会議アプリ。

例えば、オンライン会議中に一時的な接続障害が発生しても、セッション層が再接続を行うことで会議を継続できる仕組みを提供しています。


レイヤ6: プレゼンテーション層

プレゼンテーション層は、データを統一された形式に変換する層です。たとえば、画像データを圧縮したり、通信を暗号化する処理を行います。

  • データ形式の変換: 異なるシステム間でデータを正しく扱う。
  • 暗号化: 安全な通信を実現(例:SSL/TLS)。

例えば、画像ファイルには様々な形式がありますがそれを転送する際に、受信側がJPEG形式だというのを理解できるように調整するのもこの層の仕事です。
異なる環境間でデータをやり取りする際に、形式やセキュリティを統一する重要な役割を果たしています。


レイヤ7: アプリケーション層

アプリケーション層は、ユーザーが直接操作する部分に対応する層です。この層では、Webブラウザやメールアプリなど、ネットワークを利用するアプリケーションの動作を支えます。

  • 使用例: Webページの閲覧(HTTP)、メール送信(SMTP)。

例えば、Webページの閲覧やメールの送受信といった日常的な操作は、すべてアプリケーション層で処理されています。
この層が提供するプロトコルを通じて、ユーザーはインターネットや他のネットワーク上でさまざまなサービスを利用することができます。


OSIモデルのイメージ(手紙の例え)

OSIモデルを初めて学ぶとき、手紙で例える事でイメージを掴むことがあります。ここでは、Aさんが手紙を書いてBさんに送る流れを通じて、各層の役割を説明します。

Aさん側の処理(データを送信する側)
  1. アプリケーション層
    Aさんが手紙に、Bさんに伝えたい内容を書きます。この段階では、手紙そのものがデータです。たとえば、Webページを閲覧するためにブラウザがHTTPリクエスト(WEBでページを表示する時にサーバーに送るリクエスト)を生成するのと同じ役割を果たします。

    対応する通信の動き: アプリケーションが通信プロトコル(例:HTTP、SMTP)を使ってデータを生成。

  2. プレゼンテーション層
    Aさんは手紙をBさん以外に読まれないよう、内容を暗号化したり、丁寧なフォーマットに整えて封筒に入れます。場合によっては、Bさんが手紙を読めるようにの普段使う言語に翻訳(形式変換)することもあります。

    対応する通信の動き: データの暗号化(例:SSL/TLS)、形式変換(例:JPEG、PNG)。

  3. セッション層
    Aさんは手紙を郵便局で扱ってもらうために、封筒にBさんの住所と自分の住所を書き、郵便番号も記載します。この段階で、手紙がやり取りされるためのルールが整います(郵便局のルールに従って管理する)。

    対応する通信の動き: 通信の確立、維持、終了の管理(例:会話のセッション管理やチェックポイントの設定)。

  4. トランスポート層
    Aさんは郵便局で「速達」や「書留」といった配送方法を選びます。手紙が確実に届くように追跡番号を付ける(TCP)か、軽量で早い配送を選ぶ(UDP)かを決定します。

    対応する通信の動き: データの信頼性保証(TCP)または迅速な送信(UDP)。

  5. ネットワーク層
    郵便局は、Bさんの住所をもとに最適な配送ルートを決定します。途中で別の郵便局を経由する場合もあります。

    対応する通信の動き: IPアドレスによるルーティングや経路選択。

  6. データリンク層
    郵便局はトラックやバイクなどの配送手段を使って、次の拠点(郵便局)に手紙を届けます。この層は、隣接する機器間でのデータ転送を担当します。

    対応する通信の動き: MACアドレスを使った隣接ノード間の通信制御。

  7. 物理層
    手紙は実際に郵便車や飛行機などを使って運ばれます。この層では、電気信号や光信号を使って物理的にデータを送信します。

    対応する通信の動き: 電気信号、光信号、無線信号によるデータ転送。

Bさん側の処理(データを受信する側)
  1. 物理層
    手紙がBさんの住所に最寄りの郵便局に到着しました。トラックやバイクが安全に運んできた状態です。

    対応する通信の動き: 信号を物理的に受け取り、上位層に渡します。

  2. データリンク層
    最寄りの郵便局は手紙をBさんの住所に届けるため、担当配達員に手紙を渡します。

    対応する通信の動き: 隣接機器間でのデータの受け渡し。

  3. ネットワーク層
    配達員が住所(IPアドレス)をもとに、Bさんの家に直接手紙を届けます。

    対応する通信の動き: IPアドレスを使ったデータの最終ルーティング。

  4. トランスポート層
    郵便局はAさんに「手紙が無事届きました」と通知を送ります(TCPの場合)。また、手紙が複数あった場合は正しい順序で配達されるように調整します。

    対応する通信の動き: データの受信確認や順序制御(TCP)。

  5. セッション層
    配達員がBさんの家に直接手紙を渡し、受け渡しが無事に完了します。この層では、通信の終了が管理されます。

    対応する通信の動き: 通信の終了処理やエラー発生時の再接続。

  6. プレゼンテーション層
    Bさんは封筒を開け、内容が分かる状態に整えます。暗号化されている場合は復号化し、元の形式に戻します。

    対応する通信の動き: データの復号化や形式の再変換。

  7. アプリケーション層
    最後に、Bさんは手紙を読み、Aさんの伝えたい内容を理解します。

    対応する通信の動き: アプリケーションがデータを処理してユーザーに表示。

この手紙の例えでは、Aさんがデータの送信元、Bさんが送信先(受信者)に相当します。そして郵便物を送るときの同様(それほど詳しくはわかりませんが)それぞれの層が連携してデータ通信を実現しています。


TCP/IPモデル

実際のインターネットを使った通信では、TCP/IPモデルが使われています。前述の通りこのモデルは、OSIモデルを4層に簡略化したものです。そのためTCP/IPモデルでは、OSIモデルのいくつかの層が明確に分けられていない、または一体化して動作しています。

TCP/IP層と対応するOSI層は以下になります。

TCP/IP層名 対応するOSI層
アプリケーション層 アプリケーション層、プレゼンテーション層、セッション層
トランスポート層 トランスポート層
インターネット層 ネットワーク層
ネットワークインターフェース層 データリンク層、物理層

キャプチャしてみる - Wiresharkでの実践

ネットワーク通信を可視化するために、Wiresharkを利用して実際のパケットをキャプチャしてみましょう。ここでは、TCP通信とUDP通信の例をキャプチャし、それぞれの動作を確認します。

1. Wiresharkの準備

  1. Wiresharkをインストールする(まだの方のみ)
    公式サイト(Wireshark)からインストールできます。

  2. 管理者権限で起動する
    ネットワークインターフェースへのアクセス権限が必要です。必ず自身が管理しているネットワーク(自宅のWi-Fiなど)だけをキャプチャしてください。他人のネットワークを無断で解析することは法律で禁止されています。

  3. インターフェースを選択
    キャプチャしたいネットワーク(Wi-Fi、有線LANなど)のインターフェースを選択します。

2. TCP通信のキャプチャ

目標: TCP通信で行われるHTTPリクエストのSYN/ACKフローを観察します。

  1. ブラウザを開いてWebページにアクセス
    例として、「http://example.com」にアクセスします(HTTPSではなくHTTPのサイトを選びます)。

  2. Wiresharkでフィルタを設定
    フィルタ欄に以下を入力します:

    tcp.port == 80
    

    これはTCPのポート80(HTTP通信)だけを表示するフィルタです。

  3. キャプチャを開始
    「Start Capture」ボタンを押してキャプチャを開始します。

  4. キャプチャ結果を観察
    以下のポイントを確認します:

    • SYN: クライアント(あなたのPC)がサーバーに接続を要求するパケット。
    • SYN/ACK: サーバーが接続を承認する応答。
    • ACK: クライアントがサーバーの応答を確認するパケット。

    この3つのフローは「3ウェイハンドシェイク」と呼ばれ、TCP通信の信頼性を確保する重要な仕組みです。

  5. キャプチャを停止
    通信の流れが確認できたら、「Stop Capture」ボタンを押します。


3. UDP通信のキャプチャ

目標: DNSクエリの送信とレスポンスを確認します。

  1. コマンドを使ってDNSクエリを送信
    ターミナルまたはコマンドプロンプトを開き、以下を入力します:

    nslookup example.com
    

    これにより、DNSサーバーに対して「example.com」のIPアドレスを問い合わせます。

  2. Wiresharkでフィルタを設定
    フィルタ欄に以下を入力します:

    udp.port == 53
    

    これはDNS通信に使用されるUDPポート53のパケットだけを表示します。

  3. キャプチャを開始
    「Start Capture」ボタンを押してキャプチャを開始します。

  4. キャプチャ結果を観察
    以下のポイントを確認します:

    • クエリパケット: クライアントから送信されるDNSリクエスト。
    • レスポンスパケット: DNSサーバーから送信されるIPアドレスの応答。

    UDP通信では、TCPのような確認応答(ACK)はなく、クエリとレスポンスが直接やり取りされることが分かります。

  5. キャプチャを停止
    DNS通信が確認できたら、「Stop Capture」ボタンを押します。

このようにして、TCPではデータの正確性を保証し、UDPでは高速な通信を提供しています。


カプセル化と非カプセル化

先ほどOSIモデルのイメージ(手紙の例え)で示した通り、コンピュータがデータを送信するとき、通信はOSIモデルに沿って、最上位のアプリケーション層から順に処理されます。これを進める過程で、各層がデータに必要な情報を付け加えることで、送信側と受信側が正しくデータをやり取りできる仕組みが作られます。この仕組みをカプセル化と呼びます。

一方、データが受信側に届いたときには、カプセル化されたデータを元に戻す必要があります。このプロセスを非カプセル化といいます。非カプセル化によって、受信側は送信側が使ったプロトコル(通信ルール)を正しく解釈し、元のデータを理解することができます。

カプセル化と非カプセル化がないとどうなる?

もしカプセル化と非カプセル化の仕組みがなければ、どうなるでしょうか?
例えば以下のような問題が発生します。

  1. データが届かない
    送り先や送り主の情報がないため、データがどこに行くべきか分からず、正しく通信できません。

  2. 異なるシステム間で通信できない
    データ形式が統一されないため、異なるOSやアプリ同士の通信が不可能になる可能性があります。

  3. データの信頼性が失われる
    一部のデータが消失したり順番が入れ替わっても、それを検出したり修復する仕組みがなくなります。

  4. セキュリティリスクが増大する
    暗号化が行われないため、送信中のデータが盗まれたり改ざんされる危険があります。

  5. ネットワークが効率的に動かない
    データの分割や再送制御ができず、大容量データの送信に失敗しやすくなります。

このようにカプセル化と非カプセル化がなければ、通信の正確性、効率性、安全性が失われ、インターネット通信は成り立ちません。OSIモデルなどと同様にこの仕組みはインターネットを成立される基盤となる仕組みと言えます。


ヘッダとトレーラ

カプセル化や非カプセル化のプロセスでは、各層がデータに必要な情報を追加したり解釈することで、送信側と受信側が正しくデータをやり取りできるようにしています。この「必要な情報」をヘッダと呼びます。

ヘッダは、データの先頭に付け加えられ、その層が通信を行うために必要な情報を含んでいます。一方、データリンク層では、データの末尾にも追加情報を付け加えます。この部分をトレーラと呼びます。

なぜデータリンク層だけトレーラが必要なのか?

データリンク層は、隣接する機器間の通信の信頼性を確保する役割を持っています。そのため、トレーラにはエラー検出情報(例:フレームチェックシーケンス:FCS)が含まれています。受信側はこの情報を使って、通信中にデータが破損していないかを確認します。なお、**フレームチェックシーケンス(FCS)**の仕組みは、送信側がフレーム全体のデータに基づいて計算したチェックサム(検査用の数値)を付加し、受信側が同じ方法でチェックサムを再計算して一致するかを確認することで、データのエラーを検出するものです。

上位層(ネットワーク層以降)では、エラーの管理は確認応答(ACK)や再送制御といった別の仕組みで行われるため、トレーラは必要ありません。一方、物理層は単に信号を送るだけの役割を担っており、エラー検出は行いません。そのため、データリンク層だけがトレーラを使用してエラー検出を行う仕組みになっています。


PDU(Protocol Data Unit)とは?

これまでの解説で登場した「セグメント」「パケット」「フレーム」といった言葉。これらは、ネットワーク通信におけるデータの単位を指しています。このデータの単位を PDU(Protocol Data Unit:プロトコルデータユニット) といいます。

PDUは、データが通信される際に、OSIモデルやTCP/IPモデルの各層がデータをどのように扱っているかを示す単位です。各層ごとに呼び方が異なり、それぞれが特定の役割を持っています。

各層ごとのPDUとその役割
層名 PDUの名称 役割
アプリケーション層 データ(Data) ユーザーが使用するアプリケーションが生成するデータ。
トランスポート層 セグメント(Segment) データを分割し、通信が確実に行われるよう信頼性を確保。
ネットワーク層 パケット(Packet) 送信元から宛先までデータを届けるためのルート情報を付加。
データリンク層 フレーム(Frame) 隣接するノード間で正確にデータを送受信。
物理層 ビット(Bits) 電気信号や光信号として送られるデータの最小単位。

PDUのポイント
  • PDUが変わる仕組み
    データは通信の際に各層を通過します。そのたびに新しいヘッダが付加されて「PDUの形式」が変わります。たとえば、トランスポート層ではセグメント、ネットワーク層ではパケットという単位になります。

  • トラブルシューティングの手がかりになる
    ネットワークトラブルの解析では、どの層でどのPDUに問題があるかを特定することが重要です。たとえば、「フレームエラー」はデータリンク層、「パケットルートの問題」はネットワーク層に関係しています。


具体例:PDUの流れをイメージ
  1. アプリケーション層
    ユーザーがWebページを閲覧するためにデータが生成されます(PDUは「データ」)。

  2. トランスポート層
    このデータはセグメントに分割され、通信が確実に行われるようTCPヘッダが追加されます。

  3. ネットワーク層
    セグメントはパケットとなり、送信元と宛先のIPアドレスが付加されます。

  4. データリンク層
    パケットがフレームに変換され、隣接するノード間で正確にデータを送るためのMACアドレスが付加されます。

  5. 物理層
    最終的に、フレームはビット(電気信号や光信号)となり、ネットワーク上に送信されます。


キャプチャしてみる - Wiresharkでの実践

Wiresharkでカプセル化データを解析し、TCPヘッダやIPヘッダの詳細を確認しましょう。

  1. Wiresharkを起動
    Wiresharkを起動します。起動後、画面上部に表示されるネットワークインターフェースの一覧が表示されます。

  2. キャプチャ対象のインターフェースを選択
    通信をキャプチャしたいネットワークインターフェース(例:Wi-Fi、有線LAN)を選択し、「Start Capture」ボタンをクリックしてキャプチャを開始します。

  3. 通信を発生させる
    キャプチャ中にWebブラウザを開き、任意のWebページ(例:http://example.com)にアクセスします。これにより、HTTPリクエスト(TCPを使用)が発生します。

  4. フィルタを設定してTCPパケットを表示
    キャプチャが進んだら、フィルタ欄に以下のフィルタを入力してTCPパケットを絞り込みます:

    tcp
    

    または、特定の通信を絞り込む場合は、IPアドレスやポート番号でフィルタを設定します(例:HTTP通信の場合はポート80):

    tcp.port == 80
    
  5. TCPパケットを選択
    リストに表示されたTCPパケットの1つをクリックして選択します。選択したパケットの詳細が画面下部に表示されます。

  6. TCPヘッダの詳細を確認
    画面下部の解析結果に表示される項目から、Transmission Control Protocol(TCP)を展開します。以下の情報が確認できます。

    • Source Port(送信元ポート)
      データを送信したアプリケーションのポート番号。
    • Destination Port(宛先ポート)
      データを受信するアプリケーションのポート番号(例:HTTPなら80)。
    • Sequence Number(シーケンス番号)
      データの順序を識別する番号。
    • Acknowledgment Number(確認応答番号)
      データの受信確認に使用される番号。
    • Flags(フラグ)
      SYN、ACKなどTCP通信の状態を示すフラグ。
  7. IPヘッダの詳細を確認
    次に、Internet Protocol(IP)を展開します。以下の情報が確認できます。

    • Source Address(送信元IPアドレス)
      データを送信したデバイスのIPアドレス。
    • Destination Address(宛先IPアドレス)
      データを受信するデバイスのIPアドレス。
    • Protocol(IPv4の場合)
      使用しているプロトコル(例:TCP)。
    • Next Header(IPv6の場合)
      使用しているプロトコル(例:TCP)。
  8. キャプチャを停止
    必要な情報を確認したら、「Stop Capture」ボタンをクリックしてキャプチャを終了します。

TCPヘッダとIPヘッダは、カプセル化の具体例として重要です。TCPヘッダはトランスポート層での制御情報を、IPヘッダはネットワーク層でのルーティング情報を提供しています。

IPアドレスとサブネットマスク

IPアドレスは、ネットワーク上でデバイスを識別するための「住所」のような役割を持っています。これを理解することで、複数のデバイスをネットワーク上で扱うのに必要な知識をより具体的にすることができます。


IPアドレスの基礎

IPアドレスには、主に以下の2種類があります。

  • IPv4: 32ビットの2進数で構成されていますが、理解しやすいように8ビットずつドットで区切り、10進数に変換した形で表記します(例:192.168.1.1)。現在も多く使用されていますが、アドレス枯渇が課題となっています。
  • IPv6: 128ビットのアドレスで、16ビットごとにコロン(:)で区切り、各部分を16進数で表記します(例:2001:db8::1)。非常に広大なアドレス空間を持ち、IPv4の枯渇問題を解決するために設計されました。

パブリックIPアドレスとプライベートIPアドレス

IPアドレスには、インターネット全体で使われるパブリックIPアドレスと、家庭や職場などのローカルネットワーク内で使われるプライベートIPアドレスの2種類があります。それぞれの役割を理解することがネットワークの基本です。


パブリックIPアドレスとは?

  • インターネット上で一意に割り当てられるIPアドレスです。
  • グローバルに利用され、世界中の他のデバイスと直接通信が可能です。
  • 例:8.8.8.8(GoogleのDNSサーバー)

インターネットに接続するには、インターネットサービスプロバイダ(ISP)からパブリックIPアドレスを取得する必要があります。


プライベートIPアドレスとは?

  • ローカルネットワーク内で使用されるIPアドレスです。
  • インターネット上から直接アクセスすることはできず、通常はルータや**NAT(Network Address Translation)**を使ってインターネットと通信します。
  • 主な用途: 家庭やオフィス内でのデバイス間の通信(例:PCとプリンタ、スマホとWi-Fiルータの接続)。

プライベートIPアドレスの範囲は以下の通りです:

クラス 範囲
A 10.0.0.010.255.255.255
B 172.16.0.0172.31.255.255
C 192.168.0.0192.168.255.255

パブリックとプライベートの違い

項目 パブリックIPアドレス プライベートIPアドレス
利用範囲 インターネット全体 ローカルネットワーク内
一意性 世界中で一意 ネットワーク内で一意
アクセス方法 他のインターネットデバイスと通信可能 ルータやNATを介してインターネット通信
203.0.113.1(グローバルIP) 192.168.1.1(家庭用ルータ)

なぜパブリックとプライベートを分けるのか?

  1. アドレス資源の節約
    プライベートIPアドレスを使用することで、限りあるパブリックIPアドレスを節約できます。

  2. セキュリティの向上
    プライベートIPアドレスは直接インターネットからアクセスできないため、外部からの不正侵入を防ぐ役割も果たします。

  3. ネットワーク設計の柔軟性
    家庭やオフィス内で独自のネットワークを構築する際に便利です。プライベートIPアドレスの範囲は固定されており、再利用も可能です。


サブネットマスクとCIDR表記

サブネットマスクは、IPアドレスをネットワーク部分ホスト部分に分けるために使用される重要な情報です。

  • ネットワーク部分: どのネットワークに属しているかを示します。
  • ホスト部分: ネットワーク内で特定のデバイスを識別します。

サブネットマスクは、ネットワーク部分を1のビット、ホスト部分を0のビットで表します。これにより、ネットワーク部分とホスト部分を区別します。

CIDR表記

サブネットマスクを簡略化した形式がCIDR表記(Classless Inter-Domain Routing)です。
CIDR表記では、ネットワーク部分のビット数をスラッシュ(/)の後に記載します。

例:

  • 255.255.255.0/24(ネットワーク部分が24ビット)。
  • 255.0.0.0/8(ネットワーク部分が8ビット)。

サブネットマスクの例

IPアドレス サブネットマスク CIDR表記 ネットワーク部分 ホスト部分
192.168.1.1 255.255.255.0 /24 192.168.1 1
10.0.0.1 255.0.0.0 /8 10 0.0.1

サブネットマスクを使う理由

  1. ネットワーク分割
    大きなネットワークを小さなサブネットに分割することで、トラフィックを効率化し、ネットワーク全体のパフォーマンスを向上させます。

  2. IPアドレスの節約
    必要なホスト数に応じて柔軟にネットワークを設計でき、IPアドレスの無駄を防ぎます。

  3. セキュリティ強化
    ネットワークを分割することで、部門ごとの通信を制限するなどセキュリティ向上に役立ちます。


ネットワークの基本プロトコル

DHCPとは?

私たちが普段、コンピュータやスマートフォンをネットワークに接続してすぐにWebを利用できるのは、DHCPのおかげです。
DHCP(Dynamic Host Configuration Protocol) は、ネットワーク内のデバイスに対して、自動的にIPアドレスを割り当てる仕組みです。

この機能により、ユーザーが手動でIPアドレスを設定する必要がなくなり、ネットワーク接続が簡単かつスムーズに行えるようになっています。DHCPは、現代のネットワークを快適に利用するために重要な存在です。


DHCP通信の流れ

DHCPがどのようにしてIPアドレスを割り当てるのか、その仕組みを簡単に説明します。DHCP通信は、クライアント(IPアドレスを必要とするデバイス)とサーバー(IPアドレスを提供する機器)の間で行われます。

  1. DHCPディスカバー(Discover)
    クライアントが「IPアドレスが欲しいです!」とネットワーク全体にブロードキャストでメッセージを送ります。

  2. DHCPオファー(Offer)
    DHCPサーバーがクライアントに「このIPアドレスを使っていいですよ」という提案を返します。

  3. DHCPリクエスト(Request)
    クライアントが「そのIPアドレスを使いたいです!」とリクエストを送ります。

  4. DHCPアクノリッジ(Acknowledge)
    DHCPサーバーがリクエストを承認し、クライアントに正式にIPアドレスを割り当てます。

この流れが非常に短時間で行われ、ネットワークにスムーズに接続できるようになります。

以下に改善した文章を示します:


ARPとは?

**ARP(Address Resolution Protocol)**は、ネットワーク通信で使用されるプロトコルの一つで、IPアドレスから対応するMACアドレスを取得する仕組みです。ネットワーク内でデータを送信する際、IPアドレスだけでなく、デバイス固有のMACアドレスが必要になるため、ARPはその橋渡し役を担います。


ARPの仕組み

  1. ARPリクエスト
    ネットワーク内で特定のIPアドレスを持つデバイスのMACアドレスを知りたいとき、ARPリクエストがブロードキャスト(同じネットワーク内にいる全員に同じデータを送る)で送信されます。

  2. ARPリプライ
    リクエストを受け取った該当デバイスが、自分のMACアドレスをリプライ(応答)として返します。この応答はユニキャスト(同じネットワーク内にいる一人にデータを送る)で送信されます。


ICMP、Ping、Tracerouteとは?

ネットワーク通信では、エラー通知や接続確認、経路の解析が重要な役割を果たします。これらの機能を提供する主なプロトコルとツールを以下に説明します:

  • ICMP(Internet Control Message Protocol)
    ネットワーク通信中にエラーが発生した場合に、その情報を通知するためのプロトコルです。たとえば、パケットが宛先に届かなかったり、ルートに問題がある場合に使用されます。

  • Ping
    ICMPを利用して接続状況を確認するツールです。具体的には、ICMPエコーリクエストを送信し、宛先からのエコーリプライを受信することで、通信が正常であるかどうかをチェックします。

  • Traceroute
    ネットワーク経路を解析するツールです。データが送信元から宛先に到達するまでに通過するルータ(ホップ)の情報を収集し、経路の状態を確認します。途中でエラーが発生した場合、ICMPのエラー通知が利用されます。


キャプチャタスク:WiresharkでICMP通信を観察しよう

ネットワークでのICMP通信を可視化するには、Wiresharkを使用します。以下の手順でGoogleをターゲットにして、PingやTracerouteの動作をキャプチャしてみましょう。

1. Wiresharkを起動し、キャプチャを開始

使用中のネットワークインターフェースを選択してキャプチャを開始します。

2. Ping通信のキャプチャ

コマンドプロンプトまたはターミナルで、以下のコマンドを実行してGoogleにPingを送信します:

ping www.google.com

Wiresharkで以下のICMPメッセージを確認します:

  • Echo Request(エコーリクエスト)
    クライアント(あなたのデバイス)がGoogleのサーバーに送信するPingのリクエスト。
  • Echo Reply(エコーリプライ)
    Googleのサーバーがクライアントに返す応答。

GoogleのIPアドレスが正しく解決されていることを確認します。


3. Traceroute通信のキャプチャ

Googleへの経路を追跡するために、以下のコマンドを実行します。使用しているOSに応じてコマンドが異なります:

  • Windowsの場合
    tracert www.google.com
    
  • Linux/macOSの場合
    traceroute www.google.com
    

Wiresharkを使用してキャプチャを行い、以下のポイントを観察します:

  1. 各ホップ(ルータ)でのICMPエラー通知
    Tracerouteでは、送信パケットに含まれる**TTL(Time To Live)**の値を利用して、ネットワーク経路を追跡します。

    TTLとは?

    TTLは、パケットがネットワークを通過できる**最大ホップ数(中継地点の数)**を指定するフィールドで、送信元で設定されます。TTLの目的は、パケットがループ状態に陥った場合に、永遠にネットワーク上を流れ続けるのを防ぐことです。

    • 動作の仕組み:
      各ルータ(ホップ)を通過するたびにTTLの値が1減少します。
      TTLが0になると、ルータはそのパケットを破棄し、送信元に対して**ICMPエラー通知(Time Exceededメッセージ)**を返します。

    • Tracerouteでの利用:
      Tracerouteでは、送信パケットのTTL値を1から順に増加させて送信します。これにより、パケットが最初のルータでTTLが0になり、そのルータからエラー通知を受け取ることで、そのルータのIPアドレスを特定します。この操作を繰り返し、パケットが目的地に到達するまでの経路を追跡します。

    :

    1. TTL=1で送信 → 最初のルータがTime Exceededメッセージを返す。
    2. TTL=2で送信 → 次のルータがTime Exceededメッセージを返す。
    3. 目的地に到達したら → Echo Reply(正常応答)が返される。
  2. 最終的なターゲットホストへの応答
    Googleのサーバーに到達すると、通常、ICMPプロトコルのEcho Reply(エコー応答)が返されます。この応答は、送信元(あなたのデバイス)が送信したEcho Requestに対する正常な応答を意味します。

各ルータでのTime Exceededメッセージを探し、経路の順番を確認します。
また、Googleのサーバーから返されるEcho Reply(エコー応答)を確認し、通信が正常に到達したことを確認します。

小テスト


Q1: OSIモデルについて

OSIモデルにおいて、データの暗号化や形式変換を行う層はどれですか?
a) アプリケーション層
b) プレゼンテーション層
c) セッション層
d) データリンク層


Q2: TCPとUDPの使い分け

次の用途に適したプロトコルを選びなさい:

  1. 動画ストリーミングのように高速性が重要な通信
  2. Webサイトのデータ転送など信頼性が求められる通信

a) UDP, TCP
b) TCP, UDP
c) UDP, UDP
d) TCP, TCP


Q3: IPアドレスの構造

次のIPアドレス 192.168.1.1/24 の場合、ネットワーク部分を正しく示しているのはどれですか?
a) 192.168.1
b) 192.168.1.1
c) 255.255.255.0
d) 192.168


Q4: DHCPの役割

DHCPサーバーがクライアントに自動で割り当てる情報に含まれるものとして正しいのはどれですか?
a) ドメイン名
b) MACアドレス
c) サブネットマスク
d) デバイス名


Q5: キャプチャタスク:Ping通信

WiresharkでPing通信をキャプチャするときに観察できるICMPメッセージとして正しくないものはどれですか?
a) Echo Request(エコーリクエスト)
b) Echo Reply(エコーリプライ)
c) Destination Unreachable(宛先到達不可)
d) TCP SYN(SYNパケット)


解答と解説


Q1: OSIモデルについて
正解: b) プレゼンテーション層

  • プレゼンテーション層は、データの暗号化や形式変換を行い、異なるシステム間でデータを正しく扱えるようにする役割を担います。

Q2: TCPとUDPの使い分け
正解: a) UDP, TCP

  • 動画ストリーミングはリアルタイム性が求められるため、速度重視のUDPが使用されます。
  • 一方、Webサイトのデータ転送は正確性が重要なため、信頼性の高いTCPが適しています。

Q3: IPアドレスの構造
正解: a) 192.168.1

  • /24 のサブネットマスクは先頭の24ビットがネットワーク部分であることを示しており、192.168.1 がネットワーク部分に該当します。

Q4: DHCPの役割
正解: c) サブネットマスク

  • DHCPサーバーは、IPアドレス、サブネットマスク、デフォルトゲートウェイなどをクライアントに自動的に割り当てます。
  • ドメイン名やMACアドレスは通常含まれません。

Q5: キャプチャタスク:Ping通信
正解: d) TCP SYN(SYNパケット)

  • ICMPメッセージとして観察されるのはEcho RequestEcho ReplyDestination Unreachableなどです。
  • 一方、TCP SYNはICMPではなくTCPプロトコルに属します。

まとめ

本記事では、ネットワーク通信の基本的な概念や主要なプロトコルについて解説し、実際のパケットキャプチャも行いました。
ネットワークの学習は、座学だけでは理解が抽象的になりがちです。ぜひパケット解析ツール(Wireshark)やPingなどのコマンドを活用し、実際の通信を観察することで、座学から一歩踏み込んだ学習をお勧めします。

次回は、さらに深い内容として、もう少しコアなプロトコルSSL/TLSといったセキュリティプロトコルについて解説します。これらの知識を実際の通信で活用することで、ネットワークセキュリティの理解を一層深めていきましょう。

Discussion