NcatはUDPを通して非常に遅いです。考えられる理由は?

NcatはUDPを通して非常に遅いです。考えられる理由は?

「a」、「b」、「c」という3つのサーバーがあり、すべて同じ/ 24サブネットマスクを使用します。

すべてのサーバーで、ncTCPポート9999と他の2つのサーバーのいずれかには常に0.01秒かかり、ポート9694のUDPは常に0.01秒かかります。2.01秒。

これは、ncat 7.70がインストールされているRHEL 8.6にあります。

UDP応答を遅くする設定パラメータはありますか?

$ hostname
FISPCCPGS302c

$ nc -zvu FISPCCPGS302a 9694
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 10.109.160.16:9694.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.01 seconds.

$ nc -zv FISPCCPGS302a 9999
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 10.109.160.16:9999.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

答え1

TCPとは異なり、UDPは接続指向プロトコルではありません。

ここではnc、1バイトのペイロードを含むパケットを送信し、UDPパケットでもICMPパケットでもTCPと同様に、ポートが利用できないか宛先をルーティングできないなどを示すメッセージが再び待機します。

通常、そのUDPポートでリッスンしているすべてのエントリは、UDPメッセージを送信者に送り返す理由はありません。たとえば、これがDNSサーバーの場合、着信1バイトのメッセージはガベージとして処理され、無視されます。回答を得るには、nmapUDPスキャンなどの正しいDNSクエリを送信する必要があります。

したがって、タイムアウト(netcatの場合は2秒と推定)内に応答が受信されない場合、netcatはICMPメッセージも受信しなかったため、UDPポートが開いていると想定します。

だからあなたが見るものは次のとおりです。

  • TCPでは、接続を確立するためにクライアントによって送信されたSYNに基づいて、相手のシステム(ここで実行されているサーバーソフトウェアではありません)がSYN + ACKで応答します。それはすぐに発生します。
  • UDPの場合、netcatはICMPパケット(ポートが開いていないことを示す)を受信しないため、ポートが開いていると仮定して2秒後にタイムアウトします。

サーバーソフトウェアの応答時間を推定するには、そのサーバーのプロトコルで適切な要求を行う必要があります。これはTCPとUDPの両方に適用されます。

dig . NS @"$address" -p "$port"たとえば、DNSサーバーの場合は、DNSクエリ(DNSサーバーが承認されたドメインに対するSOAクエリ、ルートドメインのNSクエリなど、アップストリームサーバークエリに関連しない一部のクエリ)を送信する必要があります。 〜1)、TCPの場合はUDPの場合は接続要求、データ、および終了パケットを送信し、応答を待つことを意味し、UDPの場合はクエリを含むパケットを送信して応答を待つことを意味します。


1たとえば、ここで実行されたテストのネットワークトレースでは、UDPポート53(DNSの標準ポート)でnmap -sU送信されます。サーバー状態要求DNSクエリ。

関連情報