← Blog

マスタリング TCP / IP 入門編 第 5 版 を読んだ

Dec 28, 2025 · 10 min

前置き

マスタリング TCP / IP 入門編 第 5 版 を読んだので章単位で要点をまとめます。ちなみにこの本は 2012 年に書かれたもので、購入した時点では既に第 6 版が出ていたっぽい...まぁいいでしょう。

1 章

OSI 参照モデルというものがある。これは通信に必要な機能を 7 つのレイヤーに分けてモデル化したもの。それぞれのレイヤーごとにプロトコルが存在する。

通信方式には回線交換方式とパケット交換方式がある。前者の場合は回線の数分のコンピューターしか通信ができないのに対して、後者は ONU 内部でキューに対してパケットが enqueue される。こうすることで複数のコンピューターからのパケットをキューに詰めて非同期で ONU から基地局に向けて通信が行われる。

深掘りしてみた

実際に日本在住の A さんからアメリカ在住の B さんにどうやってデータが届くのかをざっくりでいいから理解する。

コンピューター -> ルーター: PC などによって送信される 0, 1 のバイナリデータを変調することで、波 (電波) としてルーターに届く。

ルーター -> ONU: ここは LAN ケーブル (8 本 4 ペアの銅線) で繋がっている。また、下りの波 (受信データ) と上りの波 (送信データ) が混ざらないようにエコーキャンセル (上り下りで波が衝突するため、波の合成 / 分解を利用して必要な波長を計算する。) によって聞き分けている。

ONU -> 基地局: ONU でパケットはキューイングされ非同期で基地局に向かって光ファイバーの中を伝っていく。基地局までの間の光ファイバーの中は上りと下りで波長によって衝突が起きないようになっている。PON (passive optical network) というらしい。

基地局 -> 各種ルーター: 地域のルーター, 東京のルーター, 国際通信用ルーターと、数十回ほどルーターを経由する。基地局から先はコアネットワークという呼ばれる部分で、PON ではなく専用線でやり取りされる。

各種ルーター -> 海底ケーブル: この光は中継機を伝いつつアメリカまで届く。中継機の中にはエルビウムというレアアースが埋め込んであって、受信した光と同じ波長の光を放ってくれるらしい。

海底ケーブル -> B さんのコンピュータ: これまでのプロセスの逆。

2 章

現代では 1 章で習った OSI ではなく TCP / IP が普及している。また、TCP / IP は OSI の参照モデルにおけるレイヤーに対応するものとして、

OSI TCP / IP
アプリケーション層 アプリケーション層
プレゼンテーション層 アプリケーション層
セッション層 アプリケーション層
トランスポート層 トランスポート層
ネットワーク層 インターネット層
データリンク層 ネットワークインターフェース層
物理層 (ハードウェア)

という対応になっているようだ。後述の解説でより分かるが TCP / IP プロトコルは、実際にプロトコルをコンピュータに実装するにはどのようにプログラミングすれば良いかに主眼を置いて考えられている。

ネットワークインターフェース層: デバイスドライバー。ハードウェアである NIC を動かすために、OS とハードウェアの間の橋渡しをするドライバーだと思って良い。

インターネット層: IP プロトコル。コンピュータの OS に組み込まれるもの。

トランスポート層: TCP, UDP。TCP はコネクション型で UDP はコネクションレス型。HTTP/1.1 or HTTP/2 を使うと自動的に TCP を使っていることになる。ちなみに HTTP/3 は QUIC。リアルタイムサーバーである Photon とかだと UDP を使っている。アプリケーションレイヤーのプロトコルは Photon の独自規格である Photon Protocol というものらしい。ちなみに途中でパケットが消失したりすることを許容しないのが TCP。許容するのが UDP。

アプリケーション層: OSI の L5 ~ 7 がここに入る。HTTP, HTML, FTP, SSH など幅広い領域で様々なプロトコルが存在する。

3 章

MAC アドレス

NIC に焼き込まれており、ユニークな値 (とされている)。データリンクに接続されているノード (例えば今この記事を書いている MacBookAir) を識別するのに利用されている。仮にユニークじゃなくても同一データリンク内部に存在しなければ大丈夫。

イーサネット

有線接続における規格。LAN ケーブル等のもイーサネット規格の一つ。同軸ケーブルや光ファイバーケーブルなどもそれに該当する。LAN ケーブル = イーサネットと勘違いしている場合も多いらしい。

4 章

IP の話。IP は L3 ネットワーク層。ネットワーク層とデータリンク層の関係は、仮にホスト A とホスト B で通信する場合、データリンク層はホスト A とルーターの間のイーサネットのような 1 区間の通信を提供する役割。対してネットワーク層はホスト A とホスト B の区間全体の通信をて供する役割。データリンク層は切符、ネットワーク層は旅程表として例えられている。

