1
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?

Webエンジニアが「マスタリング TCP/IP 入門編」を読んで理解した、知っておくべきネットワークの基礎知識

1
Posted at

はじめに

Webエンジニアとして日々開発をしていると、「なぜHTTPSはSSL/TLSの上に成り立っているのか?」「TCPとUDPはどう違う?」「DNSって何をしているの?」といった疑問に直面することがあります。

フロントエンドやバックエンドの開発をする上で、ネットワークを深く知らなくても動くコードは書けます。しかし、トラブルシューティングの場面や、パフォーマンス改善・セキュリティを意識した設計をする場面では、ネットワークの基礎知識が非常に重要になってきます。

そこで今回は、ネットワーク入門書の定番中の定番である 「マスタリング TCP/IP 入門編(第6版)」 を読んで学んだことを、Webエンジニア目線で整理してまとめました。

「難しそう...」と敬遠していた方にも、読んで損はないと感じてもらえるよう、できるだけ噛み砕いて解説していきます!

この本を読もうと思ったきっかけ

開発をしていて、「なんとなく動いている」という状態が続いていることに気づきました。たとえば:

  • fetch()でAPIを叩いているが、裏側でどんなやり取りが起きているか知らない
  • CORSエラーが出たとき、なぜそれが起きているか仕組みから説明できない
  • HTTPSとHTTPの違いを「暗号化されている/いない」以上のレベルで説明できない

こうした「なんとなく」をなくしたくて手に取ったのが本書です。

ネットワークの基本:プロトコルって何?

プロトコルとは「通信のルール」

ネットワークで最初に出てくるキーワードが プロトコル(Protocol) です。

プロトコルとは、コンピュータ同士が通信するための取り決め(ルール) のことです。人間に例えるなら「日本語で話す」「最初に挨拶する」といった会話のルールに相当します。

コンピュータは機種やOSが異なっても、同じプロトコルに従えば通信できます。このプロトコルを標準化することで、世界中のコンピュータが通信できる インターネット が実現しています。

標準化機関の存在

ネットワークの標準化は主に以下の機関が担っています。

機関名 役割
IETF(Internet Engineering Task Force) インターネットプロトコルの標準化(RFC発行)
ISO(国際標準化機構) OSI参照モデルなどを策定
IEEE 有線・無線LANの規格(Ethernetなど)を策定

Webエンジニアが日常的に扱うHTTP、TLS、DNSなどはすべて RFC(Request for Comments) という文書で定義されています。気になる仕様があればIETFのサイトで原文を確認できます。

OSI参照モデルとTCP/IPモデル

OSI参照モデルとは

ネットワークの機能を 7つの層(レイヤー) に分けて整理したモデルです。

レイヤー番号 層の名前 役割の概要
7 アプリケーション層 HTTPやDNSなど、ユーザーに近い通信
6 プレゼンテーション層 データの形式変換・暗号化
5 セッション層 通信の開始・終了管理
4 トランスポート層 TCPやUDP、信頼性のある通信
3 ネットワーク層 IPアドレスによるルーティング
2 データリンク層 MACアドレスによる同一ネットワーク内通信
1 物理層 ケーブルや電気信号などの物理的な通信

TCP/IPモデルとの対応

実際のインターネットでは TCP/IPモデル(4層) が使われています。

OSI参照モデル          TCP/IPモデル
-------------------    -------------------
7. アプリケーション層  |
6. プレゼンテーション層 |→ アプリケーション層(HTTP, DNS, FTPなど)
5. セッション層        |
-------------------    -------------------
4. トランスポート層    →  トランスポート層(TCP, UDP)
-------------------    -------------------
3. ネットワーク層      →  インターネット層(IP, ICMP)
-------------------    -------------------
2. データリンク層      |→ ネットワークインターフェース層
1. 物理層              |   (Ethernet, Wi-Fiなど)
-------------------    -------------------

