ネットワーク入門: ネットワークプロトコルについて

# 導入
ネットワーク技術は、現代の情報社会を支える重要なインフラの一つです。
インターネットをはじめとするさまざまなネットワーク上では、データのやり取りを円滑に行うために、多くのプロトコルが使われています。

しかし、「プロトコル」とは何か、どのように動作するのかは、初心者にとって理解しづらい概念かもしれません。

本記事では、ネットワークプロトコルの基本から具体的なプロトコルの役割までをわかりやすく解説します。

まずは、通信プロトコルの概念を理解し、OSIモデルやTCP/IPモデルといった基本的なフレームワークを学びましょう。その後、ネットワーク層、トランスポート層、アプリケーション層の各プロトコルについて具体的な例を交えながら説明していきます。この記事を通じて、ネットワーク通信の基礎をしっかりと身につけてください。

# 通信プロトコルの基本
## プロトコルスタックと層の概念
通信プロトコルは、データ通信を標準化し、異なるシステム間の相互運用性を確保するためのルールや手順を定義します。通信プロトコルは層状に構成され、これを**プロトコルスタック**と呼びます。それぞれの層は、特定の役割を持ち、独立した機能を提供します。下位層が提供するサービスを上位層が利用し、全体としてネットワーク通信を実現します。

正直このあたりの概念ははじめは理解が難しいと思うので、一旦丸暗記することをお勧めします。
また、OSIモデルが一般的に話題になりますが、TCP/IPモデルの方がレイヤが少なく、実装に即した構造のため理解が容易かと思います。

## OSIモデルとTCP/IPモデルの役割
ネットワークプロトコルを理解するには、データのやり取りをどのように分割し、管理するかを示したモデルが欠かせません。OSIモデルとTCP/IPモデルは、そうしたフレームワークを提供し、各層でどのような役割があるのかを説明するためのモデルです。

### OSIモデル
OSI（Open Systems Interconnection）モデルは、ISO（国際標準化機構）によって開発された標準化されたプロトコルのフレームワークです。このモデルは7層で構成され、それぞれの層が特定の機能を持っています。

1. **物理層**
ハードウェアの電気的、機械的、手続き的な特性を定義した層。
ケーブル、コネクタ、電圧レベルなどがこれに当たります。

2. **データリンク層**
隣接ノード間のデータ転送の信頼性を確保する層。
エラーチェック、フレーム化、フロー制御などを行う層です。

3. **ネットワーク層**
異なるネットワーク間のデータ転送を管理します。
ルーティング、アドレス付け、パケット転送などを行います。

4. **トランスポート層**
エンドツーエンドの通信を管理し、信頼性を提供します
データの分割と再構成、エラーチェック、フロー制御などを行います

5. **セッション層**
通信セッションの管理を提供します。
接続の確立、維持、終了を行います。

6. **プレゼンテーション層**
データ形式の変換、暗号化、圧縮を行います。
データの表現方法を標準化するための層です。

7. **アプリケーション層**
ネットワークサービスを直接提供します。
Webブラウザやメールクライアントなどが使用するプロトコル（HTTP、SMTPなど）です。

この7層モデルは、各層の機能を明確に分けることで、ネットワーク設計やトラブルシューティングを体系的に行うための指針を提供します。

### TCP/IPモデル
TCP/IPモデル（インターネットプロトコルスイート）は、インターネットの実際の運用に基づいて開発されたプロトコルのフレームワークで、OSIモデルよりも**実装に即しています**。4層で構成されており、OSIモデルの機能よりもシンプルです。

1. **ネットワークインターフェース層**
ハードウェアレベルでのデータ転送を行う層です。
ネットワークアダプタやインターフェース、データリンクプロトコルなどが該当します。
OSIモデルの物理層とデータリンク層に相当します。

2. **インターネット層**
異なるネットワーク間のデータパケットを転送します。
IP（Internet Protocol）によるアドレッシングとルーティングを行います。
OSIモデルのネットワーク層に相当します。

3. **トランスポート層**
エンドツーエンドの通信を確立し、信頼性を提供します。
TCP（Transmission Control Protocol）やUDP（User Datagram Protocol）が該当します。
OSIモデルのトランスポート層に相当します。

4. **アプリケーション層**
ネットワークアプリケーションの実装します。
HTTP、SMTP、DNSなどのプロトコルがあります。
OSIモデルのアプリケーション層、プレゼンテーション層、セッション層の機能を統合しています。

