TCP/IP構造と通信

## OSIとTCP/IP構造
![截屏2024-03-22 17.41.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941840/51d32fee-8cbe-09da-efe2-fd1d85c952e8.png)<br>

OSI参照モデルとTCP/IPプロトコルスタックの対応関係を示しています。<br>
OSIモデルはデータ通信のための抽象的なモデルで、7つの階層（レイヤー）から成り立っています。<br>
一方、TCP/IPプロトコルスタックはインターネットで実際に使用されているプロトコルの集まりで、4つの階層から構成されています。

### TCP/IPの４層構造
- アプリケーション層：OSIモデルのアプリケーション層、プレゼンテーション層、セッション層に相当します。HTTP、FTP、SMTPなどのプロトコルが含まれます。 
- トランスポート層：OSIモデルのトランスポート層に相当します。TCPやUDPがこの層で動作します。
- インターネット層：OSIモデルのネットワーク層に相当します。IPプロトコルがこの層で主に使用されます。
- ネットワークインターフェース層：OSIモデルのデータリンク層と物理層に相当します。EthernetやWi-Fiなどの技術がこの層で使用されます。

この図は、OSIモデルとTCP/IPプロトコルスタックがどのように対応しているかを理解するのに役立ちます。<br>
ただし、実際のインターネット通信ではTCP/IPプロトコルスタックが使用されており、OSIモデルは教育や概念理解のために便利な参照モデルとして位置づけられています。

## TCP/IP通信
![截屏2024-03-22 13.39.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941840/456e9c21-56bd-f535-57b4-64997208b062.png)

送信と受信のプロセスについて、TCP/IPモデルの階層構造に従って示しています。<br>
### 送信側
#### アプリケーション層（Application）
  データパケット送信の起点であり、アプリケーション層のメッセージはHTTPリクエストや電子メールなどがあります。
- 代表のプロトコル：HTTP、FTP、SMTP
- 代表の設備：Webサーバー、メールサーバー、Gateway

#### トランスポート層（Transport）
アプリケーション層のメッセージがトランスポート層に渡され、ここでTCPまたはUDPが使用されます。TCPを使用する場合、トランスポート層はメッセージにTCPヘッダー情報 **（赤い部分）** を追加し、TCPデータパケットを形成します。
- 代表のプロトコル：TCP、UDP
- 代表の設備：Firewall、Load Balancer

#### インターネット層（Internet）
TCPデータパケットはさらにインターネット層に渡され、ここでIPヘッダー **(青い部分)** が追加されます。これにはソースIPアドレスとデスティネーションIPアドレスなどの情報が含まれ、IPデータパケットを形成します。
- 代表のプロトコル：IP、ICMP、ARP
- 代表の設備：ルータ

#### ネットワークインターフェース層（Network Interface）
最後に、IPデータパケットは物理ネットワーク（Ethernet、Wi-Fiなど）を介して送信されるために、ネットワークインターフェース層に送られます。このプロセスでは、Ethernetヘッダーなど、他のネットワークインターフェース関連のヘッダー情報 **（緑部分）** が追加されることがあります。
- 代表のプロトコル：Ethernet
- 代表の設備：NIC、Modem

### 受信側
####  ネットワークインターフェース層（Network Interface）
 データパケットが物理ネットワークを介して受信側のネットワークインターフェース層に到着します。
#### インターネット層（Internet）
データパケットはネットワークインターフェース層からインターネット層に移動し、ここでIPヘッダーが削除され、トランスポート層（TCP/UDP）のデータパケットが解析されます。
#### トランスポート層（Transport）
データパケットはさらにトランスポート層に移動し、ここでTCP/UDPヘッダーが削除され、元のメッセージ内容が復元されます。
#### アプリケーション層（Application）
最後に、メッセージがアプリケーション層に到着し、アプリケーション（例えばWebサーバー）がこれらのデータを処理します。

## 類比説明
TCP/IP通信プロセスを、工場がケーキを製造して顧客に届けるプロセスに例えると以下のようになります：<br> 
#### アプリケーション層（Application）
![截屏2024-03-23 7.08.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941840/aab1ba47-4924-fa55-44fa-b12c449c330d.png)

原料（データ）を利用して、ケーキ(顧客の要求のデータ)を製造します（例えば、Webページのリクエストや電子メールなど）、そして目的地のタグを準備します（例えば、ウェブサイトのアドレスや電子メールアドレスなど）。<br>
それから、次の部門（トランスポート層）へ分割と包装の準備を委ねます。アプリケーション層は、製品（データ）のタイプと最終顧客の要求を特定します。<br>

#### トランスポート層（Transport）
![截屏2024-03-23 7.13.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941840/615df69d-263f-9d7d-a210-417af64b193f.png)

全体のケーキ（顧客の要求のデータ）を管理可能な小片（データパケット:size < MTU）に切り分け、各ピースに番号とケーキの完全な情報をマークして（データの順序と完全性を保証します）。<br>
それから、これらの小片が安全に到着することを保証します（特定の受信プログラムを識別するためにポート番号を設定することによって）、さらに輸送部門（ネットワーク層）へ送出の準備をします。

#### インターネット層（Internet）
![截屏2024-03-23 7.15.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941840/b7956999-e487-6d84-30dd-d712aad9050b.png)

各ケーキのピース（データパケット）を包装し、具体的な配送先アドレス（宛先IPアドレス）と送出元のアドレス（送信元IPアドレス）を貼り、顧客への配送ルート（ルーティング）を計画します。<br>
これらの小包（データパケット）は、現在、物流部門（リンク層）によってさらに処理される準備が整っています。<br>

####  ネットワークインターフェース層（Network Interface）
![截屏2024-03-23 7.22.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941840/aff7c7cb-33a9-0103-50f2-3ec9661f85ad.png)

ローカルエリアで、物流ラベルの具体的なアドレス（MACアドレス）に基づき、各小包（データパケット）を実際に顧客の玄関前に配送するか、より遠い地域へ転送する責任を持ちます。<br>
この層では、データパケットが電気信号または無線信号に変換され、物理的なネットワーク媒体（例えば、イーサネット、Wi-Fi）を通じて送信されます。