よく分かるけどやっぱり覚えられないTCP/IP

# 導入
基本情報、応用情報と勉強する上で多少は単語を覚えたものの、
かなり曖昧なままなので、改めて勉強しようと考えた。

概念的な理解は深まったものの、単語の量が多すぎて覚えられない…
というのがタイトルの理由。

:::note info
記事内に誤った理解などありましたらご指摘ください。
あくまで自己学習用のため、誤りでない補足追加は対応しないことがあります。
:::

## 参考書籍
[『仕組み・動作が見てわかる　図解入門TCP/IP』](https://amzn.asia/d/i3kJ59H)
少し前に使われていた技術とかの話もあり、その部分はやや冗長にも感じたが、
かなり丁寧に説明しているので初学者にもおすすめできる書籍。

今時ネットにいくらでも情報はあり、最近はChatGPTに聞いて勉強することもできるが、
情報の信頼度や体系的な知識を得やすいという面で、やはり書籍が良い。


# ネットワークの基本
## 通信方式
### 回線交換方式
電話のような方式。現在誰かと電話中だったら他の人がかけても通話はできない。
これだと待ち時間が発生してしまうから効率があまりよくない。

### パケット交換方式
パケットという小さい単位に分割して少しずつデータを送る。
最終的に大きなデータを届けることになっても、回線を占有されないので
複数の機械が同時にやりとり(通信)できる。

パケットにはヘッダーとして情報が付与される。
・分割したデータをまとめるための情報
・生存時間
・送信元アドレス
・宛先アドレス

パケットは必ずしも宛先に届くわけではない
同じパケットが様々な道筋で宛先を目指し、迷子になるものもある。
生存時間を過ぎると消滅する。


## プロトコルとは
通信における決まり事。
上述したヘッダーの情報などもプロトコルの一部。
URLで見覚えのある「http」もプロトコルの一種。

用途に応じて様々なプロトコルが存在する。
プロトコルを分類するための概念が階層モデル。

### ネットワークの階層モデル
・TCP/IP参照モデル
・OSI参照モデル
の2つに大別される。

実用性重視という側面もあり、
以下に示すTCP/IP参照モデルの方が広く使われている。

| 階層 | 階層名 |
|:-:|:-:|
| 第4層  | アプリケーション層  |
| 第3層  | トランスポート層  |
| 第2層  | インターネット層  |
| 第1層  | ネットワークインターフェース層  |

各階層ごとにヘッダーがある。
なので最終的に家のルーターを通じてネット回線を伝わっていくデータとしては

「元データ」
+「第4層のヘッダー」
+「第3層のヘッダー」
+「第2層のヘッダー」
+「第1層のヘッダー」

のような感じになっている。ヘッダを追加することを「カプセル化」と呼ぶ。


### コネクション
各階層のプロトコルには「コネクション型」と「コネクションレス型」がある。
コネクション型は時間がかかるが、確実にデータ転送ができる。

#### コネクション型
通信できるかの確認が入ってからデータをやりとりする。
TCPはトランスポート層に位置するコネクション型のプロトコル。

AからBへの通信が発生する場合、
A → B「通信したいです」
A ← B「了解。こちらからも通信したいです」
A → B「了解。」

という「3ウェイハンドシェイク」と呼ばれる
やりとりを行ってから実際にデータを送信する。

#### コネクションレス型
UDPがイメージとしては強い。
IPv4やイーサネットもコネクションレスのプロトコル。
「データ送りますね！えいや！」でデータを送る。
通信が早い代わりに、届いているかの確認はできない。


# 物理層
## イーサネット
### 半二重通信
通信経路が送信or受信で固定される。
受信中に送信はできない。逆もしかり。

#### CSMA/CD
Carrier Sense Multiple Access with Collision Detection

半二重通信でつながっている2つの機械が互いに同時に送信しようとしたとき、
衝突を検知してランダムな時間待つ。
高速通信に対応できないので今はあまり使われない。

### 全二重通信
送信の伝送路と受信の伝送路が別で存在する。
そのため、送信/受信が双方向に可能。

## Wi-Fi
### 周波数帯域
2.4GHzと5GHzが主。最近は6GHzとかもあるらしい。
2.4GHzの方が障害物に強い。(波の回折)

「帯域」とあるように、ぴったり2.4GHzではなく、
ある程度の幅を持たせてそれを何分割かしてチャネルとして使っている。

#### 高速化技術
##### ショートガードインターバル
直接波と反射波の干渉を軽減するためのもの。

##### チャネルボンディング
複数のチャネルを結合して使用することで伝送速度を上げる。
(同じ時間幅での伝送量が増える。)

##### MIMO
送信アンテナ/受信アンテナを増やすことで伝送速度を上げる。


# データリンク層
## イーサネット
データリンク：隣接する機器との間に論理的な伝送路を作ること

### フレームフォーマット
・プリアンプル
・宛先/送信元MACアドレス
・タイプ
・FCS(誤り検出)

#### MACアドレス
##### I/Gビット
ユニキャスト or マルチキャスト

##### U/Lビット
ユニバーサルアドレス or ローカルアドレス

ユニバーサルアドレスの場合、原則としては一意だが、
ベンダの使い回しなどにより、被りが発生する場合もある。

### L2スイッチ
試験では「スイッチングハブ」の名前で出てくる。

#### L2スイッチング
次の機器にうまくパケットを送信するために、
宛先/送信元MACアドレスを切り替える機能のこと。

## Wi-Fi
電波という不安定な伝送媒体でどう安定させるかがフレームフォーマットに出ている。
詳細は割愛

### Wi-Fiの通信方式
#### CSMA/CA
Carrier Sense Multiple Access with Collision Avoidance

送受信ができないWi-Fiアンテナで、前述のCSMA/CDとは違い
データの衝突を「回避する」ための仕組み。

データの再送信が何度か発生したとき、RTS/CTSモードへ移行する。
Request To Send(送信要求)
Clear To Send(送信許可)

アクセスポイントからCTSが出た後、RTSを送った機器だけがデータを送信できる

### Wi-Fi端末がつながるまで
アソシエーション → 認証 → 共有鍵生成 → 暗号化通信

#### 暗号化通信


##### WEP
脆弱性があったので現在は使用されていない。
Nintendo DSはこの方式でしか接続できず、Wi-Fiにただ乗りされる、
みたいな話が昔ニュースになっていたのをふと思い出した。

##### WPA2
AESという暗号化アルゴリズムを使用している。2024年現在の主流はこれ。
「総当たり攻撃」に対応できていないなど脆弱性も見つかっている。

##### WPA3
AES-256に対応している。
SAEハンドシェイクという認証処理。
などによりWPA2の脆弱性に対応している。


## ARP
Address Resolution Protocol

ネットワークにおけるアドレスは2つだけ。
・MACアドレス
・IPアドレス

IPアドレス ⇔ MACアドレス
の紐付けをしているプロトコルがARP。
ARPによりTCP/IP通信ができた。

ブロードキャストでARP Requestを送信
できたARPテーブルをキャッシュ

# ネットワーク層
## IPv4
Internet Protocol version 4

### フレームフォーマット
気になったやつだけ
<dl>
  <dt>フラグメントオフセット</dt>
  <dd>小分けにされたパケットの何番目か</dd>
  <dt>TTL(Time To Live)</dt>
  <dd>経由するルーターの数。0になったら破棄される。</dd>
</dl>

### IPv4アドレス
#### プライベートIPv4アドレス
組織内で自由に割り当てられるアドレス。
| 開始 | 終了 | サブネットマスク |
|:-:|:-:|:-:|
| 10.0.0.0  | 10.255.255.255  | 255.0.0.0  |
| 172.16.0.0  | 172.31.255.255  | 255.24.0.0  |
| 192.168.0.0  | 192.168.255.255  | 255.255.0.0  |

#### ループバックアドレス
127.0.0.1
127.0.0.8
いわゆるlocalhost


### IPv6
IPv4が埋まった時、より長いアドレスが必要になる…



---------------
以降現在執筆中