TCP/UDP違いを比較表で徹底解説|ポート番号・コマンド確認・使い分けまとめ

この記事で分かること
  • 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はコネクションレス型プロトコルです。ハンドシェイクなしでデータグラムを送りつけるだけなので、オーバーヘッドが極めて小さく、低遅延を実現します。ただし送達保証・順序保証・再送制御は一切ありません。

UDPでは送達確認が不要な分、ヘッダサイズはわずか8バイト(TCPは最小20バイト)。この差がリアルタイム通信での応答速度に直結します。

TCP/UDP 詳細比較表

比較項目TCPUDP
接続方式コネクション型(3ウェイハンドシェイク)コネクションレス型
信頼性高い(ACK・再送制御あり)なし(送りっぱなし)
データ順序保証あり(シーケンス番号で管理)なし
エラー検出・修正あり(自動再送)チェックサムのみ(再送なし)
ヘッダサイズ最小20バイト(オプションで最大60バイト)固定8バイト
通信速度・遅延やや遅い(確認応答のオーバーヘッドあり)速い(低遅延)
フロー制御あり(ウィンドウサイズで制御)なし
輻輳制御あり(スロースタート等)なし
ブロードキャスト/マルチキャスト不可可能
主な用途HTTP/S・SSH・FTP・SMTP・RDPDNS・NTP・SNMP・動画配信・ゲーム

主要プロトコルとポート番号一覧

ファイアウォール設定やACL作成時に必須となる、代表的なポート番号を整理します。

TCP:主要ウェルノウンポート

ポート番号プロトコル用途
20 / 21FTPファイル転送(データ / 制御)
22SSH / SFTP / SCP安全なリモート接続・ファイル転送
23Telnetリモート接続(暗号化なし・非推奨)
25SMTPメール送信
80HTTPWeb通信(暗号化なし)
110POP3メール受信
143IMAPメール受信(サーバー上で管理)
443HTTPSWeb通信(TLS暗号化)
3389RDPWindowsリモートデスクトップ
3306MySQLMySQLデータベース接続
5432PostgreSQLPostgreSQLデータベース接続
1433MS SQL ServerSQL Serverデータベース接続

UDP:主要ウェルノウンポート

ポート番号プロトコル用途
53DNS名前解決(ゾーン転送はTCP 53を使用)
67 / 68DHCPIPアドレス自動配布(サーバー / クライアント)
69TFTPシンプルなファイル転送(機器のファームウェア配布等)
123NTP時刻同期
161 / 162SNMP / SNMPトラップネットワーク機器の監視・通知
514Syslogログ転送
500IKEIPsec VPNの鍵交換
4500NAT-TNATを越えたIPsec通信

DNS(ポート53)はUDPを基本としますが、応答サイズが512バイトを超える場合(DNSSECなど)や、ゾーン転送(AXFR)にはTCP 53を使用します。ファイアウォールでDNSを許可する際は両方を考慮してください。

コマンドで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            *:*                                 1056

Windows: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 LocalPort

Linux:ssコマンド(推奨)

ssはnetstatの後継コマンドです。カーネルから直接情報を取得するためより高速で、詳細なフィルタリングが可能です。

# TCP・UDP・プロセス名・数値表示(よく使う組み合わせ)
ss -tunap

# ESTABLISHED状態のTCP接続のみ
ss -tnp state established

# 特定ポートで絞り込む(例:80番)
ss -tnp | grep ':80'

# リスニング中のポート一覧
ss -tlnp
オプション意味
-tTCPソケットを表示
-uUDPソケットを表示
-nホスト名・サービス名を数値で表示
-aリスニング中・非リスニング中を両方表示
-pプロセス名・PIDを表示
-lリスニング状態のみ表示

CentOS 7以降・Rocky Linux・Ubuntu 20.04以降ではnetstatがデフォルトで入っていない場合があります。ssコマンドを優先して使いましょう。どうしても必要な場合は yum install net-tools または apt install net-tools でインストールできます。

用途別の使い分け基準

TCPを選ぶべき場面

データの完全性が最優先の場合はTCPを選択します。ファイル転送・Web通信・メール・データベース接続・リモート管理(SSH/RDP)が代表例です。

  • ファイルダウンロード(一部欠損でファイルが壊れる)
  • HTTPSによるWeb通信
  • SSHリモート操作
  • メール送受信(SMTP / POP3 / IMAP)
  • データベースへの接続(MySQL / PostgreSQL / SQL Server)
  • DNSゾーン転送(AXFR)

UDPを選ぶべき場面

リアルタイム性・低遅延が最優先の場合はUDPを選択します。多少のパケットロスより応答速度が重要な通信が対象です。

  • DNS名前解決(高頻度・小データ・再送は上位層で対応)
  • NTP時刻同期
  • SNMP監視・トラップ通知
  • 動画ストリーミング・VoIP・Web会議(Zoom / Teams / Google Meet)
  • オンラインゲーム(位置情報など最新データ優先)
  • IPsec VPN鍵交換(IKE / NAT-T)
  • Syslogによるログ転送

トラブルシューティング事例

【事例1】SSH接続がタイムアウトする

SSHはTCP 22番を使用します。以下の順序で確認します。

STEP
サーバー側でSSHがリスニングしているか確認
ss -tlnp | grep ':22'

出力に LISTEN 0 128 0.0.0.0:22 が表示されればsshdは起動しています。表示されない場合は systemctl start sshd で起動します。

STEP
ファイアウォールでTCP 22が許可されているか確認
# firewalld(Rocky Linux / CentOS)
firewall-cmd --list-all

# UFW(Ubuntu)
ufw status verbose

# Windows(PowerShell)
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "*SSH*" }
STEP
クライアントからポート疎通確認
# Linux
nc -zv 192.168.1.10 22

# Windows(PowerShell)
Test-NetConnection -ComputerName 192.168.1.10 -Port 22

succeeded と表示されれば通信は到達しています。失敗する場合は途中のファイアウォール・ルーターの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)を使うため、ネットワーク品質(パケットロス・ジッタ・遅延)が直接影響します。

VoIPで許容される品質目安:パケットロス1%未満、遅延150ms以下、ジッタ30ms以下。
これを超えると通話品質が著しく低下します。

  • ルーターの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)
トランスポートTCPUDP(QUIC)
ハンドシェイクTCP 3way + TLS 1〜2RTT0〜1RTT(2回目以降は0RTT)
HoLブロッキングあり(TCPレベル)なし(ストリームレベルで独立)
接続マイグレーション非対応(IPが変わると再接続)対応(Wi-Fi→4G切替でも継続)
使用ポートTCP 443UDP 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のブラウザ版などで採用されています。

企業ネットワークでZoom・Teams・Google Meetが繋がらない場合、アウトバウンドUDP(ポート3478・3479・8801〜8802など)がファイアウォールでブロックされていることが多いです。TCPフォールバックはありますが遅延が増大します。

まとめ

TCPとUDPの違いを、仕組み・ポート番号・コマンド・実務事例の観点から整理しました。

判断基準選択
データの完全性・順序が必須TCP
低遅延・リアルタイム性が最優先UDP
ブロードキャスト・マルチキャストが必要UDP
TCPの信頼性+UDPの速度が必要QUIC(HTTP/3)

ファイアウォール設計では「このサービスはTCPかUDPか、ポートは何番か」を正確に把握することが前提です。本記事のポート番号一覧をブックマークしておくと、設定作業時にすぐ参照できます。

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との差はほとんどない場合もあります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次