- TCPとUDPの仕組みと3ウェイハンドシェイクの詳細
- TCP・UDP別の主要ポート番号一覧(SSH・DNS・NTPなど)
- netstat・ssコマンドでの接続状態確認方法(Windows/Linux)
- 用途別の使い分け基準とトラブルシューティング手順
TCPとUDPは、OSI参照モデルのトランスポート層(第4層)で動作するプロトコルです。
Webサーバー構築・ファイアウォール設定・VPN設計・ネットワークトラブルシューティングなど、インフラエンジニアが日常的に扱う場面で必ず登場します。
「なんとなくわかっているけど、設計書や面接で正確に説明できるか不安」という方も多いはずです。
この記事では、基本概念から実務で使うコマンド・ポート番号まで体系的に整理します。
TCPとUDPの基本と仕組み
TCP(Transmission Control Protocol)の仕組み
TCPはコネクション型プロトコルです。データ送信前に必ず「3ウェイハンドシェイク」で接続を確立し、送達確認(ACK)と再送制御によってデータの確実な到達を保証します。
3ウェイハンドシェイクの流れ:① SYN(接続要求)→ ② SYN-ACK(受諾)→ ③ ACK(確認)。この3ステップで接続が確立されてからデータ転送が始まります。
| ステップ | 送信元 → 宛先 | 内容 |
|---|---|---|
| ① SYN | クライアント → サーバー | 接続要求。シーケンス番号(ISN)を送付 |
| ② SYN-ACK | サーバー → クライアント | 接続受諾。サーバー側のISNを返答 |
| ③ ACK | クライアント → サーバー | 確認応答。これでデータ転送開始 |
UDP(User Datagram Protocol)の仕組み
UDPはコネクションレス型プロトコルです。ハンドシェイクなしでデータグラムを送りつけるだけなので、オーバーヘッドが極めて小さく、低遅延を実現します。ただし送達保証・順序保証・再送制御は一切ありません。
TCP/UDP 詳細比較表
| 比較項目 | TCP | UDP |
|---|---|---|
| 接続方式 | コネクション型(3ウェイハンドシェイク) | コネクションレス型 |
| 信頼性 | 高い(ACK・再送制御あり) | なし(送りっぱなし) |
| データ順序保証 | あり(シーケンス番号で管理) | なし |
| エラー検出・修正 | あり(自動再送) | チェックサムのみ(再送なし) |
| ヘッダサイズ | 最小20バイト(オプションで最大60バイト) | 固定8バイト |
| 通信速度・遅延 | やや遅い(確認応答のオーバーヘッドあり) | 速い(低遅延) |
| フロー制御 | あり(ウィンドウサイズで制御) | なし |
| 輻輳制御 | あり(スロースタート等) | なし |
| ブロードキャスト/マルチキャスト | 不可 | 可能 |
| 主な用途 | HTTP/S・SSH・FTP・SMTP・RDP | DNS・NTP・SNMP・動画配信・ゲーム |
主要プロトコルとポート番号一覧
ファイアウォール設定やACL作成時に必須となる、代表的なポート番号を整理します。
TCP:主要ウェルノウンポート
| ポート番号 | プロトコル | 用途 |
|---|---|---|
| 20 / 21 | FTP | ファイル転送(データ / 制御) |
| 22 | SSH / SFTP / SCP | 安全なリモート接続・ファイル転送 |
| 23 | Telnet | リモート接続(暗号化なし・非推奨) |
| 25 | SMTP | メール送信 |
| 80 | HTTP | Web通信(暗号化なし) |
| 110 | POP3 | メール受信 |
| 143 | IMAP | メール受信(サーバー上で管理) |
| 443 | HTTPS | Web通信(TLS暗号化) |
| 3389 | RDP | Windowsリモートデスクトップ |
| 3306 | MySQL | MySQLデータベース接続 |
| 5432 | PostgreSQL | PostgreSQLデータベース接続 |
| 1433 | MS SQL Server | SQL Serverデータベース接続 |
UDP:主要ウェルノウンポート
| ポート番号 | プロトコル | 用途 |
|---|---|---|
| 53 | DNS | 名前解決(ゾーン転送はTCP 53を使用) |
| 67 / 68 | DHCP | IPアドレス自動配布(サーバー / クライアント) |
| 69 | TFTP | シンプルなファイル転送(機器のファームウェア配布等) |
| 123 | NTP | 時刻同期 |
| 161 / 162 | SNMP / SNMPトラップ | ネットワーク機器の監視・通知 |
| 514 | Syslog | ログ転送 |
| 500 | IKE | IPsec VPNの鍵交換 |
| 4500 | NAT-T | NATを越えたIPsec通信 |
コマンドでTCP/UDP接続状態を確認する
実際のトラブルシューティングでは、現在の接続状態やリスニングポートをコマンドで確認することが基本です。
Windows:netstatコマンド
# すべての接続とリスニングポートを表示(PID付き)
netstat -ano
# 特定ポートで絞り込む(例:443番ポート)
netstat -ano | findstr ":443"
# TCPのみ表示
netstat -ano -p TCP
# UDPのみ表示
netstat -ano -p UDP出力例:
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 4
TCP 192.168.1.10:54321 93.184.216.34:443 ESTABLISHED 1234
UDP 0.0.0.0:123 *:* 1056Windows:PowerShellコマンド
# ESTABLISHED状態のTCP接続一覧
Get-NetTCPConnection | Where-Object State -eq "Established" | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State
# リスニング中のTCPポート一覧
Get-NetTCPConnection | Where-Object State -eq "Listen" | Select-Object LocalPort,State | Sort-Object LocalPort
# UDPエンドポイント一覧
Get-NetUDPEndpoint | Select-Object LocalAddress,LocalPort | Sort-Object LocalPortLinux:ssコマンド(推奨)
ssはnetstatの後継コマンドです。カーネルから直接情報を取得するためより高速で、詳細なフィルタリングが可能です。
# TCP・UDP・プロセス名・数値表示(よく使う組み合わせ)
ss -tunap
# ESTABLISHED状態のTCP接続のみ
ss -tnp state established
# 特定ポートで絞り込む(例:80番)
ss -tnp | grep ':80'
# リスニング中のポート一覧
ss -tlnp| オプション | 意味 |
|---|---|
| -t | TCPソケットを表示 |
| -u | UDPソケットを表示 |
| -n | ホスト名・サービス名を数値で表示 |
| -a | リスニング中・非リスニング中を両方表示 |
| -p | プロセス名・PIDを表示 |
| -l | リスニング状態のみ表示 |
CentOS 7以降・Rocky Linux・Ubuntu 20.04以降ではnetstatがデフォルトで入っていない場合があります。ssコマンドを優先して使いましょう。どうしても必要な場合は yum install net-tools または apt install net-tools でインストールできます。
用途別の使い分け基準
TCPを選ぶべき場面
- ファイルダウンロード(一部欠損でファイルが壊れる)
- HTTPSによるWeb通信
- SSHリモート操作
- メール送受信(SMTP / POP3 / IMAP)
- データベースへの接続(MySQL / PostgreSQL / SQL Server)
- DNSゾーン転送(AXFR)
UDPを選ぶべき場面
- DNS名前解決(高頻度・小データ・再送は上位層で対応)
- NTP時刻同期
- SNMP監視・トラップ通知
- 動画ストリーミング・VoIP・Web会議(Zoom / Teams / Google Meet)
- オンラインゲーム(位置情報など最新データ優先)
- IPsec VPN鍵交換(IKE / NAT-T)
- Syslogによるログ転送
トラブルシューティング事例
【事例1】SSH接続がタイムアウトする
SSHはTCP 22番を使用します。以下の順序で確認します。
ss -tlnp | grep ':22'出力に LISTEN 0 128 0.0.0.0:22 が表示されればsshdは起動しています。表示されない場合は systemctl start sshd で起動します。
# firewalld(Rocky Linux / CentOS)
firewall-cmd --list-all
# UFW(Ubuntu)
ufw status verbose
# Windows(PowerShell)
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "*SSH*" }# Linux
nc -zv 192.168.1.10 22
# Windows(PowerShell)
Test-NetConnection -ComputerName 192.168.1.10 -Port 22succeeded と表示されれば通信は到達しています。失敗する場合は途中のファイアウォール・ルーターのACLを確認します。
【事例2】SNMPでネットワーク機器を監視できない
SNMPはUDP 161番(ポーリング)とUDP 162番(トラップ)を使用します。
SNMPトラブルの主な原因:
①ファイアウォールでUDP 161/162がブロック
②コミュニティ文字列の不一致(SNMPv2c)
③SNMPv3の認証パラメータ不一致。
まずはUDPポートの疎通確認から始めましょう。
# UDPポート161への疎通確認
nc -zuv 192.168.1.1 161
# SNMPwalkで応答確認(net-snmpが必要)
snmpwalk -v2c -c public 192.168.1.1 1.3.6.1.2.1.1【事例3】VoIP・Web会議の音声が途切れる
VoIPはRTP(UDP)を使うため、ネットワーク品質(パケットロス・ジッタ・遅延)が直接影響します。
- ルーターのQoS設定でVoIPトラフィック(RTP:UDP 10000〜20000など)を優先
pingでパケットロス率を確認(1%以上なら回線品質を疑う)- 有線接続に切り替えてWi-Fiの影響を排除
- Zoom / TeamsがアウトバウンドのUDP(3478、3479、8801〜8802)を通過できるかファイアウォールを確認
最新技術動向|QUICとHTTP/3
QUICとは
QUIC(Quick UDP Internet Connections)はGoogleが開発し、IETFで標準化されたトランスポートプロトコルです。UDPの上位で動作しながら、TCPの信頼性・TLSのセキュリティを実現します。HTTP/3の土台として採用されています。
| 比較項目 | HTTP/2(TCP) | HTTP/3(QUIC/UDP) |
|---|---|---|
| トランスポート | TCP | UDP(QUIC) |
| ハンドシェイク | TCP 3way + TLS 1〜2RTT | 0〜1RTT(2回目以降は0RTT) |
| HoLブロッキング | あり(TCPレベル) | なし(ストリームレベルで独立) |
| 接続マイグレーション | 非対応(IPが変わると再接続) | 対応(Wi-Fi→4G切替でも継続) |
| 使用ポート | TCP 443 | UDP 443 |
HTTP/3(QUIC)はUDP 443を使用します。企業のファイアウォールでUDPアウトバウンドを制限している環境では、HTTP/3が使えずHTTP/2へ自動フォールバックします。パフォーマンス最適化でHTTP/3を活用したい場合は、アウトバウンドUDP 443の通信許可を確認してください。
WebRTC
WebRTCはブラウザ上でP2Pリアルタイム通信を実現する技術です。
メディアトラフィックはSRTP(Secure Real-time Transport Protocol)over UDPで転送されます。
Google Meet・Zoom・Teamsのブラウザ版などで採用されています。
まとめ
TCPとUDPの違いを、仕組み・ポート番号・コマンド・実務事例の観点から整理しました。
| 判断基準 | 選択 |
|---|---|
| データの完全性・順序が必須 | TCP |
| 低遅延・リアルタイム性が最優先 | UDP |
| ブロードキャスト・マルチキャストが必要 | UDP |
| TCPの信頼性+UDPの速度が必要 | QUIC(HTTP/3) |
- TCPとUDPを同じポート番号で使えますか?
はい、可能です。ポート番号はTCPとUDPで独立した空間を持つため、同じ番号を両方で使用できます。代表例がDNSで、UDP 53(通常の名前解決)とTCP 53(ゾーン転送)を同じポート番号で使い分けています。
- UDPは信頼性がないのに、なぜDNSで使われるのですか?
DNSのクエリ・レスポンスは通常512バイト以下の小さなデータで処理が完結します。万一タイムアウトしても上位のリゾルバが再試行するため、UDP側での再送制御が不要です。速度を優先してUDPが採用されています。
- netstatとssはどちらを使えばよいですか?
新しいLinux環境では
ssを推奨します。ssはカーネルから直接情報を取得するため高速で、netstatより詳細なフィルタリングが可能です。netstatが必要な場合はnet-toolsパッケージをインストールしてください(yum install net-tools/apt install net-tools)。- HTTP/3はHTTP/2より必ず速いですか?
必ずしもそうではありません。QUICは高パケットロス環境や、モバイル回線でのネットワーク切替が多い環境で特に効果を発揮します。安定した有線LAN環境では、HTTP/2との差はほとんどない場合もあります。

コメント