Webエンジニア目線のポイント
HTTPSを使うとき、実際には「HTTP → TLS → TCP → IP → Ethernet」という順番でデータが包まれて(カプセル化されて)送信されています。これを意識するだけで、ネットワーク周りのトラブルをどの層で起きているかに切り分けやすくなります!

IPアドレスとルーティング

IPアドレスとは

IP(Internet Protocol) は、インターネット上の住所にあたる仕組みです。現在は IPv4IPv6 が並行して使われています。

IPv4

  • 32ビットで表現(例:192.168.1.1
  • 約43億個のアドレスが使える
  • しかしインターネットの普及でアドレスが枯渇しつつある

IPv6

  • 128ビットで表現(例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 約340澗(かん)個のアドレスが使える(事実上無限)
  • 現在普及が進んでいる

サブネットマスク

IPアドレスは ネットワーク部ホスト部 に分かれています。どこまでがネットワーク部かを示すのが サブネットマスク です。

IPアドレス:  192.168.1.10
サブネット:  255.255.255.0(= /24)

ネットワーク部:192.168.1
ホスト部:      10

同じネットワーク部を持つコンピュータは 同じネットワーク(サブネット) に属します。

ルーティング

異なるネットワーク間でデータを届ける役割を担うのが ルーター です。ルーターは ルーティングテーブル をもとに、次にどこへパケットを転送するかを決定します。

Webエンジニア目線のポイント
AWSやGCPのVPC(Virtual Private Cloud)の設定で出てくる「サブネット」「ルートテーブル」「インターネットゲートウェイ」は、すべてこのIP・ルーティングの概念が土台になっています。インフラ設定が苦手な方もここを理解すると一気に見通しが良くなります!

TCPとUDP:信頼性の違い

TCP(Transmission Control Protocol)

TCPは 信頼性のある通信 を実現するプロトコルです。

TCPの特徴

  • コネクション型:通信前に接続を確立する(3ウェイハンドシェイク)
  • 順序保証:データが正しい順番で届くことを保証
  • 再送制御:パケットが失われた場合は再送する
  • フロー制御・輻輳制御:ネットワークの混雑に合わせて送信量を調整

3ウェイハンドシェイク

TCPの接続確立は以下の3ステップで行われます。

クライアント           サーバー
    |                    |
    |---  SYN  -------->|   (1) 「接続したいです」
    |                    |
    |<-- SYN/ACK --------|   (2) 「OK、こちらも準備OKです」
    |                    |
    |---  ACK  -------->|   (3) 「了解しました、通信開始します」
    |                    |
    |===== データ転送 ===|

HTTPSでの通信フロー
Webブラウザがhttpsサイトを開くとき、実際には以下の順番で処理が走ります。

  1. DNSでIPアドレスを解決
  2. TCPの3ウェイハンドシェイク
  3. TLSハンドシェイク(証明書の検証・暗号化方式の合意)
  4. HTTPリクエスト送信

これを知っていると「ページ表示が遅い」ときの原因特定がしやすくなります。

UDP(User Datagram Protocol)

UDPは 高速性を優先した、信頼性を保証しない プロトコルです。

UDPの特徴

  • コネクションレス型:接続確立なしでデータを送信
  • 順序保証なし:データが届く順番は保証されない
  • 再送なし:失われたパケットは再送されない
  • 高速:オーバーヘッドが小さい

TCPとUDPの使い分け

用途 使うプロトコル 理由
Webページ表示(HTTP/HTTPS) TCP データの正確性が必要
ファイル転送 TCP 欠損なく届ける必要がある
ビデオ通話・ゲーム UDP 多少欠損してもリアルタイム性を優先
DNS問い合わせ UDP(主に) 1往復で済む短いやり取りなのでTCPは不要
動画ストリーミング UDP(QUIC) 遅延を最小化するため

HTTP/3とQUIC
最新のHTTP/3はTCPではなく QUIC(UDP上のプロトコル) を採用しています。TCPの3ウェイハンドシェイクとTLSハンドシェイクを統合することで、接続確立の遅延を大幅に削減しています。Webパフォーマンスを意識する上で注目の技術です!

DNS:ドメイン名とIPアドレスの変換

DNSとは

DNS(Domain Name System) は、人間が読みやすいドメイン名(例:example.com)を、コンピュータが扱うIPアドレス(例:93.184.216.34)に変換する仕組みです。

名前解決の流れ

https://example.com にアクセスするとき、裏側では以下の流れで名前解決が行われます。

1. ブラウザのDNSキャッシュを確認
        ↓(キャッシュになければ)
2. OSのDNSキャッシュを確認
        ↓(キャッシュになければ)
3. フルサービスリゾルバー(プロバイダや8.8.8.8など)に問い合わせ
        ↓
4. ルートDNSサーバーに問い合わせ
        ↓
5. TLDサーバー(.comを管理)に問い合わせ
        ↓
6. 権威DNSサーバー(example.comを管理)に問い合わせ
        ↓
7. IPアドレスが返ってくる → ブラウザがHTTPリクエストを送信

主なDNSレコードの種類

レコード種別 役割
A ドメイン → IPv4アドレス
AAAA ドメイン → IPv6アドレス
CNAME ドメイン → 別のドメイン(エイリアス)
MX メールサーバーの指定
TXT テキスト情報(SPF, DKIMなど)
NS ドメインのネームサーバーの指定

Webエンジニア目線のポイント
独自ドメインをVercelやNetlifyにデプロイする際、「CNAMEレコードを追加してください」という手順が出てきますよね。これはDNSの仕組みを理解していれば「ドメインに別名(エイリアス)を設定しているんだな」とすぐに理解できます。

HTTPとHTTPS:Webの土台

HTTP(HyperText Transfer Protocol)

HTTPはWebブラウザとWebサーバー間の通信プロトコルです。

HTTPのバージョン比較

バージョン 特徴
HTTP/1.0 1リクエストごとにTCP接続を切断
HTTP/1.1 Keep-Aliveで接続を維持(デフォルト)、パイプライン化
HTTP/2 マルチプレキシング(1つのTCP接続で複数のリクエストを並行処理)、ヘッダー圧縮
HTTP/3 QUICベース、TLSと統合、接続確立の高速化

HTTPのリクエスト/レスポンス構造

【リクエスト】
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html

【レスポンス】
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234

<!DOCTYPE html>
<html>...

HTTPS(HTTP Secure)

HTTPSは TLS(Transport Layer Security) によってHTTP通信を暗号化したものです。

TLSが実現する3つのこと

  1. 暗号化:通信内容を第三者に盗聴されても解読できない
  2. 認証:通信相手が本物のサーバーであることを証明書で確認できる
  3. 完全性:通信中にデータが改ざんされていないことを保証できる

TLSハンドシェイクの概要

クライアント                        サーバー
    |                                  |
    |-- ClientHello(使える暗号方式) -->|
    |<-- ServerHello(選んだ暗号方式) --|
    |<-- Certificate(サーバー証明書) --|
    |<-- ServerHelloDone ---------------|
    |                                  |
    |-- 証明書の検証(CAによる署名確認)  |
    |                                  |
    |-- ClientKeyExchange(鍵交換) --->|
    |-- ChangeCipherSpec -------------->|
    |<-- ChangeCipherSpec --------------|
    |===== 暗号化通信スタート =========|

証明書エラーへの理解
ブラウザで「この接続はプライベートではありません」と表示されるのは、TLSの証明書認証で問題が発生したときです。証明書の有効期限切れ・CAに信頼されていない自己署名証明書などが原因です。TLSの仕組みを知っていると、このエラーの意味が正確に理解できます。

NATとポート番号

NATとは

NAT(Network Address Translation) は、プライベートIPアドレスをパブリックIPアドレスに変換する技術です。

家庭内のルーターは代表的なNAT機器です。

【家庭内ネットワーク(プライベートIP)】
192.168.1.2(PC)  ─┐
192.168.1.3(スマホ)─┤→ ルーター(NAT) → グローバルIP: 203.0.113.1 → インターネット
192.168.1.4(タブレット)─┘

複数の機器が1つのグローバルIPアドレスを共有できるため、IPv4アドレスの枯渇問題の緩和にも役立っています。

ポート番号

IPアドレスが「家の住所」なら、ポート番号は「部屋番号」に相当します。1台のサーバーが複数のサービスを同時に提供できるのはポート番号のおかげです。

よく使われるポート番号

ポート番号 プロトコル 用途
80 HTTP Webサーバー(暗号化なし)
443 HTTPS Webサーバー(TLS暗号化あり)
22 SSH リモートログイン
25 / 587 SMTP メール送信
3306 MySQL データベース
5432 PostgreSQL データベース
6379 Redis KVSキャッシュ

この本を読んで感じたこと・学び

1. 「なんとなく」が「なるほど」に変わる

毎日使っているHTTPS通信やDNSの仕組みを、ちゃんと理解していなかったことに気づきました。本書を読むことで、「なんとなく動いている」状態から「なぜ動いているのかが分かる」状態になれた気がします。

2. トラブルシューティングの切り口が増える

ネットワーク関連のエラーが出たとき、「どの層で何が起きているのか」を考えながら原因を絞り込めるようになりました。例えばDNSの名前解決に失敗しているのか、TCPの接続が確立できていないのか、HTTPのレスポンスに問題があるのか、それぞれ調査の手順が変わります。

3. クラウドインフラへの理解が深まる

AWSのVPC設定(サブネット、ルートテーブル、セキュリティグループのポート設定など)が、TCP/IPの知識と直結していることが分かりました。「なぜポート443を開けるのか」「セキュリティグループで0.0.0.0/0を許可するとどうなるか」が腑に落ちるようになりました。

改善点・難しかった点

正直、難しかった部分もある

  • データリンク層(Ethernet、ARP、MACアドレス)あたりは、Webエンジニアの日常業務との接点が薄く、少し退屈に感じることもありました
  • 全部を一度に覚えようとするより、「今の仕事に関係する部分から読む」という読み方が合っていると感じました

おわりに

「マスタリング TCP/IP 入門編」は、1989年の初版から版を重ねてきた名著です。内容は基礎的でありながら、Webエンジニアが現場で必要とする知識が体系的に整理されています。

ネットワークの知識は、すぐに開発スピードが上がるような即効性はありませんが、トラブルシューティング・セキュリティ設計・インフラ理解 という形で、じわじわとエンジニアとしての地力になってくれます。

「ネットワークは難しそう」と感じている方にこそ、ぜひ手に取ってほしい一冊です。最後まで読んでいただきありがとうございました!
image.png

参考文献・リンク

タイトル URL
マスタリング TCP/IP 入門編 第6版(Ohmsha公式) https://www.ohmsha.co.jp/book/9784274224478/
RFC 793 - TCP(IETF) https://datatracker.ietf.org/doc/html/rfc793
RFC 9293 - TCP(最新版)(IETF) https://datatracker.ietf.org/doc/html/rfc9293
RFC 9110 - HTTP Semantics(IETF) https://datatracker.ietf.org/doc/html/rfc9110
DNS のしくみ(Cloudflare Learning Center) https://www.cloudflare.com/ja-jp/learning/dns/what-is-dns/
TLS/SSL とは(Cloudflare Learning Center) https://www.cloudflare.com/ja-jp/learning/ssl/what-is-ssl/
HTTP/3 とは(Cloudflare Learning Center) https://www.cloudflare.com/ja-jp/learning/performance/what-is-http3/
OSI参照モデル(Cisco) https://www.cisco.com/c/ja_jp/support/docs/ibm-technologies/logical-link-control-llc/12247-45.html
IPv4アドレスの枯渇問題(JPNIC) https://www.nic.ad.jp/ja/newsletter/No43/0800.html
1
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
1
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?