TCPとUDPの違い?

TCPとUDPはどう違うのでしょうか? UDPを通さないプロバイダはあるのでしょうか。


TCP/IPネットワークで使う基本的なプロトコルには,ICMP(Internet Control Message Protocol),UDP(User Datagram Protocol),TCP(Transmission Control Protocol)の3種類があります。このうちICMPはネットワークの状態確認など人間の健康診断のような用途に使われるプロトコルで,データ通信の前面に出てくることはありません。ユーザーの目に触れるのはpingコマンドで接続確認をするときくらいでしょう。
 UDPとTCPはどちらもインターネットを含めたデータ通信の主要なプロトコルですが,データ通信の方法が違っています。TCPは文字どおり転送制御機能を持っていて,接続(コネクション)を確立してからデータのやり取りを行います。これに対しUDPは転送制御機能を持っておらず,接続の有無を確認することなく一方的にデータを投げます。そしてたいていは通信相手がデータを返してくれますが,うまく通信できなかった場合は単純に投げたデータは破棄されてしまいます。また,TCPでは複数の相手にデータを送ること(ブロードキャスト)ができますが,一度の送信で複数の相手にデータを送ること(ユニキャスト)ができません。これに対してUDPでは,複数の相手に一度にデータを送ることができるという利点があります。
 つまり,TCPは手続きが複雑だが確実性が高く,UDPは手続きがなく軽いが確実性に乏しいという特徴を持つわけで,TCP/IPネットワークではTCPとUDPの特徴を生かすべく用途によって使い分けています。
 このような特性のため,UDPは信頼性よりもリアルタイム性が重要なアプリケーションや,複数の相手に通知を行うようなアプリケーションなどで使われることが多くなっています。具体的には,基礎的な部分ではUNIXでのNFSやBOOTPや,DHCPのインタフェース設定,timeやntpによる時計合わせ,DNSアクセスによるホスト名解決,netstatによるネットワーク状況の収集,SNMPによるネットワーク管理,syslogデータの送信といったところで,これにネットワークゲームなどの速度重視のマルチメディア通信が加わります。どれもデータのやり取りに1回失敗しただけでシステムが破綻したりはしないものばかりですが,BOOTPやDHCPなど深刻な影響があるものは,プロトコル自体ではなくソフトで数回リトライするようになっています。
 そして,UDP以外のWebやFTP,POP3のメールなどはすべてTCPを使っています。
 また,UDPを通さないプロバイダがあるかどうかというご質問ですが,前述したようにDNSなどの基礎的なものを通さない可能性はありませんので,UDPをすべて通さないプロバイダは存在しないでしょう。考えられるのは,ユーザーの安全対策としてファイアウォールでTCPのTelnetなどをブロックするのと一緒に,特定のUDPしか通さないようになっているという可能性です。
 これが原因となってゲームサーバーなどにアクセスできないというケースは容易に想像できます。こういったことが起こるようでしたら,プロバイダにブロックされていないUDPポートを聞くなどしてソフト側の設定を変更するのが現実的な対処法だと思います。

(渋谷 隆)