ネットワーク知識入門3

# 概要
ネットワークについて、知識不足を感じたため、学習をし始めました。
業務は、Web系のコーディングがほとんどですが、原点を理解しないと知識が深まらないため、さらに学んでいきます。

[ネットワーク知識入門1](https://qiita.com/saburo555/items/e14c2524a12d9b8d061f)
[ネットワーク知識入門2](https://qiita.com/saburo555/items/b7fee560e091e7d8c009)

# TCP/IP
### TCP/IPとは
デファクトスタンダードである。
4つのレイヤで構成されている。（OSIは7つだった。）

![スクリーンショット 2024-09-13 22.57.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2889120/085c7800-7cde-73e8-f332-0f7208f23afe.png)
出典：[OSI参照モデルとTCP/IPの階層の違いとは？](https://www.sbbit.jp/article/cont1/12099)

TCPを使う場合は、トランスポート層のデータ + ヘッダを「TCPセグメント」、インターネット層のもの「IPデータグラム」という。UDPを使う場合は、「UDPセグメント」になる。

### インターネット層
**【IP】**
データの送り元と送り先をつなぐ通信経路全体のこと。（エンドツーエンド）
IPアドレスを通じて、エンドツーエンドの通信を行う。
IPアドレスは一意！
論理アドレスなので、状況によって変化する。MACアドレスは変化しない、物理アドレス。

**特徴**
コネクションレス型：送信するだけ。届いたかどうかは感知しない。
ベストエフォート型：保証はしない通信タイプ。
データ回復もしない。
→ スピーディーにやり取りを行うことができる

**種類**
主流はIPv4（32ビット）だが、枯渇してきているので、IPv6（128ビット）が進められている。

**ヘッダ**
送信元、宛先のIPなどで、20バイトで定義される。

- フラグメンテーション（識別子・フラグ・グラグメントオフセット）
MTU（マキシマム トランスミッション ユニット）を超えている場合、分割してから送信されること。

　　識別子：もともと同じデータは同じ識別子を持たせる
　　フラグメ：データがまだあるかという情報を持たせる
　　オフセット：どのデータなのか

→ 端末に付くごとに、分割して、組み立てを繰り返すので、効率が悪い。そのため、あまり使われていない。
⇨ TCPセグメンテーションが補っている！！

- サービスタイプ
データの優先度、データの処理の重みを伝えるもの

- TTL
ルータを中継できる回数。
データが転送し続けるのを防ぐもの。

- プロトコル
プロトコルの番号データ、ドメイン、IPアドレスの取り決めなどをしている

**デフォルトゲートウェイ**
ノードは世界との入り口で、その外のネットワークの出入り口になるが、デフォルトゲートウェイ。
ネットワークAの中にノード① → **ルーター**　→ ネットワークBの中のノード②

ちなみにルーターは複数のポートを持っている。
そのため、複数のIPアドレスを持つができる。

**【ARP】**
データを送信する際に、宛先のIPアドレスはわかってもMACアドレスがわからない場合がある。
それを助けるのが、ARPの役割。
IPアドレスからMACアドレスを調べる一連の処理は、アドレス解決という。

:::note info
イメージ
MACアドレスは端末の住所、IPアドレスはネットワークの住所。
:::

**ブロードキャスト**
> 同じネットワークにいる全員に対して同じ内容を送り付けること

引用：[「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word17.html)

⇨ ARPがブロードキャストで、 MACアドレスを要求するリクエストを送る。該当のMACアドレスをユニキャスト（宛先のノードから送信元へのやり取り 1:1）で送る。

一度送信したことあるMACアドレスは送信元のノードがARPテーブルなるもので保管する。

**【ICMP（インターネット コントロール メッセージ プロトコル）】**
IPはエラーとかを教えてくれないので、その点を補うプロトコル。

**ping**
特定のノードと通信できるかを確認する際のコマンド。
エコー要求を送信し、エコー応答が帰ってきたらOK.

```
$ ping [option] [対象のIPアドレスまたはドメイン名]
```

**traceroute**
ノードまでの経路を取得するコマンド。
Windowsだと、trancert。

```
$ traceroute [対象のIPアドレスまたはドメイン名]
```

### トランスポート層
**【ポート番号】**
アプリケーションを特定するための番号。

- ウェルノウンポート：予約済みポート番号

| ポート番号 | プロトコル | TCP/UDP | 概要 |
|------------|------------|---------|------|
| 20, 21 | FTP | TCP | File Transfer Protocol. データ転送(20)とコントロール(21)用のポートがある。ファイル転送の基本プロトコル。 |
| 22 | SSH | TCP | Secure Shell. 暗号化された安全なリモートアクセスを提供。Telnetの代替として広く使用。 |
| 23 | Telnet | TCP | 平文でのリモートアクセス。セキュリティ上の理由から現在は非推奨。 |
| 25 | SMTP | TCP | Simple Mail Transfer Protocol. メール送信用の標準プロトコル。 |
| 53 | DNS | TCP/UDP | Domain Name System. ホスト名とIPアドレスの変換を行う。主にUDP使用、大きなパケットはTCP。 |
| 67, 68 | DHCP | UDP | Dynamic Host Configuration Protocol. IPアドレスなどのネットワーク設定を自動配布。67はサーバー、68はクライアント用。 |
| 69 | TFTP | UDP | Trivial File Transfer Protocol. 認証なしの簡易ファイル転送。主に初期設定やファームウェア更新に使用。 |
| 80 | HTTP | TCP | Hypertext Transfer Protocol. Web通信の基本プロトコル。平文での通信。 |
| 110 | POP3 | TCP | Post Office Protocol version 3. メール受信用。通常、メールをサーバーからダウンロード。 |
| 123 | NTP | UDP | Network Time Protocol. ネットワーク上の時刻同期に使用。精度の高い時刻同期が可能。 |
| 143 | IMAP | TCP | Internet Message Access Protocol. メール管理用。メールをサーバー上で管理可能。 |
| 161, 162 | SNMP | UDP | Simple Network Management Protocol. ネットワーク機器の監視・管理用。161は一般クエリ、162はトラップ(警告)用。 |
| 443 | HTTPS | TCP | HTTP over SSL/TLS. 暗号化されたWeb通信。現在のWeb標準。 |
| 520 | RIP | UDP | Routing Information Protocol. 小規模ネットワークでの経路制御に使用。より大規模なネットワークではOSPFやBGPが一般的。 |

- 登録済みポート：サーバー側で決められているポート
- ダイナミックポート：自由に使用可能

:::note info
トランスポート層は、ポート間で問題なく通信をするために定義されるプロトコルの集まり
:::

**【TCP・UDP】**
**TCP**
TCPは確実に！
コネクション型で情報を送り合いながら、通信をする方式を取る。
セグメント単位で分割して、制御、送信する。
（例）SYN：1(接続していい？) → ACK:1（いいよ！）
上記でコネクションを確立できる。

TCPセグメンテーション：データを分割する
MSS一度に運べる量

トランポート層のルールで、あらかじめ小さいデータを送るようMSSを決める。ヘッダーのオプションに書く。
MTU（各ノードで決められている）に引っかからないようにする。

シーケンス番号：送信元から宛先に送信する分割を元に戻すための番号。
ACK番号：宛先から、受信したいシーケンス番号を送る。

TCPには応答タイマーが設定され、送信元は確認が受信できなかったら、失敗と見て、データを送り直す。つまり再送制御を行う。

応答を待たずに、どんどん送信することができるようにウィンドウ制御を行う。
データをバッファに預け、通信速度を早くする。溜めておけるサイズは、ウィンドウサイズという。

サーバーが高負荷状態の時に、バッファがウィンドウサイズを下げて、フロー制御（受信側）する。

ウィンドウサイズ以外に、輻輳ウィンドウがあり、徐々に確認するためにデータを増やしながら送る。これは送信側が判断する。
上記をスロースタートという。輻輳ウィンドウは、ウィンドウサイズを超えない。

**UDP**
UDPは速度！
UDPは確認とか行わず、ただ送るだけ。単純構造。
データ単位はデータグラム。動画ストリーミングやIP電話などで使われる。
メールとかは向いていない。