TCP/IPモデルは、インターネットのプロトコルの実装に密接に関連しており、OSIモデルと異なり実際のプロトコル設計や運用に即した形で使われています。
TCP/IPモデルの簡潔さと現実的なアプローチは、インターネットの発展に大きな役割を果たしました。

### 両モデルの比較
| 機能 | OSIモデルの層 | TCP/IPモデルの層 |
|:-:|:-:|:-:|
|**データの物理的な転送**|物理層、データリンク層|ネットワークインターフェース層|
|**ネットワーク間のデータルーティング**|ネットワーク層|インターネット層|
|**エンドツーエンドの通信**|トランスポート層|トランスポート層|
|**アプリケーションサービスの提供**|アプリケーション層、プレゼンテーション層、セッション層|アプリケーション層|

両モデルは、ネットワーク通信を理解し設計するための基本的なツールとして、異なる観点からネットワークの機能を整理しています。
OSIモデルは教育的で詳細な理論を提供し、TCP/IPモデルは実装の現実的なアプローチを示しています。

# ネットワーク層プロトコル
## IP（インターネットプロトコル）
### IPv4とIPv6
#### IPv4
32ビットのアドレス空間を持ち、約43億のアドレスを提供します。
典型的な形式は`192.168.0.1`のように、4つのドットで区切られた数字です。
#### IPv6
128ビットのアドレス空間を持ち、膨大な数のアドレスを提供します。
典型的な形式は
`2001:0db8:85a3:0000:0000:8a2e:0370:7334`
のように、コロンで区切られた16進数です。

### パケットのフラグメンテーション
フラグメンテーションとは、データを小さなパケットという単位に分割し、異なるネットワークで再構築するプロセスです。
IPv4では`ルータ`で分割され、IPv6では`エンドポイント`で分割が行われます。
これは、ネットワークの最大伝送単位（MTU）を超えないようにするためです。

## ICMP（インターネット制御メッセージプロトコル）
### エラーメッセージと診断
ICMPは、ネットワークのエラーメッセージを報告し、診断情報を提供するためのプロトコルです。
メッセージの種類には、`宛先到達不能メッセージ`や`有効期間超過メッセージ`などがあります。

### pingやtracerouteの役割
- ping: 特定のIPアドレスへの到達性をテストし、応答時間を測定するツールです。ICMPのエコー要求と応答を利用します。
- traceroute: パケットが目的地に到達するまでに通過するルータを追跡し、各ホップの遅延を測定するツールです。

# トランスポート層プロトコル
## TCP（伝送制御プロトコル）
### コネクション型通信の信頼性
TCPは、信頼性の高い通信を提供するコネクション型プロトコルです。データの順序制御やエラーチェックを行い、パケットの紛失や順序違いを防ぎます。3ウェイハンドシェイクによる接続確立と終了も特徴です。

### フロー制御と輻輳制御
#### フロー制御: 送信者と受信者間でデータ送信の速度を調整し、受信側が処理できる速度でデータを受け取るようにする仕組み。
#### 輻輳制御: ネットワークの混雑を検知し、送信レートを調整することで、パケットロスを防ぐ技術。TCP RenoやTCP Vegasなどのアルゴリズムが使用されます。
## UDP（ユーザデータグラムプロトコル）
### コネクションレス型通信の軽量性
UDPは、軽量で高速なコネクションレス型の通信プロトコルです。信頼性よりも速度を重視し、パケット順序やエラーチェックを行いません。そのため、リアルタイム性が求められるアプリケーションに適しています。

### リアルタイムアプリケーションでの利用
- ストリーミングメディア: 音声や動画のリアルタイム配信で使用され、多少のパケットロスを許容します。
- オンラインゲーム: 低遅延が求められるため、UDPが適しています。

# アプリケーション層プロトコル
アプリケーション層プロトコルは、ネットワーク通信を利用するさまざまなアプリケーションに直接関わるプロトコルです。これらのプロトコルは、エンドユーザーにサービスを提供するための規則や手順を定義しています。

## HTTP/HTTPS
### Web通信の基本プロトコル
**HTTP（Hypertext Transfer Protocol）** は、WebブラウザとWebサーバー間でWebページをやり取りするための基本的なプロトコルです。リクエストとレスポンスの形で通信を行い、主にテキスト、画像、動画などのリソースを取得します。

