ネットワーク技術の基礎 -AWS VPCへ挑む前の下準備Part1-

# はじめに
AWSのVPCを学んでいると「そもそもネットワークの知識がないと無理ゲーじゃない？」「2進数と10進数の違いって？」「IPアドレスとサブネットマスクって？」といった非常に基礎的なところから積み上げないと、ただの暗記になってしまうと思ったため、2回に分けて整理します。

今回の第一弾では「ネットワーク技術の基礎」を、次回の第二弾では「IPアドレスとサブネットマスクとは」を扱います。

# 1. ネットワーク技術とは？

ネットワーク技術を一言で表すなら、**「コンピューター同士が情報をやり取りするための仕組み」** です。

例えば、あなたが友達に手紙を出すとしましょう。
手紙を書く人（あなた）、手紙を受け取る人（友達）、手紙を運ぶ郵便屋さん、手紙を入れる封筒、手紙の宛先…色々な要素が必要になりますよね。

ネットワークも同じです。コンピューター同士が情報をやり取りするためには、様々なルールや道具が必要になります。この「ルール」や「道具」が、**ネットワーク技術**です。

ネットワーク技術は、インターネットだけでなく、会社の中のネットワークや、家庭内のWi-Fiなど、様々な場所で使われています。

そして、私たちが普段何気なく使っている、
* メールを送受信する
* ウェブサイトを閲覧する
* YouTubeで動画を見る
* LINEでメッセージを送る
* オンラインゲームで遊ぶ

こういった便利なサービスは、全てネットワーク技術の上に成り立っています。

# 2. ネットワークの層モデル

ネットワークの世界は、複雑に見えても実は整理されています。
それが**層モデル**という考え方です。

層モデルは、ネットワークの機能をいくつかの階層に分け、それぞれの階層に役割を与えることで、全体をシンプルに理解できるようにしたものです。

例えるなら、会社組織のようなものです。
社長、部長、課長、社員…と役割が分かれているからこそ、会社全体がスムーズに動きますよね。
ネットワークも同じように、層ごとに役割分担することで、複雑な通信を効率的に行っているのです。

層モデルには、代表的なものとして**OSI参照モデル**と**TCP/IP階層モデル**の2つがあります。

