2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「ネットワークはなぜつながるのか 第2版」を読んだよ

2
Posted at

『ネットワークはなぜつながるのか 第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のネットワーク機能を使うための窓口
  • 代表的な呼び出し(クライアント側の流れ)
    1. socket():ソケット作成
    2. connect():接続(相手IP・ポートが必要)
    3. write()/send():送信
    4. read()/recv():受信
    5. 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/8
    • 172.16.0.0/12 ~ 172.255.255.255/12
    • 192.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:近くから配る高速化ネットワーク
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?