メインコンテンツへ移動
SEMentor
ネットワーク 約11分 ネットワーク curriculum

TCP/IP の基本

ネットワークの基礎であるTCP/IPプロトコルスタックの仕組みを理解する

TCP/IP とは

TCP/IP(Transmission Control Protocol / Internet Protocol)は、インターネットや企業内ネットワークで標準的に使われるプロトコルスタックです。OSI 参照モデルの 7 層を実用的に 4 層にまとめた構造を持ちます。

TCP/IP の 4 層モデル

名称代表プロトコル
4アプリケーション層HTTP, HTTPS, FTP, SMTP, DNS
3トランスポート層TCP, UDP
2インターネット層IP, ICMP, ARP
1ネットワークインターフェース層Ethernet, Wi-Fi

TCP と UDP の違い

TCP(コネクション指向)

TCP は信頼性を重視した通信プロトコルです。

  • 3 ウェイハンドシェイクによって接続を確立
  • データの到達確認(ACK)と再送制御
  • フロー制御・輻輳制御
  • 用途:Web 通信(HTTP/HTTPS)、ファイル転送(FTP)、メール(SMTP)
クライアント          サーバ
  |-- SYN ---------> |
  |<-- SYN+ACK ----- |
  |-- ACK ---------> |
  |===== 通信開始 ====|

UDP(コネクションレス)

UDP は速度を優先した通信プロトコルです。

  • 接続確立なし、最小限のヘッダ
  • 到達保証なし、再送なし
  • 用途:動画・音声のストリーミング、DNS クエリ、オンラインゲーム

IP アドレスの基礎

IPv4 アドレスは 32 ビットの数値で、ドット区切り 10 進表記で表します。

192.168.1.100

クラスレスアドレッシング(CIDR)

192.168.1.0/24  → 192.168.1.0 ~ 192.168.1.255(256 アドレス)
10.0.0.0/8      → 10.0.0.0 ~ 10.255.255.255(16,777,216 アドレス)

サブネットマスクの /24 は先頭 24 ビットがネットワーク部であることを示します。

初心者向け:Webアクセスを層で追う

ブラウザで https://example.com を開くと、裏側では複数の層が順番に動きます。

1. DNSで example.com のIPアドレスを調べる
2. IPで相手サーバまでパケットを届ける
3. TCPで接続を作り、データが欠けないように送る
4. TLSで暗号化された通信路を作る
5. HTTPで「ページをください」とリクエストする

TCP/IPの学習で大切なのは、用語を単体で覚えることではなく「どの層が何を担当しているか」を切り分けられることです。

中級者向け:通信トラブルの切り分け

ネットワーク障害では、症状ごとに疑う層を変えます。

症状疑う層確認すること
ドメイン名だけ失敗するDNS名前解決できるか、キャッシュが古くないか
IP直打ちでもつながらないIP/経路ルーティング、FW、到達性
接続開始に時間がかかるTCPタイムアウト、SYN再送、ポート開放
証明書エラーTLS証明書期限、ホスト名、信頼チェーン
404/500が返るHTTP/アプリURL、メソッド、サーバ処理

この切り分けができると、「ネットワークが悪い」という曖昧な報告を、次に調べるべき具体的な層へ落とし込めます。

まとめ

  • TCP/IP は 4 層モデルで構成される
  • TCP は信頼性重視、UDP は速度重視
  • IP アドレスはネットワーク部とホスト部に分かれる
  • 実務では、DNS・IP・TCP・TLS・HTTPのどこで失敗しているかを分けて考える

Beginner to Intermediate

TCP/IP の基本を実務につなげる学び方

ネットワークは、言葉を知るだけでなく「どこで使う知識か」まで結びつけると定着します。初学者は全体像をつかみ、中級者は切り分けや設計判断に使える形へ伸ばしていきましょう。

初心者の到達点

  • ブラウザからサーバまで、DNS解決・TCP接続・TLS・HTTPリクエストの順番を追う。
  • IPアドレス、ポート、プロトコルの役割を混同せずに分けて説明する。

中級者の観点

  • 通信エラーを、名前解決・接続・証明書・アプリケーション応答のどの層で起きたかに分解する。
  • タイムアウト、リトライ、キャッシュ、CORSなど、Webアプリで起きやすい症状と関連づける。

手を動かす練習

  • 開発者ツールのNetworkタブで、1つの画面表示に必要なリクエストを確認する。
  • `curl -I` や `dig` の結果から、次に調べるべき層を考える。

このレッスンは未完了です。

次のレッスンへ