![](https://storage.googleapis.com/zenn-user-upload/94e0d8956a86-20250217.png)

## 2.1 OSI参照モデル：7つの階層

OSI参照モデルは、ネットワークの設計図のようなものです。
通信機能を7つの階層に分け、各階層の役割を定義しています。

| 階層 | 名称             | 役割                                                                 | 例                                                                 |  
|------|------------------|----------------------------------------------------------------------|--------------------------------------------------------------------|  
| 第1層 | 物理層           | ケーブルの種類、コネクタの形状、電気信号の伝送方法など、物理的なデータ伝送を規定 | LANケーブル、光ファイバー、無線LAN (Wi-Fi)                         |  
| 第2層 | データリンク層   | 信頼性の高いデータ伝送を実現。MACアドレスによる識別やエラー検出・訂正を行う | MACアドレス (Media Access Control address)、イーサネット                                         |  
| 第3層 | ネットワーク層   | 異なるネットワーク間でのデータ転送（ルーティング）を行う               | IP (Internet Protocol)、ルーティング                               |  
| 第4層 | トランスポート層 | アプリケーション間の通信において、信頼性や速度など、データ伝送の品質を保証 | TCP (Transmission Control Protocol)、UDP (User Datagram Protocol) |  
| 第5層 | セッション層     | アプリケーション間の通信セッションの開始・維持・終了を管理             | セッション管理、認証                                               |  
| 第6層 | プレゼンテーション層 | データの形式や符号化を変換。データの暗号化や圧縮も行う               | データ暗号化、データ圧縮、文字コード変換                           |  
| 第7層 | アプリケーション層 | ユーザーが利用するアプリケーションにネットワークサービスを提供         | HTTP (Hypertext Transfer Protocol)、SMTP (Simple Mail Transfer Protocol)、DNS (Domain Name System) |  

OSI参照モデルは、ネットワークの機能を階層的に理解するための概念的なフレームワークとして非常に有用です。

## 2.2 TCP/IPモデル：インターネットで活躍する4つの階層
TCP/IPモデルは、インターネット事実上の標準となっている4つの階層からなるモデルです。OSI参照モデルをより実用的にシンプル化したモデルと言えます。

| 階層 | 名称                     | 役割                                                                 | 例                                                                 |  
|------|--------------------------|----------------------------------------------------------------------|--------------------------------------------------------------------|  
| 第1層 | ネットワークインターフェース層 | OSI参照モデルの物理層とデータリンク層に相当。物理メディアやMACアドレスを用いた通信を担当 | イーサネット、無線LAN (Wi-Fi)、LANケーブル                         |  
| 第2層 | インターネット層         | OSI参照モデルのネットワーク層に相当。**IPアドレスを用いたアドレス指定やルーティング**を担当 | **IP (Internet Protocol)**、ICMP (Internet Control Message Protocol)、ARP (Address Resolution Protocol) |  
| 第3層 | トランスポート層         | OSI参照モデルと同じくトランスポート層。信頼性重視のTCPや高速性重視のUDPを提供 | TCP (Transmission Control Protocol)、UDP (User Datagram Protocol) |  
| 第4層 | アプリケーション層       | OSI参照モデルのセッション層、プレゼンテーション層、アプリケーション層をまとめた層 | HTTP (Hypertext Transfer Protocol)、SMTP (Simple Mail Transfer Protocol)、DNS (Domain Name System)、FTP (File Transfer Protocol) |  

### インターネット層：住所で宛先を特定する層
- インターネット層の主な役割は、**データを目的地まで届ける** ことです。
    - インターネットの世界では、全ての機器に **IPアドレス** という住所のようなものが割り振られています。
    - インターネット層では、このIPアドレスを使って、送信元から宛先までデータを届けます。
    - **IP (Internet Protocol)** というプロトコル（通信規約）が中心的な役割を果たしており、データを **パケット** という小さな単位に分割して送受信します。
- また、**ルーティング** という、どの道を通ってデータを送るかを決める仕組みも、この層の重要な役割です。
    - 例えるなら、郵便番号のようなものです。郵便番号によって、手紙がどの地域に送られるか特定できますよね。

関連するプロトコルとしては、以下があります。
* **IP (Internet Protocol)**：データ配送の基本
* **ICMP (Internet Control Message Protocol)**：通信状況の確認やエラー通知
* **ARP (Address Resolution Protocol)**：IPアドレスから物理アドレス（MACアドレス）を調べる
* **DHCP (Dynamic Host Configuration Protocol)**：IPアドレスを自動で割り当てる

### トランスポート層：確実or高速！データ配送方法を選ぶ層
- トランスポート層は、**アプリケーション同士の通信をサポート**する層です。
- ここでは、主に**TCP (Transmission Control Protocol)** と**UDP (User Datagram Protocol)** という2つのプロトコルが使われます。

**TCP** は、**信頼性重視** のプロトコルです。
* **接続型**：通信を始める前に、相手との間で「これから通信しますよー」という合図を送受信します（SYN/ACKハンドシェイク）。
* **確実なデータ伝送**：データが紛失したり、順番が入れ替わったりしないように、制御や再送の仕組みがあります。
例えるなら、宅配便の「書留」のようなものです。正確に、確実に荷物を届けてくれますよね。

**UDP** は、**高速性重視** のプロトコルです。
* **非接続型**：合図を送受信する手順を省き、すぐにデータを送り始めます。
* **高速データ伝送**：制御手順を最小限にしているため、高速にデータを送れます。
* **非信頼性**：データの到着保証はしません。「送ったけど、届いたかな？」というデータ伝送方法です。
例えるなら、普通郵便のようなものです。早く送れるけど、届く保証はありません。

どちらのプロトコルを使うかは、アプリケーションによって使い分けられます。

* **TCP向きのアプリケーション**：ウェブ閲覧、メール送受信、ファイル転送など（確実性が重要なもの）
* **UDP向きのアプリケーション**：動画配信、オンラインゲーム、音声通話など（多少のデータ紛失は許容できるが、速度が重要なもの）

### アプリケーション層：アプリが利用するプロトコルの層

アプリケーション層は、**ユーザーが直接利用するアプリケーション**に近い、一番上位の層です。
代表的なものは以下があります。

| 用途               | 利用プロトコル         | 説明                                                       |
| :----------------- | :------------------------------- | :------------------------------------------------------------------- |
| **Webアクセス**     | HTTP/HTTPS                      | ウェブページの閲覧に使うプロトコル。HTTPS は暗号化対応版。                  |
| **電子メール**      | SMTP, POP, IMAP                 | メール送信、受信、管理に使う。                                        |
| **リモートログイン** | TELNET, SSH                     | 他のコンピューターを遠隔操作。SSH は暗号化されるためセキュア。                                |
| **ファイル転送**    | FTP, rsync                      | ファイルのアップロード、ダウンロード、同期に使う。                                            |
| **ファイル共有**    | NFS, SMB                        | ネットワーク経由でファイルを共有する。                                                        |
| **VoIP通話**       | SIP, RTP                        | インターネット電話や音声通話に使う。                                                  |
| **システム運用管理** | DNS, DHCP, NTP, SNMP            | ドメイン名変換、IPアドレス自動割当、時刻同期、機器監視などに使う。                                |
| **Xプロトコル**     | X11                           | グラフィカルなユーザーインターフェース(GUI) 提供に使う。                                |


# 3. 各プロトコルの補足

## 3.1 ポート番号：通信の窓口
**ポート番号**は、コンピューター上で動作する**アプリケーションを識別するための番号**です。一台のコンピューターで複数のネットワークサービスを同時に提供するために、ポート番号が使われます。例えるなら、アパートの部屋番号のようなものです。IPアドレスが住所、ポート番号が部屋番号に相当し、ポート番号によって、どのアプリケーション宛のデータかを特定できます。

* **代表的なポート番号の例**
    * **HTTP (Web閲覧)**: `80`番
    * **HTTPS (セキュアWeb閲覧)**: `443`番
    * **SSH (リモートログイン)**: `22`番

## 3.2 TCPコネクション：TCP通信の信頼性を支える通信路
**TCPコネクション**は、TCP通信における**信頼性を支える通信路**です。通信を始める前に、送信側と受信側でコネクションを確立し、通信が終われば切断します。

* **コネクション確立 (SYN/ACKハンドシェイク)**:
    1. 送信側 → 受信側へ **SYNパケット**送信:  「通信したい！」と開始の合図を送ります。
    2. 受信側 → 送信側へ **SYN-ACKパケット**返信:  「開始OK！準備OK！」と返事をします。
    3. 送信側 → 受信側へ **ACKパケット**返信:  「OK返事もらった！通信開始しよう！」と最終的な返事をします。
    この3段階のやり取りで、二者間に通信路（TCPコネクション）が確立します。

* **コネクション切断 (FINパケット)**:
    通信が終了したら、コネクションを解放します。二者間で **FINパケット**をやり取りすることで、お互いに「もう通信終わりだね」と確認し合い、コネクションを終了します。

```mermaid
sequenceDiagram
    participant クライアント
    participant サーバー

    %% TCPコネクションの確立 %%
    Note over クライアント,サーバー: TCPコネクション開始
    クライアント->>サーバー: SYN (seq=x)
    Note right of クライアント: SYN_SENT
    Note left of サーバー: SYN_RCVD
    サーバー-->>クライアント: SYN-ACK (seq=y, ack=x+1)
    activate クライアント
    クライアント->>サーバー: ACK (seq=x+1, ack=y+1)
    deactivate クライアント
    Note over クライアント,サーバー: TCPコネクション確立
    Note right of クライアント: ESTABLISHED
    Note left of サーバー: ESTABLISHED

    %% データ転送フェーズ %%
    Note over クライアント,サーバー: データ転送フェーズ

    %% TCPコネクションの終了 %%
    Note over クライアント,サーバー: TCPコネクション終了手順開始
    クライアント->>サーバー: FIN (seq=m)
    Note right of クライアント: FIN_WAIT_1
    サーバー-->>クライアント: ACK (ack=m+1)
    Note right of クライアント: FIN_WAIT_2
    Note left of サーバー: CLOSE_WAIT
    サーバー->>クライアント: FIN (seq=n)
    Note left of サーバー: LAST_ACK
    クライアント-->>サーバー: ACK (ack=n+1)
    Note over クライアント,サーバー: TCPコネクション終了手続き完了
    Note right of クライアント: TIME_WAIT → CLOSED
    Note left of サーバー: CLOSED
```

## 3.3 TCP通信：シーケンス番号が順序を保証
**シーケンス番号**は、TCP通信において**データ伝送の順番を保証するための背番号**のようなものです。

* **シーケンス番号の役割**:
    * **順序保証**:  送信パケットに順番に番号を振ることで、受信側は番号順にパケットを並び替え、正しい順番でデータを受け取れます。
    * **再送制御**:  パケットが紛失した場合、受信側は「〇〇番のパケットが届いてないよ！」と送信側に知らせることができます。送信側は、紛失したパケットを再送することで、データ紛失を防ぎます。

# 4. まとめ

今回の記事では、ネットワーク技術の基礎を整理しました。

ポイントをまとめると…
1. **層モデルを理解する**: OSI参照モデル、TCP/IP階層モデルで、ネットワーク全体の構造を把握する
2. **プロトコルの目的を理解する**: IP、TCP、UDPなど、主要プロトコルの原理や用途を覚えておく
3. **応用例を結びつける**:ウェブ閲覧、メール、リモートログインなど、具体的な利用シーンと対応するプロトコルをチェックしておく