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

【Network Systems Foundations】トランスポート層の学習整理

Last updated at Posted at 2025-11-02

Network Systems Foundations: Transport Layer

本記事は、Coursera の Network Systems Foundations モジュール「Transport Layer」で学んだ内容を個人の学習記録としてまとめたものです。

トランスポート層の概要

トランスポート層は、ホスト間通信を担うネットワーク層の上に位置し、プロセス間通信を実現する層です。

目的 代表的プロトコル
リンク層 ネットワーク内通信 Ethernet
ネットワーク層 ホスト間通信 IP
トランスポート層 プロセス間通信 TCP / UDP

1️⃣ Multiplexing(多重化)

■ 問題設定

複数のアプリケーションが同時に通信を行う場合、
どのアプリケーション宛のパケットか?」を識別する必要があります。

→ これを識別するのが ポート番号 (Port Number) です。


■ トランスポートアドレス (ポート)

  • 各アプリケーションはポート番号で識別される
    • HTTP → ポート 80
    • SSH → ポート 22
IPヘッダ
├─ Source IP
├─ Destination IP
TCPヘッダ
├─ Source Port
├─ Destination Port

この 4 つ(Src IP, Dest IP, Src Port, Dest Port)の組が
1 つの通信(コネクション)を一意に識別します。


■ UDP と TCP の違い

プロトコル 特徴 用途
UDP コネクションレス・シンプル・再送なし DNS, ストリーミング
TCP コネクション指向・信頼性あり Web 通信

■ 各層でのメッセージ名

名称
リンク層 Frame
ネットワーク層 Packet
トランスポート層 Datagram
アプリケーション層 Message

2️⃣ Reliable Transfer(信頼できる転送)

■ 目的

アプリケーションが送信したデータが「欠損なく・順序通りに届く」ことを保証する。

送信側 → Pkt1: ABC, Pkt2: DEF, Pkt3: GHI
受信側 → Pkt1: ABC, Pkt2: DEF, Pkt3: GHI ✅

■ 伝送中に発生しうる問題

問題 原因 対応
フレーム誤り 電磁ノイズ等でビット反転 CRC で検出、破棄
輻輳によるドロップ ルータバッファ溢れ 再送制御
パケット順序の乱れ 経路変更など シーケンス番号で順序復元

■ TCP の仕組み

1. シーケンス番号 (Sequence Number)

ストリーム中の「どのバイトからどの範囲か」を表す。
例:

Seq=0〜99, Seq=100〜199, Seq=200〜299

2. ACK 番号 (Acknowledgement Number)

受信側が「次に期待するバイト番号」を返す。

ACK=200 → 0〜199までは受信済み

3. 再送制御

ACK が一定時間内に返らない、または重複 ACK を受け取った場合に再送。

4. フロー制御 (Flow Control)

受信側は自分のバッファ残容量を rwnd として広告し、送信側は「未 ACK データ ≤ rwnd」を維持。

■ TCP ヘッダ内の主な制御フィールド

フィールド 意味
Sequence Number データの順序
ACK Number 次に期待するデータ
Window Size 受信可能なバイト数(rwnd)
Flags SYN, ACK, FIN など

3️⃣ TCP Connection Establishment(コネクション確立)

■ 三者間ハンドシェイク(3-Way Handshake)

ステップ 内容 TCP フラグ
クライアント → サーバ: 接続要求 SYN
サーバ → クライアント: 受諾+自身の SYN SYN + ACK
クライアント → サーバ: 確認応答 ACK
A → B : SYN(seq=1000)
B → A : SYN(seq=600), ACK(ack=1001)
A → B : ACK(ack=601)

■ 再送ケース

どのパケットが欠損しても再送が発生し、通信確立が保証される。

4️⃣ Congestion Control(輻輳制御)

■ 問題設定

ネットワークの帯域が飽和するとルータのバッファが溢れ、
パケット損失と再送が増加 → 輻輳崩壊 (congestion collapse) が発生。

■ 目的

  • ネットワークを「崩壊直前の効率的な状態」で安定動作させる
  • 各送信元が公平 (fair) かつ効率的 (efficient) に帯域を利用

■ TCP の戦略: Detect & Adjust

  • フィードバック: 暗黙的(Timeout, Duplicate ACK, Delay など)
  • 調整: ウィンドウベース (cwnd)
    lastByteSent – lastByteAck ≤ cwnd
    

■ AIMD(Additive Increase, Multiplicative Decrease)

フェーズ 内容
AI 輻輳がない間、RTT ごとに cwnd を 1 MSS ずつ増加
MD 輻輳検知時に cwnd を 乗算的に(例えば半分に) に減少

→ グラフ上では「鋸歯状(sawtooth pattern)」の増減を描く。

■ Slow Start(スロースタート)

AIMD の「加法増加」は遅すぎるため、接続開始時は 指数的に cwnd を増加

段階 cwnd の変化
初期 1 MSS
1 RTT 後 2 MSS
2 RTT 後 4 MSS
3 RTT 後 8 MSS

→ 一定値(閾値)に達すると Additive Increase に切り替え。

🧠 まとめ

機能 キー概念 役割
Multiplexing Port 番号 アプリ間の識別
Reliable Transfer Seq / ACK / 再送 / Flow Control 順序と完全性の保証
Connection 3-Way Handshake 通信前の同意形成
Congestion Control AIMD / cwnd / Slow Start ネットワーク効率と公平性

🧾 参考資料

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