『ネットワークはなぜつながるのか 第2版』読書まとめ
本記事は、メモをもとに「ブラウザでURLを入力してからサーバに届くまで」をWeb → DNS → Socket → TCP/IP → Ethernet(LAN) → ルータ → 回線/プロバイダ → BGP/IX → サーバ側 の順で整理したものです。
1. Webの入口:URI / HTTP
URI (Uniform Resource Idntifier)
-
URL:Web上の「資源(Resource)」を一意に指す識別子
例:https://example.com/index.html - ブラウザは基本的に HTTPリクエスト を送り、サーバは HTTPレスポンス を返す。
- リクエストでは、主に以下を使う
- メソッド(method):何をしたいか(例:GET/POST)
- URI:どの資源か
- レスポンスでは、主に以下を見る
- ステータスコード(status code):結果の分類
- Content-Type:中身が何か(HTML/JSON/画像など)
HTTPステータスコードの意味(大枠)
- 1xx:処理継続(informational)
- 2xx:成功(success)
- 3xx:別の場所へ誘導(redirection)
- 4xx:クライアント側の問題(client error)
- 5xx:サーバ側の問題(server error)
用語:リダイレクト(redirect)
3xxで「別のURLへ行って」と指示する仕組み。レスポンスヘッダの Location に移動先が入る。
2. IPアドレスとネットマスク:宛先の「範囲」を決める
IPアドレス (IP Address)
- IPアドレス:ネットワーク上の「相手 (ホスト)」を識別する番号
ネットマスク (Netmask)
-
ネットマスク:IPアドレスのうち「ネットワーク部」と「ホスト部」の境界を決める値
例:255.255.255.0(/24 と同等)
ネットワークアドレス / ブロードキャスト (Broadcast)
- ホスト部が全部 0 → ネットワークアドレス (ネットワーク自体を表す)
- ホスト部が全部 1 → ブロードキャストアドレス (そのネットワーク全体に送る)
3. DNS:名前 (ドメイン)からIPを引く仕組み
DNS (Domain Name System)
-
DNS:ドメイン名 (例:
example.com)を、IPアドレスに変換する仕組み
リゾルバ (Resolver)
- DNSクライアント (リゾルバ):OS側の機能として働き、DNS問い合わせを行う
- DNSクライアントは Socketライブラリ(後述)を使って問い合わせる
用語:権威DNS(Authoritative DNS)
そのドメインの正しい情報を持つDNSサーバ。
「上から辿って目的のDNSサーバを見つける」イメージ(階層構造)で整理。
4. Socket:アプリがネットワーク機能を呼び出す窓口
Socketライブラリ
- Socket:アプリケーションがOSのネットワーク機能を使うための窓口
- 代表的な呼び出し(クライアント側の流れ)
- socket():ソケット作成
- connect():接続(相手IP・ポートが必要)
- write()/send():送信
- read()/recv():受信
- close():切断
ディスクリプタ
-
ディスクリプタ:OSがソケット等を識別するための「番号(ハンドル)」
「ソケット作成でディスクリプタを得る」
ポート番号 (Port)
-
ポート番号:同じPC(同じIP)上の「どのアプリ宛てか」を識別する番号
- Web:80(HTTP)など
- メール:25(SMTP)など
- IANA(Internet Assigned Numbers Authority):ポート番号等を管理する機関
5. プロトコルスタック
プロトコルスタック (Protocol Stack)
-
プロトコルスタック:ネットワーク通信を層(レイヤ)で実装したもの
ポイント:- OSが主に制御を担当する層があり
- 実際の送受信は LANアダプタ(Network Interface / NIC) 側のハードウェアも関与する
用語:LANアダプタ(NIC)
デジタルデータを電気信号/光信号に変換してケーブルへ出す装置。
受信時は逆変換してOSへ渡す。
6. TCP / UDP:運び方の違い(信頼性と軽さ)
TCP(Transmission Control Protocol)
- TCP:信頼性を重視して「届いたことを確認」しながら送る
- 要点
- シーケンス番号(Sequence Number):順序管理
- ACK番号(Acknowledgement Number):到達確認
- 再送制御:届かなければ送り直す
- ウィンドウ制御(Window Control):ACKを待たずに複数送る(ただし受信側能力を超えない)
UDP(User Datagram Protocol)
- UDP:軽量で、到達確認などを基本的に行わない
- 用途例
- DNSの問い合わせなどの「制御用の軽い通信」
- 音声・映像など(用途次第で)遅延重視の通信
7. IP層でよく出る補助プロトコル:ICMP / ARP
ICMP(Internet Control Message Protocol)
-
ICMP:通信制御やエラー通知に使う
例:pingはICMPを使う
ARP(Address Resolution Protocol)
- ARP:同一LAN内で、IPアドレスに対応する MACアドレス を調べる
8. MTU / MSS:1回で運べる大きさの制約
MTU(Maximum Transmission Unit)
- MTU:1つのフレーム(パケット)で運べるデータの最大長(リンクごとに決まる)
MSS(Maximum Segment Size)
-
MSS:TCPが1つのセグメントとして運べるデータ最大長
(MTUからIP/TCPヘッダを引いた “実データ” の上限)
9. Ethernet(LAN):MAC・フレーム・誤り検出
MACアドレス(MAC Address)
- MACアドレス:LAN内で機器(正確にはNIC)を識別する番号
Ethernetフレームの要素(メモの要点)
- プリアンブル(Preamble):同期用のビット列
- SFD(Start Frame Delimiter):フレーム開始位置を示す
- MACヘッダ:宛先MAC / 送信元MAC / EtherType など
- FCS(Frame Check Sequence):誤り検出(ノイズ等で壊れていないか)
ハブ / スイッチの違い
- リピータハブ(Hub):入った信号を全ポートにばらまく
- スイッチ(Switch / スイッチングハブ):MACアドレステーブルを使って必要なポートへ転送
用語:MDI / MDI-X
RJ-45コネクタの送受信ピン配列の種類。
MDI-X はクロス結線に相当する動きを内部で行うことがある(機器による)。
10. ルータ:LANを越えて届ける(経路表・集約・分割)
ルータ(Router)の基本
- ルータ:IPアドレス(ネットワーク部)を見て「次に渡す相手」を決める
経路表(Routing Table)
- 経路表:宛先ネットワーク → 次ホップ(次に渡す先)を記録した表
-
デフォルト経路(Default Route):
0.0.0.0/0
どれにも当てはまらないとき、とりあえずここへ送る
アドレス集約(Route Aggregation)
- アドレス集約:複数の経路をまとめて表現し、経路表を小さくする考え方
フラグメンテーション(Fragmentation)
- フラグメンテーション:大きすぎるパケットを分割して運ぶ仕組み(経路上のMTU制約に対応)
11. NAT とプライベートアドレス:家庭LANの現実
プライベートIP(Private IP)
-
プライベートアドレス帯(代表)
10.0.0.0/8 ~ 10.255.255.255/8172.16.0.0/12 ~ 172.255.255.255/12192.168.0.0/16 ~ 192.168.255.255/16
グローバルIP(Global IP)
- グローバルアドレス:インターネット上で到達可能なアドレス
NAT(Network Address Translation)
-
NAT:プライベートIPを外へ出すときに、グローバルIP(+ポート)へ変換する仕組み
要点:「アドレス変換時にポート番号も関わる」点が重要
12. アクセス回線:ADSL / FTTH など
アクセス回線 (Access Line)
- アクセス回線 家庭/会社のLANとインターネットを結ぶ"入口"の回線
- 例:ADSL / FTTH / CATV / 電話回線 / ISDN
13. ADSL:変調・分離・収容(DSLAM / BAS / ATM)
ADSL(Asymmetric Digital Subscriber Line)
- ADSL:電話回線のメタル線を使って高速通信する方式
変調(Modulation)とQAM
- 変調:デジタル(0/1)を、回線で運べるアナログ信号に変換すること
-
QAM(Quadrature Amplitude Modulation):振幅と位相を組み合わせて表現量を増やす方式
(ASK + PSK の組み合わせとして整理)
スプリッタ(Splitter)
- スプリッタ:電話信号とADSL信号を分ける装置
DSLAM / BAS / ATM
- DSLAM:多数のADSL回線を収容する装置(電話局側にあるイメージ)
- ATM(Asynchronous Transfer Mode):セル(固定長)で運ぶ方式(ADSL内部で出てくる)
- BAS(Broadband Access Server):ATMセル等をインターネット側のパケットとして中継する装置
14. FTTH:光ファイバ(シングルモード)
FTTH(Fiber To The Home)
- FTTH:光ファイバを使ったアクセス回線
- シングルモード(Single Mode):信号の広がりが少なく、長距離向き
-
マルチモード(Multi Mode):コア径が太く、光が複数の経路で伝搬する方式。
距離が伸びるとモード分散(到着時間のズレ)が増えやすい。- 短距離向き(主に建物内配線やデータセンター内など)で使われることが多い。
15. PPP / PPPoE:認証・接続・カプセル化
PPP(Point-to-Point Protocol)
- PPP:1対1接続のためのプロトコル
PPPoE(PPP over Ethernet)
- PPPoE:PPPメッセージをEthernetフレームに入れて運ぶ方式
Discovery / トンネリング(Tunneling)
- Discovery:PPPoEで接続先(BAS等)を見つける手順
- トンネリング:あるプロトコルのデータを別のプロトコルの中に包んで運ぶこと
DHCP(Dynamic Host Configuration Protocol)
-
DHCP:IPアドレスなどのネットワーク設定を自動配布する仕組み
(PPP と DHCP の役割分担の文脈で登場)
16. プロバイダ内部:PoP / NOC / RAS
- PoP(Point of Presence):アクセス回線が集約される拠点(入口の設備群)
- NOC(Network Operations Center):運用・監視の中枢となる設備/組織
- RAS(Remote Access Server):ダイヤルアップ等で使われたアクセス収容装置
17. BGP / IX:インターネットは“事業者間接続”でできている
BGP(Border Gateway Protocol)
- BGP:プロバイダ同士が経路情報を交換し、どこへ流すか(経路制御)を決めるプロトコル
IX(Internet Exchange)
- IX:複数の事業者が相互接続するための接続点(インターネットの“交差点”)
18. サーバ側(構成・負荷分散・キャッシュ・プロキシ)
負荷分散(Load Balancing)
- DNSラウンドロビン:DNSが複数IPを返して負荷を分散する方式(単純でよく出る)
キャッシュサーバ(Cache Server)
- キャッシュ:一度取得したコンテンツを保存し、次回以降は高速に返す
プロキシ(Proxy)
- フォワードプロキシ:クライアント側に置く代理
- リバースプロキシ:サーバ側に置く代理(外部から見た“入り口”になることが多い)
- 透過プロキシ:利用者が意識せずに挟まる代理
CDN(Content Delivery Network)
- CDN:コンテンツを分散配置し、利用者に近い場所(キャッシュ)から配信して高速化する仕組み
19. サーバアプリの実装:同時接続を捌く
マルチタスク / マルチスレッド
- マルチタスク(プロセス):プロセス単位で並行処理
- マルチスレッド:同一プロセス内でスレッド単位に並行処理
サーバの基本API(メモの流れ)
-
socket → bind → listen → accept
- bind:自分のIP/ポートに紐づける
- listen:接続待ち状態にする
- accept:接続を受け付け、接続ごとのソケットを得る
コネクション識別(4タプル)
-
(送信元IP, 送信元ポート, 宛先IP, 宛先ポート) で接続を区別できる
(「TCP接続はこの組で識別」という整理)
20. CGI:サーバ側でプログラムを動かす
-
CGI(Common Gateway Interface):リクエストに応じてサーバ側プログラムを起動し、動的にレスポンスを生成する仕組み
※現代はアプリサーバ等に置き換わることが多いが、「動的生成」の原型として理解に役立つ
感想
- Before:TCP/IP、DNS、NAT、BGP…用語は知っているが, 頭の中で別々に存在していた.
- After:URL入力→HTTP→名前解決→ソケット→TCP→IP→Ethernet→ルータ→回線→ISP→BGP/IX→サーバ、という“配送ルート”として一本につながった. 今は「どの層の責務か」を意識して学べるようになったのが一番の収穫.
用語ミニ辞典(本文の頻出)
- URI:資源を指す識別子
- DNS / リゾルバ:名前→IPを引く仕組み / そのクライアント
- Socket / ディスクリプタ:OSのネットワークAPI / 識別番号
- Port:同一ホスト内の宛先アプリ識別
- TCP / UDP:信頼性重視 / 軽量重視
- MTU / MSS:リンクの上限 / TCPデータ上限
- ARP:IP→MAC解決
- FCS:フレーム誤り検出
- ルータ / 経路表 / デフォルト経路:次ホップ判断 / その表 / 0.0.0.0/0
- NAT:プライベート→グローバル変換(ポートも絡む)
- ADSL / FTTH:メタル回線 / 光回線
- PPPoE / Discovery / トンネリング:PPPをEthernetで運ぶ / 接続先探索 / 包んで運ぶ
- PoP / NOC:入口拠点 / 運用中枢
- BGP / IX:事業者間経路制御 / 相互接続点
- CDN:近くから配る高速化ネットワーク