- HTTPリクエストの例: **GET /index.html HTTP/1.1**
- HTTPレスポンスの例: **HTTP/1.1 200 OK**

### HTTPとHTTPSの違い
**HTTPS（Hypertext Transfer Protocol Secure）** は、HTTPにSSL/TLSによる暗号化を加えたプロトコルです。
これにより、通信の機密性とデータの整合性が保証され、第三者による盗聴や改ざんのリスクを低減します。

**HTTPS通信の流れ**
1. クライアントがサーバーにHTTPS接続を要求。
2. サーバーがSSL/TLS証明書をクライアントに送信。
3. クライアントが証明書を検証し、セッションキーを生成。
4. セッションキーを使って暗号化された通信を開始。

## FTP（ファイル転送プロトコル）
**FTP（File Transfer Protocol）** は、ネットワークを介してファイルを転送するためのプロトコルです。FTPサーバーに接続し、ファイルのアップロードやダウンロードを行います。

### アクティブモードとパッシブモード
FTPには2つの通信における接続モードを提供しています。

#### アクティブモード
クライアントがサーバーにコントロール接続を確立し、サーバーからクライアントにデータ接続を確立します。
これにより、サーバーがクライアントの指定したポートに接続します。

#### パッシブモード
クライアントがサーバーにコントロール接続を確立し、クライアントがサーバーから提供されたポートにデータ接続を確立します。サーバーは受け身で待機します。

## SMTP（シンプルメール転送プロトコル）
**SMTP（Simple Mail Transfer Protocol）** は、電子メールを送信するためのプロトコルです。メールクライアントからメールサーバーに送信、メールサーバー間での転送、そして最終的に受信者のメールサーバーに配信します。

### SMTPの流れ
1. クライアントがサーバーに接続。
2. MAIL FROM コマンドで送信者を指定。
3. RCPT TO コマンドで受信者を指定。
4. DATA コマンドでメール本文を送信。

### POP3、IMAPとの違い
#### POP3（Post Office Protocol 3）

メールサーバーからメールをダウンロードしてローカルに保存します。
ダウンロード後、通常サーバーからメールは削除される仕組みになっています。
ローカルでオフラインでもメールを閲覧することが可能ですが、メールが一元管理されず、複数デバイスでの同期が困難です。

#### IMAP（Internet Message Access Protocol）

メールをサーバー上に保持し、複数のデバイスからリモートでメールを操作する方法です。
メールはサーバー上で管理され、クライアントは同期を行う仕組みです。
メールの一元管理が容易で同期もスムーズですが、オフラインでのメール操作には制限があります。

## DNS（ドメインネームシステム）
**DNS（Domain Name System）** は、ドメイン名とIPアドレスの対応を管理するプロトコルです。ユーザーが覚えやすいドメイン名（例: www.example.com ）を入力すると、それをIPアドレス（例: 192.0.2.1）に変換して、目的のホストにアクセスできるようにします。

### DNS問い合わせの流れ
1. ユーザーがドメイン名を入力。
2. クライアントがDNSリゾルバに問い合わせ。
3. DNSリゾルバが権威DNSサーバーに問い合わせ。
4. 権威DNSサーバーからIPアドレスを取得し、クライアントに返答。

### DNSリゾルバの役割
DNSリゾルバは、ユーザーの問い合わせを受け取り、DNSサーバーに対して問い合わせを行い、得られたIPアドレスをクライアントに返す役割を持ちます。DNSリゾルバは、問い合わせの結果をキャッシュすることで、後続の同一問い合わせに対する応答を迅速に行うことができます。

### DNSキャッシュ
一度解決されたドメイン名とIPアドレスのペアを一時的に保存し、同じドメイン名への後続の問い合わせを迅速に処理します。

### TTL（Time To Live）
キャッシュが保持される時間を指定します。
TTLが切れると、再度DNSサーバーに問い合わせを行います。

# 終わりに
この記事では、ネットワークプロトコルの基本概念から、ネットワーク層、トランスポート層、アプリケーション層の各プロトコルの役割までを解説しました。
プロトコルは、異なるデバイスやシステムが情報を交換するための重要な基盤であり、**これらを理解することでネットワーク通信の仕組みを深く知ることができます!**

ネットワーク技術は日々進化しており、新しいプロトコルや技術が登場しています。
今後も新しい知識を積極的に学び続け、ネットワークの理解を深めていくことが大切です。本記事を通じて、ネットワークプロトコルに関する基本的な理解が得られたことを願っています。