IP はコネクションレス型。コネクションが必要な場合はトランスポート層で TCP に任せれば良いという話。

IP アドレス

IPv4 は 8bit の正の整数値で表される。IP アドレスはネットワーク部とホスト部に分けられる。ネットワーク部は接続されている全てのセグメントで被らないようにする必要がある。ホストは同一セグメント内で被らないようにする必要がある。

192.168.128.10/24 というのがある場合、192.168.128 がネットワーク部。10 がホスト部。24 は先頭から何 bit までがネットワーク部かを表している。

ブロードキャストアドレス

同一データリンクに接続された全てのホストにパケットを送信するためのアドレス。IP アドレスのホスト部の bit を全て 1 にするとブロードキャストアドレスになる。

ブロードキャストにはローカルブロードキャストとダイレクトブロードキャストがある。前者は、ブロードキャストを行うホストが属するリンク内のホスト全てにパケットを送信する。後者は、指定したネットワーク部に属するホスト全てにパケットを送信する。

CIDR

CIDR はクラスに縛られず、任意の bit 長の IP アドレスを配布可能にする仕様のこと。これまではクラス単位で組織に IP が払い出されていた。クラスはネットワーク部がここまでと決まっているため、実際にはそんなにホストを使わないのに大量確保してしまって無駄になるというケースも多かったらしい。サブネットマスクによって /24 のようにホスト部を決められるようになるとだいぶ無駄も少なくなったらしい。

グローバルアドレス / プライベートアドレス

これはここからここまでが private というふうに決まっている。また、private to global な変換技術を NAT というらしい。

MTU

MTU 最大転送単位 とのこと。データリンクによって MTU は異なるらしい。例えば IP は 65535 オクテット (= バイト) つまり 64 MiB。イーサネットは 1500 オクテット。

ちなみに、データリンクの上限を超えたデータサイズの場合はホストやルーターがデータの分割をして送る。終点のホストが分割されたデータの再構築をする。

ただこれだと TCP の時に分割されたデータが一つ死んだら終わりという状況になるため、PMTU という、通信経路上でデータ分割が必要にならない最大 MTU の探索が行えるようになった。

ちなみに IPv6 において PMTU は最小で 1280 となっている。

5 章

DNS に問い合わせをするホストやソフトウェアをリゾルバという。

DHCP

動的に IP アドレスを割り当てるプロトコル。DHCP でも固定の IP アドレスを割り当てることも可能。家庭だとルーターが DHCP サーバーを兼ねている。

NAT

NAT は先ほども書いたようにプライベート IP アドレスとグローバル IP アドレスを変換してくれるもの。IP だけではなく TCP, UDP のポート番号も付け替える NAPT というものもあるらしい。ポートの付け替えができることで、同一 PC だが別ポートでやり取りしたいような場合に便利。

IP トンネリング

IPv6 のネットワーク A, C がある。しかし、間の B は IPv4 にしか対応していない。このような場合に A のヘッダに対して IPv4 ヘッダを添加することで B を通過可能にしている。これが IPv6 over IPv4。

Mobile IP

移動中に DHCP によって毎回 IP が切り替わるのであれば、TCP を利用した通信が死に続けるということになる。Mobile IP はこれが起きないようにする技術らしい。ホームエージェントと外部エージェント間でトンネリングしてパケットを転送する仕組み。

6 章

TCP, UDP、つまりトランスポート層の話。このレイヤーはポート番号を見る。例えばクライアントから http リクエストがあった場合、inetd (インターネットデーモン) がリクエストを受け付ける。TCP の接続要求パケットのヘッダーの宛先ポートを見て、80 なら自身をfork して httpd としてコネクションを確立する。また、アプリケーションから TCP, UDP を利用する場合は、OS が用意しているソケット API を利用する。

またポートは 1 ポートで複数のコネクションを確立することが可能。また、サーバーつまりサービスを提供する側はポートが固定されているが、クライアント側は固定である必要はない。そのため動的に OS が利用するポートを選ぶようにすることも多い。

7 章

ルーティングの話。あまり興味ないのでざっと見て終わり。

8 章

TCP / IP のアプリケーション層のプロトコルの話。

SMTP: Simple Mail Transfer Protocol。TCP を用いている。

9 章

セキュリティの話。

ファイアウォール

規定されたパケットのみを通過させる -> パケットフィルタリング

アプリケーションを介在させて不正な通信を遮断する -> アプリケーションゲートウェイ

IDS

侵入検知システム。ファイアウォールはポリシーに合致した通信は許可する仕組み。それでカバーしきれなかった通信を監視して、問題のあるアクセスをしているものを検知したりする。例えばパケットやログの監視。