これに対する答えが見つからないようです。
助言がありますか?
違いは、2つのプロトコルの性質そのものです。
[〜#〜] tcp [〜#〜] は 接続指向 プロトコルです。これは、システムが安定した接続を確立および確認する必要があることを意味します。TCPの場合、データが実際に転送される前に、プロセスは一般に「3方向 ハンドシェイク 」として知られています。良好な接続のためにはプロセスが迅速に行われる必要があるため、プローブされたときに開いているTCPポートが短い順序で応答することが合理的に予想されます。これは、ポートが閉鎖も非常に短い場合があります。
[〜#〜] udp [〜#〜] は、 connectionless プロトコルです。 UDPの場合、通信はリモートエンドからの受信のタイムリーな確認を期待せずに送信されます。したがって、リモートポートが閉じていると見なす前に、タイムアウトを長くする必要があります。タイムアウト後でも、そのような仮定は100%有効であるとは限りません。
ある意味では、次のようなものです。
TCPはあなたの電話に電話し、職場での火災を警告するために実際に電話をかけるのを待ちます。あなたがピックアップして彼らがあなたに話しかけると、彼らはあなたがメッセージを受け取ったことを知っています。ボイスメールが応答した場合、またはリダイレクトせずに電話が4回以上鳴った場合は、メッセージがすぐに届かないことがよくわかります。
UDPは 緊急アラート アナウンスを電話に送信して、火災を知らせます。彼らがあなたが建物を出るのを見ない限り、彼らはあなたがメッセージを受け取ったかどうか、あなたは知らないでしょう、階段の5つのフライトと100メートルのダッシュかそれ以降。そして、それはあなたがそもそも建物の中にいることを前提としています。
ここで、1,000人程度の人に火災について通知する必要があったとします。ただし、一度に1つだけを伝えることができ、次の試行を行う前に、それぞれからの受信の確認(または確実に受信されないことを確認するための妥当な時間)を待つ必要がありました。
ポートスキャン( Nmap またはその他のツールを使用)は、そのようなものです。 TCPは比較的高速で、おそらくかなり正確です。UDPを使用すると、リストを通過する前にonce、そしてあなたはまだあなたがメッセージを送った人が周りにそれを気にかけていたのかどうか本当に確かではありません。
nmapページ から
UDPスキャンの大きな課題は、それを迅速に行うことです。開いてフィルタリングされたポートはほとんど応答を送信せず、Nmap=タイムアウトして、プローブまたは応答が失われた場合に備えて再送信を行います。閉じられたポートは、さらに大きな問題であることがよくあります。 ICMPポート到達不能エラー。ただし、SYNまたは接続スキャンに応答してクローズされたTCPポートによって送信されたRSTパケットとは異なり、多くのホストはデフォルトでICMPポート到達不能メッセージをレート制限します。LinuxおよびSolarisは特にたとえば、Linux 2.4.20カーネルでは、宛先到達不能メッセージが毎秒1回に制限されています(net/ipv4/icmp.c内)。
Nmapはレート制限を検出し、それに応じて速度を落として、ターゲットマシンがドロップする無駄なパケットでネットワークが溢れるのを防ぎます。残念ながら、毎秒1パケットというLinuxスタイルの制限により、65,536ポートのスキャンには18時間以上かかります。 UDPスキャンを高速化するためのアイデアには、より多くのホストを並行してスキャンする、最初に人気のあるポートのみのクイックスキャンを実行する、ファイアウォールの背後からスキャンする、低速ホストをスキップする--Host-timeoutを使用することが含まれます。
それらは異なるプロトコルです。 UDPでは、指定されたタイムアウトの間、応答を待つ必要があります。TCPで、スリーウェイハンドシェイクを取得した後、ポートが開いていることがすぐにわかります。ポートが閉じている場合は、 RST
フラグが設定されたパケットを取得するので、すぐに次のポートに移動できます。
UDPスキャンの速度をさらに上げることが可能です。nmapを使用すると、--min-rate
、--max-rtt-timeout
および--max-retries
いくつかの設定を微調整します。