4.

OSI参照モデル トランスポート層(第4層)完全ガイド(TCP / UDP / ポート番号 / フロー制御 / 役割と機能)

編集
この記事の要点
  • トランスポート層は OSI 参照モデルの第4層。エンドツーエンドで通信の信頼性を担う
  • 代表プロトコルは TCP(信頼性あり)と UDP(信頼性なし・高速)
  • ポート番号で同じ端末上の複数アプリを区別する(HTTP=80、HTTPS=443 など)
  • 機能: セグメント化 / 順序制御 / 再送 / フロー制御 / 輻輳制御 / 多重化
  • TCP/IP モデルでも同じ位置づけで存在する(4層モデルでもトランスポート層)

トランスポート層とは

OSI 参照モデルの第4層に位置する層で、送信端末から受信端末までエンドツーエンドの論理的な通信路を提供します。下位のネットワーク層がパケットを「届ける」役割なのに対し、トランスポート層は「届いたパケットを正しい順序で、抜けなく、正しいアプリに渡す」役割を担います。

OSI における位置づけ

名前主な役割代表プロトコル
L7アプリケーション層アプリ固有の通信HTTP, DNS, SMTP
L6プレゼンテーション層表現形式・暗号化TLS
L5セッション層セッション管理NetBIOS, RPC
L4トランスポート層エンドツーエンドの信頼性確保TCP, UDP
L3ネットワーク層経路選択(IP)IP, ICMP
L2データリンク層隣接ノード間転送Ethernet
L1物理層電気信号RJ-45, 光ファイバ

主な機能

機能意味主に担うプロトコル
セグメント化大きなデータを送受可能なサイズに分割(MSS 単位)TCP
順序制御シーケンス番号で受信側が並び替えTCP
再送制御ACK が来ない / 重複時に再送TCP
フロー制御受信側の処理速度に合わせる(ウィンドウサイズ)TCP
輻輳制御ネットワークが混雑したら送信速度を下げるTCP
多重化ポート番号で複数の通信を識別TCP / UDP
誤り検出チェックサムTCP / UDP

TCP と UDP の比較

項目TCPUDP
コネクションあり(3way ハンドシェイク)なし
信頼性順序保証 / 再送あり保証なし
速度遅め(オーバーヘッド)速い
ヘッダ長20〜60 バイト8 バイト
主な用途HTTP/HTTPS、SSH、メール、DBDNS、VoIP、動画ストリーミング、ゲーム、DHCP

ポート番号で多重化する

1 台の端末上では複数のアプリが同時にネットワークを使います。トランスポート層はポート番号で「どのアプリ宛か」を識別します。

[ ブラウザ (TCP:54321) ] ──┐
[ メーラ  (TCP:54322) ] ──┼─→ NIC ─→ ネットワーク
[ Slack   (TCP:54323) ] ──┘

返信は宛先ポート番号で振り分け:
  ← TCP:54321 → ブラウザへ
  ← TCP:54322 → メーラへ
  ← TCP:54323 → Slack へ

代表的なポート番号

ポートプロトコル用途
20 / 21TCPFTP(データ / 制御)
22TCPSSH
25TCPSMTP(メール送信)
53TCP / UDPDNS
80TCPHTTP
443TCP / UDPHTTPS / HTTP/3 (QUIC)
3306TCPMySQL
5432TCPPostgreSQL

3way ハンドシェイク(TCP)

クライアント                サーバ
     │  ── SYN ──────→     │   ① 接続要求
     │  ←─ SYN+ACK ──      │   ② 応答
     │  ── ACK ──────→     │   ③ 確認
     │                       │
     │       データ通信       │

確認コマンド(Linux)

# 開いているソケット一覧
ss -tunap

# TCP の状態(ESTABLISHED, TIME_WAIT など)
ss -t state established

# 統計情報
netstat -s | head -50

TCP/IP モデルでの位置

実運用で使われている TCP/IP モデル(4層)でも、トランスポート層は OSI の第4層と同じ位置・同じ役割です。OSI と TCP/IP は層の数こそ違いますが、L4 = トランスポート層という対応関係は変わりません。アプリケーション層(HTTP, SMTP など)から見ると、トランスポート層は「確実に届けてくれる宅配便(TCP)」あるいは「速いが届かないこともある投げ込みポスト(UDP)」のようなAPI(ソケット)として現れます。

ソケット API という見え方

プログラマがトランスポート層を意識するのは、ふだんソケット API を通じてです。TCP なら socket() → connect() → send() / recv() → close()、UDP なら socket() → sendto() / recvfrom() → close() といった呼び出し列で、L4 が提供する「信頼性のある / なしのチャネル」を利用します。Python の socket モジュール、Go の net パッケージ、Node の net / dgram なども、最終的にはこのレイヤと話しています。

セグメント / データグラムという用語

トランスポート層が下位層に渡すデータの単位は、TCP では「セグメント」、UDP では「データグラム」と呼ばれます。ネットワーク層に降りるとこれが IP パケットに包まれ、さらにデータリンク層でフレーム化されてケーブル / 電波に乗ります。逆に受信側では、L2 → L3 でヘッダを剥がしていき、最終的にトランスポート層がセグメント / データグラムを正しいアプリケーション(ポート)に振り分けます。

QUIC(HTTP/3)の位置づけ

近年は HTTP/3 が QUIC(UDP の上の独自プロトコル)を採用しています。QUIC は UDP の上に「信頼性・順序保証・暗号化」を載せ直した新世代のトランスポート相当層で、TCP の Head-of-Line ブロッキング回避と TLS ハンドシェイクの短縮を実現しました。OSI モデル上は厳密には L4 でなく L4 と L5/L6 にまたがる扱いですが、役割としてはトランスポート層の進化形と考えると理解しやすいです。

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. アプリケーション層(第7層)
  2. プレゼンテーション層(第6層)
  3. セッション層(第5層)
  4. トランスポート層(第4層)
  5. ネットワーク層(第3層)
  6. データリンク層(第2層)
  7. 物理層(第1層)

最近更新/作成されたページ