新Linux入門|UDPとは:リアルタイム通信を支える軽量で高速なコネクションレスプロトコル

インターネットの通信でよく使われるのはTCPだけではありません。
もう一つの重要な通信方式が UDP(User Datagram Protocol) です。

 UDPは、TCPのような「接続の確立」を行わず、軽量で素早くデータを送ることができるプロトコルです。
 その特徴から、動画配信・オンラインゲーム・音声通話(VoIP) など、「リアルタイム性」が求められる場面でよく利用されています。

⚡UDPの基本概念

UDPは 「コネクションレス型」 の通信プロトコルです。
これは、「相手と接続を確立せず、送りたいデータをそのまま送る」方式を意味します。

 TCPでは「3ウェイハンドシェイク」による接続確立と応答確認が行われますが、UDPではこれを省略するため、通信がすぐに始まります。

項目内容
プロトコル名UDP(User Datagram Protocol)
通信方式コネクションレス(接続を確立しない)
信頼性なし(再送や順序制御を行わない)
通信単位データグラム(独立したパケット)
速度高速(オーバーヘッドが少ない)
代表的な用途DNS・DHCP・VoIP・ストリーミング・オンラインゲーム

💬ポイント
 つまりUDPは、「届くかどうかの確認はしないけれど、とにかくすぐ送る!」というシンプルな仕組みです。
そのため、多少のデータ損失が許容できるリアルタイム通信に向いています。

📦 UDPヘッダーの構造

 UDPのデータ単位である「データグラム」は、UDPヘッダーデータ本体(ペイロード) で構成されます。
TCPと比べると非常にシンプルな構造で、処理が軽いのが特徴です。

フィールド名サイズ内容
送信元ポート番号16ビット送信側のアプリケーション識別番号
宛先ポート番号16ビット受信側のアプリケーション識別番号
データ長16ビットUDPヘッダー+データ全体の長さ
チェックサム16ビットデータの誤り検出用

💬ポイント
TCPのように「シーケンス番号」や「ACK番号」などはなく、極めてシンプルです。
この軽さがUDPの高速性の源になっています。

⚙️ UDPの特徴

UDPの主な特徴を次の表にまとめました。

特徴内容
低遅延通信接続確立が不要なため、すぐにデータ送信を開始できる。
軽量プロトコルTCPよりもヘッダーが小さく、処理コストが低い。
ブロードキャスト・マルチキャスト対応複数の相手に同時にデータを送れる。
リアルタイム性に優れる一部のデータが失われても問題ない通信に最適
再送や順序保証なし信頼性より速度を優先する設計

💡ポイント
たとえば音声通話(VoIP)では、少しのパケット欠落よりも「遅延が少ない方が大切」です。
UDPはそうした用途に最適です。

🌐 UDPの利用例

UDPはさまざまなプロトコルやアプリケーションで使われています。

利用例説明
DNS名前解決(ドメイン名→IPアドレス変換)に使用。短いデータ通信に最適。
DHCPクライアントにIPアドレスを自動割り当てするために使用。
VoIP(音声通話)音声や映像をリアルタイムでやり取りするために使用。
NTP(時刻同期)ネットワーク上の時計を同期する通信に使用。
オンラインゲーム高速応答が求められるゲームサーバ通信に使用。

💬ポイント
TCPが「正確さ」を重視するのに対し、UDPは「スピードと即時性」を重視しています。

🔍 TCPとの比較

TCPとUDPはどちらもIP層の上位に位置するトランスポート層プロトコルですが、目的が異なります。

項目TCPUDP
通信方式コネクション型コネクションレス型
信頼性高い(再送・順序制御あり)低い(保証なし)
データ順序保証あり保証なし
オーバーヘッド大きい小さい
速度遅い(確認応答あり)高速(即時送信)
主な用途Web、メール、SSH音声、DNS、動画配信、ゲーム

💡ポイント
TCPとUDPはどちらが“上位”というわけではなく、用途によって使い分ける ことが重要です。

📡 UDP通信確認コマンド

UDPの通信を確認するには、ss コマンドや netstat コマンドを使います。

➀ ssコマンド(推奨)

ss -una
オプション説明
-uUDPソケットのみ表示
-n名前解決を行わず数値で表示
-aLISTEN状態を含め全て表示

使用例

[suzuki@AlmaLinux ~]$ ss -una
State    Recv-Q    Send-Q          Local Address:Port       Peer Address:Port   
ESTAB    0         0            10.0.2.15%enp0s3:68             10.0.2.2:67     
UNCONN   0         0                     0.0.0.0:5353            0.0.0.0:*      
UNCONN   0         0                   127.0.0.1:323             0.0.0.0:*      
UNCONN   0         0                        [::]:5353               [::]:*      
UNCONN   0         0                       [::1]:323                [::]:*

💬ポイント
 68番ポート はDHCPクライアント、323番ポート はNTPサービスが使用していることを示しています。

② netstatコマンド(旧ツール)

netstat -anu
オプション説明
-a全てのソケットを表示
-n数値形式で表示
-uUDPソケットを表示

使用例

[suzuki@AlmaLinux ~]$ netstat -anu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 10.0.2.15:68            10.0.2.2:67             ESTABLISHED
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
udp        0      0 127.0.0.1:323           0.0.0.0:*                          
udp6       0      0 :::5353                 :::*                               
udp6       0      0 ::1:323                 :::*

💬ポイント
UDPは「接続しない」ため、State列には ESTABLISHED のような状態が表示されません。

③ ncコマンド(UDP通信のテスト)

nc(netcat)コマンドは、UDPの送受信テストに便利です。

サーバ側

[suzuki@AlmaLinux ~]$ nc -u -l 5000

クライアント側

[suzuki@AlmaLinux ~]$ nc -u 192.168.1.100 5000
オプション説明
-uUDPモードで通信
-lリッスン(待ち受け)モード
ポート番号使用するUDPポートを指定

💬ポイント
このコマンドを使えば、簡単にUDP通信のテストが行えます。

🔐 UDPのセキュリティと注意点

UDPは軽量で便利な反面、確認応答がないためセキュリティリスクもあります。

リスク内容
IPスプーフィング送信元アドレスを偽装して攻撃を行う。
UDPフラッド攻撃大量のUDPパケットを送信してサーバをダウンさせる。
DNSアンプ攻撃DNSサーバを悪用して大量の応答データを送信する。

💡ポイント
 UDPを利用する際は、ファイアウォール(firewalld や iptables)で不要なポートを閉じ、アクセス制限を行うことが重要です。

🌈 まとめ

  • UDPは「軽量・高速・リアルタイム」を実現するトランスポート層プロトコル。
  • TCPのような接続確立や再送制御を行わないため、遅延が少ない。
  • DNS・VoIP・オンラインゲームなど、速度重視の通信に最適。
  • 信頼性やセキュリティ面では注意が必要で、用途を見極めて使い分けることが重要。

UDPは、インターネット通信の中で「スピードと効率」を担当する頼もしい存在です。