2010-02-22 88 views
0

假設客戶端通過我的應用程序向服務器發送了一些數據報。如果我的服務器端應用程序停止工作並且無法接收任何數據報,但客戶端仍然繼續通過UDP協議向服務器發送更多數據包,那麼這些數據包將在哪裏進行?他們會留在服務器的操作系統數據緩衝區(或什麼?)如果客戶端不偵聽UDP端口,數據報是哪裏?

我問這個問題,因爲我想知道,如果客戶端通過互聯網向PC發送1000個數據報(每個1K),將這1000個數據報去通過互聯網(消耗帶寬),即使沒有人在聽這些數據?

如果答案是肯定的,我應該如何阻止這種情況發生?我的意思是如果服務器停止運行,我應該如何使用UDP來了解事實並停止進一步的發送?

感謝

回答

1

我問這個問題,因爲我想知道,如果一個客戶端發送1000個數據包(每個1K)到PC通過互聯網,將那些1000個數據包經過互聯網(消耗帶寬)即使沒有人在聽這些數據?

如果答案是肯定的,我應該如何阻止這種情況的發生?我的意思是如果服務器停止運行,我應該如何使用UDP來了解事實並停止進一步的發送?

您需要一個協議級別的控制迴路,即您需要實施協議來處理這種情況。 UDP不是面向連接的,所以它取決於使用UDP來解釋此故障模式的「應用程序」。

+0

感謝您的回覆。所以,如果服務器在互聯網上什麼也不運行,並且我使用udpclient發送,比如說100MB的數據,服務器上的操作系統仍然會收到它?而且我仍然會消耗100MB的數據帶給服務器? – Jack 2010-02-22 14:40:16

+0

是的,除非你有一些介於兩者之間的東西。這是生成拒絕服務的一種方法... – jldupont 2010-02-22 14:42:54

+0

謝謝。因此,如果我真的發送UDP數據100MB到某個服務器,如果該服務器的操作系統檢測到發送,並且服務器中沒有人收到它,它會生成DoS? – Jack 2010-02-22 15:04:27

0

UDP本身不提供設施來確定消息是否被客戶端成功接收。您需要TCP來建立可靠的連接,並在通過UDP發送數據之後。

0

最低的開銷解決方案將是一個保持活動類型的東西,如jdupont建議。您也可以更改爲使用tcp,它爲您提供此設施。

相關問題