この記事の要点
• TCP/IPは4層モデル(アプリケーション・トランスポート・インターネット・ネットワークアクセス)で構成
• TCPは信頼性重視の3ウェイハンドシェイク、UDPは速度重視のコネクションレス
• IPアドレスとポート番号でネットワーク上の通信先を一意に特定する
TCP/IPとは
TCP/IP(Transmission Control Protocol/Internet Protocol)は、インターネットで使用される通信プロトコルの集まりです。1970年代にARPANET(インターネットの前身)で開発され、現在のインターネット通信の基盤となっています。
「TCP/IP」という名前は、最も重要な2つのプロトコルであるTCPとIPを組み合わせたものですが、実際には多くのプロトコル(HTTP、FTP、SMTP、DNSなど)を含むプロトコル群を指します。
ポイント: TCP/IPは「プロトコルスタック」とも呼ばれ、各層が特定の役割を担当する階層構造になっています。この設計により、各層を独立して改良・置換できます。
TCP/IPの4層モデル
TCP/IPは4つの層で構成されています。OSI参照モデルの7層と比較すると、より実用的にまとめられています。
| 層 | 名称 | 役割 | 主なプロトコル |
|---|---|---|---|
| 4 | アプリケーション層 | アプリケーション固有の通信処理 | HTTP, HTTPS, FTP, SMTP, DNS, SSH |
| 3 | トランスポート層 | エンドツーエンドの通信制御 | TCP, UDP |
| 2 | インターネット層 | IPアドレスによる経路制御 | IP, ICMP, ARP |
| 1 | ネットワークインターフェース層 | 物理的なネットワーク接続 | Ethernet, Wi-Fi |
データの流れ(カプセル化)
データを送信する際、各層で「ヘッダ」が追加されていきます。これをカプセル化と呼びます。
- アプリケーション層: アプリケーションデータを生成
- トランスポート層: TCPヘッダ(ポート番号、シーケンス番号など)を追加 → セグメント
- インターネット層: IPヘッダ(送信元/宛先IPアドレスなど)を追加 → パケット
- ネットワークインターフェース層: Ethernetヘッダ(MACアドレスなど)を追加 → フレーム
IPの役割 - 住所による配達
IP(Internet Protocol)は、パケットを宛先まで届ける役割を担います。郵便システムに例えると、「住所を見て手紙を届ける」部分です。
IPアドレス
インターネット上の各機器を識別するための番号です。IPv4では32ビット(例:192.168.1.1)、IPv6では128ビット(例:2001:0db8:85a3::8a2e:0370:7334)で表されます。
# IPv4アドレスの例
192.168.1.1 # プライベートアドレス
8.8.8.8 # GoogleのDNSサーバー
# IPv6アドレスの例
::1 # ループバックアドレス
fe80::1 # リンクローカルアドレス
IPの特徴
- コネクションレス: 事前に接続を確立せずにパケットを送信
- ベストエフォート: パケットの到達を保証しない(信頼性はTCPが担当)
- ルーティング: 複数のネットワークを経由してパケットを転送
IPだけでは不十分な理由: IPはパケットを「届けようとする」だけで、届いたかどうかの確認や、順番通りに届ける保証はありません。これらの信頼性はTCPが提供します。
TCPの役割 - 信頼性のある通信
TCP(Transmission Control Protocol)は、信頼性のあるデータ転送を実現します。
TCPの主要機能
- コネクション指向: 通信前に接続を確立(3ウェイハンドシェイク)
- 信頼性: データの到達確認と再送制御
- 順序制御: シーケンス番号でデータの順番を保証
- フロー制御: 受信側の処理能力に合わせて送信速度を調整
- 輻輳制御: ネットワークの混雑状況に応じて送信量を調整
3ウェイハンドシェイク
TCP接続の確立は、3つのメッセージ交換で行われます。
sequenceDiagram
participant C as クライアント
participant S as サーバー
C->>S: SYN (seq=x)
Note right of C: 1. 接続要求
S->>C: SYN-ACK (seq=y, ack=x+1)
Note left of S: 2. 接続要求の応答 + 自分の接続要求
C->>S: ACK (ack=y+1)
Note right of C: 3. 接続要求応答の確認
Note over C,S: 接続確立(通信開始)
TCPとUDPの違い
| 特徴 | TCP | UDP |
|---|---|---|
| 接続 | コネクション指向 | コネクションレス |
| 信頼性 | あり(再送制御) | なし |
| 順序保証 | あり | なし |
| 速度 | 比較的遅い | 高速 |
| 用途 | Web、メール、ファイル転送 | 動画配信、ゲーム、DNS |
使い分けの基準: データの正確性が重要な場合はTCP、リアルタイム性が重要で多少のデータロスが許容される場合はUDPを選択します。
ポート番号の役割
ポート番号は、同じIPアドレスで複数のサービスを識別するための番号です。0〜65535の範囲があります。
ウェルノウンポート(0-1023)
| ポート番号 | プロトコル | 用途 |
|---|---|---|
| 20, 21 | FTP | ファイル転送 |
| 22 | SSH | セキュアシェル |
| 25 | SMTP | メール送信 |
| 53 | DNS | 名前解決 |
| 80 | HTTP | Web |
| 443 | HTTPS | セキュアWeb |
トラブルシューティングに役立つコマンド
# 接続確認
ping google.com
# 経路確認
traceroute google.com # macOS/Linux
tracert google.com # Windows
# TCP接続状態の確認
netstat -an | grep ESTABLISHED
# パケットキャプチャ(管理者権限必要)
tcpdump -i eth0 port 80
ポイント: TCPとUDPの使い分けは「信頼性が必要か速度が必要か」で判断します。Web通信にはTCP、リアルタイム通信にはUDPが一般的です。
まとめ
TCP/IPは、インターネット通信を支える基盤技術です。IPがパケットを宛先まで届け、TCPが信頼性のある通信を実現します。4層のプロトコルスタックにより、各層が独立して機能し、柔軟で拡張性のある通信基盤を提供しています。
注意: TCPのポート番号の競合に注意してください。開発時にポートが既に使われていると接続エラーになります。
実践メモ: Wiresharkなどのパケットキャプチャツールを使うと、TCP/IP通信の流れを視覚的に確認できます。
参考リソース
- RFC 9293 - Transmission Control Protocol (TCP)
- RFC 791 - Internet Protocol (IPv4)
- RFC 8200 - Internet Protocol Version 6 (IPv6)
- RFC 768 - User Datagram Protocol (UDP)
- Cloudflare Learning - What is TCP/IP?