あなたは良い質問をしました。他の人に言わせないでください。
残念ながら、TCPを使用するプロトコルのタイプとUDPを使用するプロトコルのタイプの経験則はありません。
プロトコルがどちらを使用するかは、最初にプロトコルを作成または作成した人が決定します。
独自の「信頼性の高い配信」システムを作成したくない場合は、TCPを使用するだけで、すべての信頼性を本質的に提供できます。
彼らが(自分のプロトコルを最初から知っている)より良いまたはより適切な「信頼できる配信」システムを書くことができると思った場合、彼らはそれをプロトコル自体に組み込み、単にトランスポートとしてUDPを使用できます。
例として、UDP TFTPサンプルキャプチャを見てみましょう。TFTP自体に組み込みの確認応答システムがあることに気づくでしょう。これらのシステムとTCP内の追加の確認応答システムの両方を持つことは、単純に冗長になります。
一方、TCPを介して実行されるFTPには、確認応答システムが組み込まれていません。ユーザーはファイルを要求するだけで、送信者はそれを送信します。「ファイル転送完了」通知がありますが、ファイルの各ビットを受信したことを保証するものはありません。FTPはTCPの信頼性に依存して、ファイルが確実に届くようにします。
とはいえ、リンクしたWikiページのポートのリストを調べたところ、TCP と UDPを使用していると思われるプロトコルが驚くほど多く見られました。これは私には関係がありませんでした。両方を使用していること(つまりDNS)を知っているのはごくわずかです。しかし、それはTCPを使用するTFTP実装があるかもしれません、そして、もしそうなら、私はそれにさらされていないと思います。
ドメインネームシステム(DNS)は、TCPとUDPの両方を使用するプロトコルについて説明するときに参照されるプロトコルです。これらを同時に使用することはできません。しかし、DNS内のさまざまな機能がTCPとUDPを必要とする場合があります。
たとえば、単純なAレコード解決要求を行う場合、「要求」と「応答」は非常に軽量で、どちらも単一のパケットを必要とします。そのため、これは通常UDPを介して行われます。
ただし、要求または応答が(特定のバイト数を超える)より大きな転送を必要とする場合、DNSはTCPを使用して「すべてのビット」が確実に到達するようにします。これは、完全なゾーン転送リクエストで一般的です。