【書評】3分間ネットワーク基礎講座

[［改訂新版］3分間ネットワーク基礎講座｜技術評論社](https://gihyo.jp/book/2010/978-4-7741-4373-6)を読んだので，その書評を書く．

## 本書の概要
[公式サイト](https://gihyo.jp/book/2010/978-4-7741-4373-6)の紹介文を引用する．
> 大好評「3分間ネットワーク基礎講座」が，内容を刷新して新登場です！おなじみ博士とネット君が，ネットワークのしくみを基礎の基礎から説明してくれます。「ネットワークの勉強は難しくて…」とお悩みの方でも，1講座3分の授業を読み進めていくことで，頭の中がすっきり整理されていくこと請け合いです。今回もやっぱり，「面白いから，わかりやすい！」「面白いから，よく身に付く！」を保証します！

なお，本書は[こちら](https://www5e.biglobe.ne.jp/aji/3min/)のwebサイトの内容を書籍化したものである．
参考：[令和の時代に 3分間Networking の Flash を再生させる 初心者 - Qiita](https://qiita.com/advanceboy/items/a13b7cae6f4e16b7711f)


## 前提
### 筆者について
- 大学4年生．
- 来年度から情報系（数理）の大学院に進学予定
- コンピュータサイエンスについてはあまり詳しくない
	- プログラミングの経験，数理とその関連分野（グラフ理論，最適化，アルゴリズムなど）の知識はある
	- 一方，ネットワーク，データベース，OS, etc.については勉強中．
### 読書の背景
- 情報系の大学院へ進学が決まり，ソフトウェアエンジニアにも興味があるので，コンピュータサイエンスを基礎から学びたいと考えた
- ネットワークについて前々から興味があった
### 本書を選んだ理由
ネットワーク関係でおすすめの本を調べると，[マスタリングTCP/IP 入門編（第6版） \| Ohmsha](https://www.ohmsha.co.jp/book/9784274224478/)がよくおすすめされていた．しかし，もう少し初歩的な書籍で全体像を掴んでから，きちんとした本に取り組みたいと考えた．そこで調べていたところ，[ネットワークエンジニアおすすめ本10選！初心者から経験者の勉強用参考書！ \| 若葉START](https://wakabastart.com/work/engineer758/)などで本書を見かけた．本書はAmazonレビューも多く，高評価だったので，選ぶことにした．2010年の本とのことで，情報が古いのではないかと懸念もしたが，本書で解説される「基礎」の部分は，古くなるものではないと考えた．



## 感想
読むのにかかった時間は合計9時間．読みながら適宜メモを取っていたので，思ったより時間がかかった．基礎がある人や，さらりと読むだけならもう少し早く読めたかもしれない．
### 良かった点
- 会話形式で，既出の概念やこれまでの流れをたびたび振り返ってくれたおかげで，理解しやすかった．
- ぱっと見中身の薄い本にも見えなくないが，基礎をきちんと解説してくれているので，時間が経った今でも十分ためになる内容だった．
### イマイチだった点
- 特にはなかったが，強いてあげるとすれば，補講の文字がすべて赤字で書かれており，やや読みづらかった．

### 次に読みたい本
ネットワークの全体像を掴めたので，マスタリングTCP/IPを読みたい．

## こんな人におすすめ
- ネットワークの基礎を学びたいが，コンピュータサイエンスの基礎がない人
- ネットワークの基礎を学びたいが，時間がない人
- ネットワークの基礎を学びたいが，難しい本が苦手な人

逆に，学部で講義を受けたことがある人などが復習のために読むには，会話形式がくどく感じるかもしれない．

## 各章ごとの自分のメモ
一応，各章ごとの自分のメモを残しておく．

<details><summary>各章ごとの自分のメモ</summary>

### 1章
- OSI参照モデル：ISOがプロトコルの標準化のために提唱したモデル．
	- ISO: International Standardization Organization；世界標準化機構
	- データ通信を7段階に分け，それぞれの段階の手順を示した．
- TCP/IPモデル：IETFが制定しているモデル．デファクトスタンダードになっている
	- IETF: the Internet Engineering Task Force
	- デファクトスタンダード：事実上の標準．
- カプセル化：通信に必要な情報を，送りたいデータに付加すること．
	- データと，必要なものを合わせたものをプロトコルデータユニット（PDU）という
	- 小包に例えると，運びたいものに，緩衝材や宛名をつけるようなもの
- LAN/ WAN
	- localとwideってなんか対応してないなって思った．local/global or narrow/wideが自然か?
- インターフェイス：コンピュータとパイプの間にある接続口

### 2章
- レイヤー1：物理層．電気・機械的な伝送を行う．
	- データ→信号→（ケーブルを通って）→電気信号→データ，まで
	- データ：ビットで表現されるもの．言ってしまえば数字の羅列．
	- ケーブル：銅線（UTP），光ファイバーなど
	- 信号変換機：NIC, DCEなど
	- 信号について
		- 電気信号/光信号
		- アナログ信号/デジタル信号
			- ビット表現と相性がいいデジタル信号が主に使われる
		- bps(bit per second)：通信速度の単位
	- 信号の問題
		- 減衰
			- 長距離間流れていると，信号が減衰して読み取りにくくなる．
			- 減衰してきたら，「増幅」という処理を挟む．
		- ノイズ・干渉
			- 熱雑音
			- クロストーク
			- 雷や無線
		- 衝突(コリジョン)
			- ケーブルに信号が流れている最中に別の信号を送ると衝突する
			- この対策はレイヤー2で．
			- 実は，ケーブルでは送信ケーブルと受信ケーブルが分かれているので，衝突は起こらない．衝突はハブで発生している．
	- ハブについて
		- ハブは信号を増幅できる
		- 複数の機器を繋げてネットワークを構築する
		- ハブとハブをつなぐことをカスケード接続という
		- ハブは受信した信号の制御は行わない．
			- 受信下ポート以外のすべてのポートに受信した信号を送信する（flooding）
				- 衝突の恐れあり
			- 衝突ドメインを小さくするには？→スイッチ
- レイヤー2：信号の届く範囲でのデータ伝送についての決まり
	- 信号の届く範囲：セグメントの範囲
		- マルチアクセスネットワークならハブで繋がっている機器全体
		- ポイントツーポイントなら2台
	- レイヤー1で使われているケーブルや信号によって，レイヤー2のルールも異なる．
		- が，簡単にいうとLAN用とWAN用とがある．
		- レイヤー3以降では，LAN，WANでも同じルールを使う
	- フレーミング：信号をビットに直し，意味を持たせること
		- フレーム：レイヤー2のPDUのこと
		- 同期通信
			- タイミングを合わせる信号（クロック信号）を常に送り続けて，タイミングを合わせる方式
		- 非同期通信
			- preambleという「始まりの合図」を送ってから，データ信号を送信する．preambleによってbitを読み取るタイミングを合わせる．
	- イーサネット（ethernet）：LANのデファクトスタンダード
		- preambleとして0, 1を交互に送る
	- アドレス：送信者（自分）と受信者とを特定するデータ（住所）
		- アドレスの3種類
			- ユニキャスト：1対1
				- ユニキャストアドレス：それぞれの機器が最低1つ持つユニークなアドレス
			- ブロードキャスト：1対全体（全体：同じセグメント内の全員）
				- ブロードキャストアドレス：全員共通で持ってる
			- マルチキャスト：1対多
				- マルチキャストアドレス：グループ番号のようなアドレス
	- アドレッシング：アドレスをどのように割り振るか
	- MACアドレス(media access control address)：インターフェイスに付けられた固定のアドレス
		- 48ビットの数字で16進数表示で12桁
			- 前6桁：ベンダーコード（インターフェースの製造元コード）
			- 後ろ6桁：ベンダー割り当てコード（製造番号）
	- イーサネットで使用するレイヤー2PDU
		- 宛先MACアドレス（48bit）＋送信元MACアドレス（48bit）＋タイプ（16bit）＋ペイロード（368-12000bit）＋FCS（32bit）
			- イーサネットヘッダー
				- 宛先MACアドレス
				- 送信元MACアドレス
				- タイプ：ペイロードの中で運ばれるデータの種類を特定する値
			- イーサネットトレーラー
				- ペイロード：運ばれるデータ．厳密には，レイヤー3PDU．
				- FCS：エラーチェック用ビット列．巡回符号方式（Cyclic Redundancy Check）．
					- 通信途中でのエラーが見つかれば，そのフレームは破棄．エラーの存在を送信者に伝えることもしない．
	- イーサネットの動作
		- ハブを使ったマルチアクセスネットワークの場合：受信したフレームのMACアドレスを見て，自分宛以外のものはすべて破棄する．
			- floodingへの対策
		- CSMA/CDアクセス制御：衝突を発生しないように信号のタイミングをずらす
			- CSMA/CD：carrier sense multiple acces/ collision detection
				- 誰も送信していない時に送信するようにする
				- 衝突したら，少し待って再送信する
					- 衝突が頻繁に起こると，効率がとても悪くなる
				- これは半二重通信であり，効率が悪い
			- 衝突をなくしているわけではなく，「なるべく衝突が起きないように」している
	- スイッチ：衝突を発生しないように信号が通る道を
		- MACアドレスフィルタリング：異なる宛先の信号どうしの衝突を無くす
			- まず，スイッチがMACアドレスとポートの組み合わせを「学習」する
			- その後，スイッチはフレームの宛先Macアドレスを見て，そのアドレスに紐づいたポートからのみフレームを送信する
				- ハブではこのような制御は行われず，全流ししてた
			- 感想： MACアドレスが多すぎたら制御大変そう．検索とか．LANで扱えるコンピュータの数が少ない前提ならうまくいきそう
		- バッファリング：同じ宛先の信号どうしの衝突を無くす
			- バッファ：一時的にデータを記憶しておく装置（メモリ）
			- 同じ宛先の信号がきたら，片方をバッファに避難させて，一つずつ送信の処理を行う．バッファがいっぱいになったら，送信をやめてもらうことにする
				- バックプレッシャー方式
				- IEEE802.3x
		- これらの機構のおかげで，衝突が防げる．つまりスイッチは衝突ドメインを分割できる．
	- 半二重通信(half-duplex)
		- 「誰かが送信中，自分が受信中は，他の人は自分に送信できない」，「自分が送信中は受信できない」通信方式のこと．
	- 全二重通信（full-duplex）
		- 同時に送受信できる方式
	- 現在では，全二重イーサネットが主要．
### 3章
- レイヤー2：セグメント内
- レイヤー3：セグメント同士（インターネットワーク）の話
- ネットワーク間の通信のためには，「アドレッシング」と「ルーティング」を考える．
	- アドレッシング
		- ネットワーク間を行き来するときに，どう住所を名付けるか．
	- ルーティング
		- ネットワーク間を行き来するときに，どういう経路で目的地に辿り着くか
	- これらについてのプロトコルがIP（Internet protocol）
- IPデータグラム = IPヘッダー＋ペイロード（レイヤー4PDUなど）
	- IPヘッダーには，IPアドレスが含まれる
- IPアドレス：IPというプロトコルによって定められた，論理アドレスのこと
	- 論理アドレス：位置情報をもつ
		- インターフェースを買い替えても変わらない
	- 物理アドレス：位置情報をもたない
		- イーサネット，MACアドレスなら，インターフェースの「企業番号」＋「製造番号」
			- これはインターフェースを買い換えれば変わる．
	- IPアドレスはネットワーク管理者が定める
	- IPアドレス＝ネットワークの番号＋ホスト番号（コンピュータの番号）
		- ネットワーク番号：全てのネットワークでユニークなアドレス
		- ホスト番号：（ネットワークの中で）コンピュータでユニークなアドレス
	- IPアドレスは（IPv4なら）32ビット．それを8bitごと4つの区間（オクテット）に分けて，それぞれを10進数表記するのが一般的．
	- ネットワークの番号：クラスフルアドレッシング．クラスレスアドレッシング
		- クラスフルアドレッシング
			- ICANNが定めるクラスでネットワークの番号を管理する方法．
			- IPアドレスに含まれるネットワークの番号とコンピュータの番号の桁数はICANNの定めるクラスによる．
		- クラスレスアドレッシング
			- クラスを各自が設定する．
			- 今はこれが主流．
			- プレフィックス長をIPアドレスと一緒に描くことで，ネットワーク番号が何桁かを伝える．
			- 例：`192.168.1.0/24`なら，ネットワーク番号が24bit（192.168.1まで），コンピュータ番号が32-24=8 bitとなる
				- ホスト番号の全bitが0：ネットワークアドレス（ネットワーク自体を指す）
				- ホスト番＝＝＝＝＝＝
	- DHCP(Dynamic Host Configuration Protocol)
		- DHCPサーバーは，（あらかじめ設定されたI）PアドレスプールからIPアドレスを選び，DHCPホストに割り当てる．
	- ARP(Address Resolution Protocol：アドレス解決プロトコル)
		- あて先のIPアドレスはわかったが，あて先のMAC アドレスがわからないときに，ARPを用いてそれを取得できる．
		- ARPでは，ARPテーブルというテーブルを送信者が保持しておく．ただし300秒でテーブルの書く情報は削除される（ことが多い）
			- ARPテーブル：あて先のIPアドレスとMAC アドレスとの対応表．ここに載っていない場合は，問い合わせて取得する
	- DNS(Domein Name System): ドメイン名（google.comなど）とあて先のIPアドレスとを対応させる分散型データベースシステム．

### 4章
- MACアドレスは次の送り相手のアドレス，IPアドレスは最終目的地
- コンバージェンス：全てのルータが同一の情報を持っている状態．収束している，ということ．
- スイッチ：衝突ドメインを分けられる．
	- フラッディングを防ぐ
- ルーター：ブロードキャストドメインを分けられる．
- IPアドレス（IPv4）は2012年に失くなる予想らしい．
### 5章
- TCP: Transmission Control Protocol
	- 確認応答：スリーウェイハンドシェイク
		- A：送るけど，準備OK？
		- B：準備OK．そっちはどう？
		- A：こっちもOK．
	- 送信データの先頭番号を記録しておいて，きちんと全て届いてるか確認する．
		- A：99番のデータを受け取ったので，次は100番ください
		- B：はい，100番送ります．
		- 効率化のために，ウインドウ制御も行う
- UDP: User Datagram Protocol
	- 確認応答もフロー制御もしない
	- 圧倒的に効率がいい．→ストリーミングに使われる
- ポート番号：（コンピュータ内で）アプリケーションを識別するために用いる番号．
- グローバルIP不足問題
	- NAT（Network Address Translation，ネットワークアドレス変換）
		- 内部ネットワークを作り，プライベートIPアドレスを割り振る．外部と通信するときには，プライベートIPをグローバルIPに変換する
		- 内部でもTCP/IP通信は行う
		- 弱点：同時接続数はグローバルIPの数まで
	- NAPT(Network Address Port Translation)
		- プライベートIPアドレス＋ポート番号をセットでグローバルIPアドレス＋ポート番号に変換することで，1つのグローバル番号で複数コンピュータで通信する
		- 弱点1：LAN内部に公開したいネットワークがある時→静的NAPT
		- 弱点2：FTP(File transfer protocol)→個別で対応
- TCP/IPではL5-7は一つのレイヤーとして実装される．届いたデータをどう処理するか，というレイヤー．
- レイヤー5：セッション層．アプリケーション同士の話し合い，ダイアログ制御．
- レイヤー6：プレゼンテーション層．ネットワーク転送用コードをASCIIにする，など．
- レイヤー7：アプリケーション層．webならHTTP，ファイル転送ならFTP，など．

PDU: Protocol Data Unit
L2PDU：送信元MACアドレス・宛て先MACアドレス(48bitずつ，企業番号24bitと製造番号24bit)など
L3PDU：送信元IPアドレス・宛て先IPアドレス(32bitずつ)など
L4PDU：送信元ポート番号・宛て先ポート番号(16bitずつ)など
</details>