| この記事の要点 |
|
トランスポート層とは
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 の比較
| 項目 | TCP | UDP |
|---|---|---|
| コネクション | あり(3way ハンドシェイク) | なし |
| 信頼性 | 順序保証 / 再送あり | 保証なし |
| 速度 | 遅め(オーバーヘッド) | 速い |
| ヘッダ長 | 20〜60 バイト | 8 バイト |
| 主な用途 | HTTP/HTTPS、SSH、メール、DB | DNS、VoIP、動画ストリーミング、ゲーム、DHCP |
ポート番号で多重化する
1 台の端末上では複数のアプリが同時にネットワークを使います。トランスポート層はポート番号で「どのアプリ宛か」を識別します。
[ ブラウザ (TCP:54321) ] ──┐
[ メーラ (TCP:54322) ] ──┼─→ NIC ─→ ネットワーク
[ Slack (TCP:54323) ] ──┘
返信は宛先ポート番号で振り分け:
← TCP:54321 → ブラウザへ
← TCP:54322 → メーラへ
← TCP:54323 → Slack へ
代表的なポート番号
| ポート | プロトコル | 用途 |
|---|---|---|
| 20 / 21 | TCP | FTP(データ / 制御) |
| 22 | TCP | SSH |
| 25 | TCP | SMTP(メール送信) |
| 53 | TCP / UDP | DNS |
| 80 | TCP | HTTP |
| 443 | TCP / UDP | HTTPS / HTTP/3 (QUIC) |
| 3306 | TCP | MySQL |
| 5432 | TCP | PostgreSQL |
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 にまたがる扱いですが、役割としてはトランスポート層の進化形と考えると理解しやすいです。
関連
- 階層(レイヤ) — 親カテゴリ
- OSI参照モデル
- セッション層(第5層)
- ネットワーク層(第3層)
- TCP
- UDP
- ポート番号
子ページはありません
- アプリケーション層(第7層)
- プレゼンテーション層(第6層)
- セッション層(第5層)
- トランスポート層(第4層)
- ネットワーク層(第3層)
- データリンク層(第2層)
- 物理層(第1層)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15