ネットワークがどのように通信されるか(初学者向け)

# はじめに

私たちが使うパソコンやスマホがどのように通信しているか、意識したことはありますか？この記事では、インターネットやネットワークの通信方法を簡単に説明します。

下記の内容を読んでも分からなかった方は、最後の**まとめ**を読んでいただいたら理解が進むと思います。

:::note info
専門用語の意味が厳密ではない場合があります。
:::

# 準備知識

具体例を挙げながら説明するので、準備知識は全てを理解できなくても大丈夫です。まずは各層の名前と役割だけを目を通しておきましょう。

## OSI参照モデル(準備知識)

OSI（Open Systems Interconnection）参照モデルは、ネットワーク通信を7つの階層に分けて説明するモデルです。私たちが普段利用しているスマホやパソコンなどのデバイスにはこのモデルが採用されています。

1. **物理層（Physical Layer）**: ケーブルや信号の物理的特性
2. **データリンク層（Data Link Layer）**: 隣接する機器間のデータ転送
3. **ネットワーク層（Network Layer）**: 異なるネットワーク間のデータ転送
4. **トランスポート層（Transport Layer）**: エンドツーエンドのデータ転送
5. **セッション層（Session Layer）**: セッションの確立、管理、終了
6. **プレゼンテーション層（Presentation Layer）**: データの変換、暗号化
7. **アプリケーション層（Application Layer）**: ユーザーと直接やり取りするアプリケーション

# パケットとデータの流れ(準備知識)

ネットワーク通信では、データはパケットという単位で送受信されます。パケットは、ヘッダとデータから構成されます。ヘッダは各層の制御情報を含み、データは実際に送信する内容です。

通信の流れを理解するために、メール送信を例にして説明します。

# 具体例

ここからは実際の具体例を用いて、ネットワークがどのように通信されるかを説明していきたいと思います。
具体例は1つだけですが、メールの送受信をとりあげます。

## メール送信の具体例

メール(データ)送信時の流れは以下の通りです。

1\. **アプリケーション層**:
   - **メール作成**: ユーザーがメールを作成し、送信ボタンを押します
   - **パケット生成**: メールの内容（データ）とSMTPリクエスト（ヘッダ）でパケットを生成します。これを[packet-A]とします

※パケット...データとヘッダが入った小包をイメージしてください。
※ヘッダ...コンピューターが理解できる住所のような情報が入っているとイメージをしてください。

<br>

2\. **プレゼンテーション層**:
   - **データのエンコード**: [packet-A]をエンコードし、新しいヘッダを付加して[packet-P]を生成します

※エンコード...人間が読める言語を機械が読める言語に変換するようなイメージです。

<br>

3\. **セッション層**:
   - **セッション確立**: [packet-P]にセッション管理情報を付加して[packet-S]を生成します

※セッション...ネットワークを繋ぐパイプのようなものをイメージしてください。

<br>

4\. **トランスポート層**:
   - **TCP接続確立**: [packet-S]を分割し、TCPヘッダを付加して[packet-T]を生成します

※TCP...これもネットワーク間で安全にデータをやり取りするための情報だとイメージしてください。

<br>

5\. **ネットワーク層**:
   - **IPアドレス付加**: [packet-T]にIPアドレスを付加して[packet-N]を生成し、ルータを通じて送信します

※IP...私たちでいう住所のようなものだとイメージしてください。

<br>

6\. **データリンク層**:
   - **フレーム作成**: [packet-N]をフレームにカプセル化し、MACアドレスを付加して[packet-D]を生成します

※フレームにカプセル化...データリンク層が理解できる形に変換するというイメージです。
※MACアドレス...デバイスの品番のようなイメージです。

<br>

7\. **物理層**:
   - **データ送信**: [packet-D]を電気信号や光信号に変換して送信します

※電気信号や光信号...俗に言う、電波と一緒のようなものです。

## メール受信の具体例

データ受信時の流れは以下の通りです。

1\. **物理層**:
   - **信号受信**: 送信元から受信した信号をデータに変換し、データリンク層に送ります

<br>

2\. **データリンク層**:
   - **フレーム解析**: [packet-D]を受信し、エラーチェックを行い、IPパケットを抽出します

※[packet-D]から[packet-N]を取り出し、それをネットワーク層に送るようなイメージ

<br>

3\. **ネットワーク層**:
   - **IPパケット解析**: [packet-N]からTCPセグメントを抽出します

※[packet-N]から[packet-T]を取り出し、それをトランスポート層に送るようなイメージ

<br>

4\. **トランスポート層**:
   - **TCPセグメント再構築**: [packet-T]を再構築し、データをセッション層に渡します

※[packet-T]から[packet-S]を取り出し、それをセッション層に送るようなイメージ

<br>

5\. **セッション層**:
   - **セッション管理**: [packet-S]を解析し、データをプレゼンテーション層に渡します

※[packet-s]から[packet-P]を取り出し、それをプレゼンテーション層に送るようなイメージ

<br>

6\. **プレゼンテーション層**:
   - **データデコード**: [packet-P]をデコードし、データをアプリケーション層に渡します

※デコード...エンコードの逆
※[packet-P]から[packet-A]を取り出し、それをアプリケーション層に送るようなイメージ

<br>

7\. **アプリケーション層**:
   - **メール受信**: メールサーバーがメールを受信し、ユーザーに表示します

※[packet-A]を解析し、それを私たちが読めるように画面に表示させてくれているイメージです

# まとめ

色々と専門用語が多くて想像がしにくかった人もいるのではないのでしょうか。

超簡単に言うと、私たちがデータを入力し送信すると、パソコンやiphoneの各層でデータを処理し、最終的にはそれが電波などの信号に変換されます。私たちの目に見えてない、その辺に飛んでいる電波にはデータなどの情報が含まれているということですね。その電波などの信号を近くにあるルーター(信号受信機)が受け取り、送信先(データを送られた人)の近くにあるルーターまでデータを運んでくれます。その電波などの信号を受け取ったパソコンやiphoneは、各層の処理によって、信号を私たちが目に見えているような形に変換することで、私たちはそのデータの中身を見ることができます。

<br>

エンジニアとして経験が豊富な方にとっては、この記事の内容に突っ込みたくなる箇所が沢山あったのではないのでしょうか。情報技術に関する知識が全くない方向けに作成した記事でありますので、その辺はご了承を。。。

## 余談

パソコンはWi-Fiに繋がっていないと通信できませんよね。これは電波などの信号をルーターが受け取ってくれることでデータをやり取りできるからです。

近くにルーターなどの信号受信機がない(Wi-Fiに繋がっていない)スマホなどのデバイスはどうやってデータをやり取りしているのでしょうか。電波を受けっとてくれる機器がないと電波に含まれているデータが消えてしまい通信できませんよね。

正解はルーターの代わりに電線が電波を受け取ってくれています。通信キャリア(ドコモなど)が設置している電波基地局という大きなルーターのような場所に私たちの電波情報を電線が運んでくれているんです。なので実際Wi-Fiに繋がっていなくともスマホは通信できるわけです。

逆にパソコンは通信キャリアなんかと契約していないので、Wi-Fiルーターがないと外部と通信できないと言うわけです。

※ルーター...世間のみんなはWi-Fiルーターとも読んでいる(気がする)