プロトコルがTCPまたはUDPのどちらを使用しているかを知る方法


9

まあ、それは馬鹿げた質問に聞こえるかもしれませんし、私の経験が積み重なって、プロトコルについてどんどん学んでいくにつれて、最も適切な答えは私が言うことができるようになると思います。

しかし、私は学生であり、現場での経験はあまりありません。どのプロトコルでもグーグルできますが、経験則があるかどうか知りたいです。私はまだ「経験則」を求めるのは愚かだと思うが、それでも私はそれを探している。

Wikipediaこのリストに遭遇しました。これには、プロトコルと、表形式でTCPとUDPのどちらを使用するかが記載されています。ただし、特定のプロトコルの行に単一のポート番号を持つTCPとUDPの両方が含まれている場合の意味を理解できません。たとえば、Telnet行の場合は23-TCP-UDPです。これは何を意味するのでしょうか?TelnetはTCPポート23とUDPポート23の両方で動作しますか?

また、教科書でTFTPがUDPを使用していると記載されていますが、上の表を見ると、TFTP行は69-TCP-UDPです。したがって、上の表で何が起こっているのかを推測してください。

回答:


9

あなたは良い質問をしました。他の人に言わせないでください。

残念ながら、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を使用して「すべてのビット」が確実に到達するようにします。これは、完全なゾーン転送リクエストで一般的です。


2
はい、+1。DNSクエリは、クライアントからの単一のUDP要求と、それに続くサーバーからの単一のUDP応答で構成されます。伝送制御プロトコル(TCP)は、応答データのサイズが512バイトを超える場合、またはゾーン転送などのタスクに使用されます。
Ijaz Ahmad Khan 2016

@IjazKhan、そのような区別はもはやありません。RFC 7766を参照してください:「このドキュメントは、DNS実装のトランスポートプロトコルとしてTCPをサポートするための要件を指定し、DNS-over-UDPと同等のDNS-over-TCPパフォーマンスに関するガイドラインを提供します。このドキュメントはRFC 5966を廃止し、したがって更新されますRFC 1035とRFC1123。 "と" したがって、このドキュメントでは、コアDNSプロトコルの仕様を更新して、TCPのサポートが完全なDNSプロトコル実装の必須の部分となるようにしています。 "
Ron Maupin

6

ウィキペディアのページは最高ではありません。IANAはポート番号のレジストリを維持します(警告されます。現在は138ページです):サービス名とトランスポートプロトコルのポート番号レジストリ

アプリケーション層プロトコルは、トランスポート層プロトコルとポート番号を自由に使用できます。慣例として、ほとんどはレジストリで特定のポート番号を使用しますが、それは他のユーザーも使用できないことを意味しません。たとえば、WebサーバーはデフォルトでTCPポート80に設定されますが、他のポート番号を使用するように設定でき、URIでポート番号が指定されていれば、Webブラウザーは引き続きそれを使用できます。

TCPまたはUDPを使用するように設定できる多くのアプリケーションがあり、ポート番号を変更できます。これにより、競合や奇妙な実装を処理するときにある程度の柔軟性が提供されます。


5

実際には、どのトランスポートプロトコルが使用されているかを判断するのは非常に簡単です。また、「経験則」を探している場合は、次のことを考えてください。

UDPは「コネクションレス」/信頼性の低いプロトコルであり、TCPのように失われたパケットを回復せず、TCPよりもオーバーヘッドがはるかに少ないため、遅延に敏感なアプリケーション(ストリーミングオーディオ/ビデオなど)のトランスポートとして使用されます。

TCPは「接続指向」/信頼性の高いプロトコルであり、パケットが失われたときにパケットを回復し、オーバーヘッドが高くなりますが、パケットの損失が問題を引き起こす場合に使用されます。

ここでは、アプリケーションが使用しているトランスポート層プロトコルを実際に判断するために使用できるいくつかの方法を示します。

  • netstat -anWindowsコマンドプロンプトから実行します。
  • GUIビューのTCPView(UDPもリストされます)をダウンロードして実行します。
  • Wiresharkを実行する
  • nmap問題のポートを持つサーバーに対して実行します(デフォルトではTCPポートのみをスキャンします)

0

ウィキペディアリストのソースは、基本的にhttps://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txtであり、プロトコル固有の参照に基づいて時折行が更新されているようです。

古い割り当てでは、プロトコルが実際にどちらか一方しか使用していない場合でも、TCPとUDPの両方のポート番号がプロトコルに割り当てられているようです。たとえば、FTPには、TCPとUDPの両方のIANAテーブルにエントリがあります。これらのエントリはどちらもRFC 959を参照していますが、RFC 959にはUDPについての記述がありません。

一般に、アプリケーションプロトコルが実際に使用する基本的なプロトコルを見つけるための頼りになるリソースは、プロトコルを定義する標準になります。

一部のプロトコルは、ユーザーの選択(NFSなど)または要求の詳細(DNSなど)に応じて、TCPまたはUDPを使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.