ネットワークについて自分なりにまとめる

## はじめに
- ネットワークについて、あまり詳しくないところがあるため、自分なりに整理してみます
- かなり雑です
- 随時更新予定です
- 間違い等があればご指摘ください

## 参考
### サイト
https://roadmap.sh/guides/what-is-internet

https://wa3.i-3-i.info/index.html

### 書籍
[図解まるわかり ネットワークのしくみ](https://amzn.asia/d/57Ev8C1)

↑この本が分かりやすくてオススメです。



## ネットワークとは
- コンピュータ同士でデータをやりとりする仕組み
- Webサイトでの情報収集とか、ファイルの共有などができる


### ネットワークの種類
- **プライベートネットワーク**：拠点内のコンピュータ間でのみやりとり可能なネットワーク
- **インターネット**：世界中のどのコンピュータ間でもやりとり可能なネットワーク

### ネットワークの構成
- **LAN** (Local Area Network)：拠点内のネットワーク
- **WAN** (Wide Area Network)：LAN同士の接続をするネットワーク

### インターネットの構成
- **ISP** (Internet Service Provider)：プロバイダ。NTTなどの事業者のこと
- **AS** (Autonomous System)：自律システム。大企業などの組織が管理している、インターネット上の領域
- ISPが複数のASを管理しているような感じ?

### ネットワーク機器
- ルータ
- L2スイッチ
- L3スイッチ



機器の働き：
1. データ受信：物理的信号を受信して、2進数に変換する
1. データの転送先の決定：データに付与されている情報をもとに、転送先を決定する
1. データ送信：2進数から物理的信号に変換して、送信する

<br>

- **インターフェース(ポート)**：PCとかルータにある接続口のこと
- **伝送媒体**：インターフェース同士をつなぐケーブルのこと
    - 光ファイバケーブルとか

### ネットワークの接続について
- ネットワークの接続には、物理的接続と論理的接続がある
    - 物理的接続：インターフェース、ケーブルなどの接続
    - 論理的接続：IPアドレス、サブネットマスクなどをインターフェースに設定すること

- **DHCP**：IPアドレスなどの設定を自動的に処理してくれる機能



## 通信について
### データの送受信
- データは双方向でやりとりされる
    - **リクエスト**：処理命令などの要求
    - **リプライ**：リクエストに対する応答

<br>

- **クライアント**：サービスを利用するコンピュータ
- **サーバ**：サービスを提供するコンピュータ


### ネットワークモデル
- ネットワークでの通信方法にはいろんな方法がある
    - **クライアント・サーバー方式**：クライアントとサーバでデータをやりとりする方法
    ![クライアント・サーバー](https://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Server-based-network.svg/200px-Server-based-network.svg.png "クライアント・サーバー方式")[^NetworkModel]
    
    - **P2P方式**：サーバを介さずに、クライアント同士で直接データをやりとりする方法
        ![](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3f/P2P-network.svg/200px-P2P-network.svg.png "P2P方式")[^NetworkModel]

[^NetworkModel]: [Wikipedia 「Peer to Peer」](https://ja.wikipedia.org/wiki/Peer_to_Peer) 


## ネットワークアーキテクチャ
- **ネットワークアーキテクチャ**：プロトコルがまとめられたもの
    - 現在は、**TCP/IP** というアーキテクチャが標準的に利用されている
- **プロトコル**：データのフォーマット、処理方法などの通信におけるルールのこと




### TCP/IPについて
- 4つの階層から構成されている
    - **アプリケーション層**：データのフォーマット、処理順などを定義する役割
        - HTTP, HTTPS
    - **トランスポート層**：データを対象のアプリに割り当てる役割
        - TCP, UDP
    - **インターネット層**：ネットワーク間でデータを転送する役割
        - IP
    - **ネットワークインターフェース層**：LAN, イーサネットのような物理的な接続する役割
        - LAN, Ethernet

- 階層ごとに、データの呼び方が異なるらしい
    - よく耳にする「パケット」は、インターネット層のデータを指すそう





## インターネット層
### IPについて
- **IP**：インターネット層のプロトコル。E2Eでデータを転送する
    - **E2E**(エンドツーエンド)：PCから別のPCにデータを転送する通信のこと
- バージョンによって異なるっぽい
    - **IPv4, IPv6**がある
- **IPヘッダ**：データの送信元、送信先のホストのIPアドレスが含まれているヘッダ


### IPアドレス
- 通信対象のホストを識別するための番号
    - ホストのインターフェースごとに割り当てられている
        - 同じPCなどでも、インターフェースが異なる場合はIPアドレスも異なる

<br>

- **8ビットの2進数(0~255)を10進数にした4つの数字を、`.`で区切ったもの**
    - 例：`192.168.1.1`
    - 2進数：(`11000000 10101000 00000001 00000001`)

    <img width=384 src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Ipv4_address_ja.svg/1920px-Ipv4_address_ja.svg.png">[^ipaddress]

[^ipaddress]:[Wikipedia 「IPアドレス」](https://ja.wikipedia.org/wiki/IP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)

<br>

- ネットワークの利用範囲によって、IPアドレスが異なる
    - **グローバルアドレス**：インターネットで利用するIPアドレス
    - **プライベートアドレス**：拠点内のプライベートネットワーク内で利用するIPアドレス
        - あらかじめ範囲が決められている
            - `192.168`から始まるアドレスなど



#### サブネットマスク
- IPアドレスは、ネットワーク部とホスト部から構成されている
    - **ネットワーク部**：ルータ、スイッチなどの番号
    - **ホスト部**：ホストのインターフェースの番号
- ネットワーク部とホスト部の区切りは、一定ではない
    - **サブネットマスク**によって決められる
        - IPアドレス同様、8ビットの2進数32桁から成る
        - 1が連続していくつか並んで構成される
            - `1`の部分がネットワーク部、`0`の部分がホスト部
        - サブネットマスクは、`1`の桁数を`/X`のように表す
            - 例：`192.168.1.1/24`


#### 特殊なIPアドレス

- ブロードキャストアドレス：ブロードキャストのIPアドレス
    - IPアドレスのホスト部が`255`の場合
    - IPアドレスが`255.255.255.255`の場合
        - リミテッドブロードキャストアドレス：ローカルネットワークのブロードキャストを自動的に指定できるIPアドレス


### データの宛先
- **ユニキャスト**：1つの送信先にのみデータを転送すること
    - Webの閲覧など
    <img width="256" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/Unicast.svg/1280px-Unicast.svg.png">[^cast]
- **ブロードキャスト**：同一のネットワーク上のすべてのホストに対して、同じデータをまとめて転送すること
    - ARP, DHCP
        <img width="256" src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/Broadcast.svg/1280px-Broadcast.svg.png">[^cast]
- **マルチキャスト**：送信先の特定のグループに所属するホスト達に対して、同じデータをまとめて転送すること
    - 動画配信、オンラインゲームなど
        <img width="256" src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Multicast.svg/1280px-Multicast.svg.png">[^cast]

[^cast]: [Wikipedia 「ユニキャスト」 ](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88)


### ICMP
- IPによる通信がちゃんとできているかを確認する、インターネット層のプロトコル
- IPパケットが破棄されたら、ICMPによって送信元にエラーレポートが送られる
- **pingコマンド**：ICMPエコー要求メッセージというもので、通信先と通信できているかを確認する

### ARP
- IPアドレスから、MACアドレスに変換する
    - **MACアドレス**：インターフェースの識別番号
    - イーサネットヘッダにカプセル化される

<br>

- IPアドレス：最終的なホストへのアドレス
- MACアドレス：ルータなどの経由地点のインターフェースのアドレス





## トランスポート層
### ポート番号
- 対象のアプリケーションを識別するための番号

<br>

- **ウェルノウンポート**：あらかじめ指定されているアプリケーションのポート番号
    - HTTP=80, HTTPS=443 など
- **登録済みポート**：GoogleとかMicrosoftなどの企業が登録しているアプリケーションのポート番号
- **ダイナミックポート**：クライアント側で動的に割り当てられるポート番号


### TCP
- 安全にデータを転送するためのプロトコル
- 3ウェイハンドシェイクという方法で、データ転送前に接続の確立をする
    <img width=256 src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Tcp_normal.svg/1280px-Tcp_normal.svg.png">[^3way]
- 安全性は担保されるけど、速度は遅い
    - Webの閲覧、ファイルの転送などに利用される

[^3way]: [Wikipedia 「3ウェイハンドシェイク」](https://ja.wikipedia.org/wiki/3%E3%82%A6%E3%82%A7%E3%82%A4%E3%83%BB%E3%83%8F%E3%83%B3%E3%83%89%E3%82%B7%E3%82%A7%E3%82%A4%E3%82%AF)


### UDP
- 届いたデータを適切なアプリケーションに振り分けるためのプロトコル
- TCPのようなデータの確認はしない
- 速度は速いけど、安全性は保証されない
    - ストリーミングサービス、オンラインゲームなどに利用される





## アプリケーション層
### DNS
- Webなどのドメイン名とIPアドレスを紐づけて管理する機能
    - **ドメイン名**：`xxx.com`などの人間が認識できるアドレス
    - IPアドレス：`192.168.1.1`などのコンピュータが認識できるアドレス

### DNSサーバ
- DNSの機能を利用できるサーバ

<br>

- **権威DNSサーバ**：ドメイン名とIPアドレスを管理しているサーバ
    - ルートサーバ、トップレベルドメインサーバ(.jp, .comなど)、各ドメインサーバのような階層で存在している
        <img width=512 src="https://upload.wikimedia.org/wikipedia/commons/f/f2/Structure_DNS.jpg">[^dns]
- **キャッシュDNSサーバ**：権威DNSサーバにアクセスして、IPアドレスを取得するサーバ

[^dns]:[Wikipedia 「Domain Name System」](https://ja.wikipedia.org/wiki/Domain_Name_System)

<br>

1. ユーザがドメイン名を指定して、ブラウザからキャッシュDNSサーバにリクエスト
1. キャッシュがなければ、ルートドメインから階層をたどって問い合わせを繰り返す
1. IPアドレスが特定できたら、ユーザに返される

## さいごに
ざっくりですが、それなりに理解することができました。
(参考の書籍の方が図解付きで分かりやすいのでオススメです)

次回はWebの仕組みについてまとめます。