2014-02-11 28 views
1

我正在寫一個異步c + + TCP網絡客戶端/服務器使用boost :: asio,我需要在任何使用情況下堅如磐石。我主要關心的是錯誤的連接,這在過去導致我很難找到問題。一個很好的方法來破壞TCP連接

編寫應用程序時,連接通常很好或非常好。我需要的是找到一種很好的方法來模擬包丟失,損壞,延遲尖峯和其他問題的各種不良連接。

是否有任何驅動程序或軟件,讓我這樣做?

+0

Mac OS X有一個預發送窗口,允許您設置網絡延遲,速度和數據包丟失。這同樣適用於iOS。不瞭解其他平臺。更多可以在這裏找到:http://nshipster.com/network-link-conditioner/ –

+0

這是一個無用的努力。 TCP執行一個校驗和來檢測商業機密(雖然不是_malicious_)損壞。此外,它透明地處理數據包丟失和增加的延遲,而不會影響它的影響。就目前而言,模擬這種東西是無用的。 – Damon

+0

更好地模擬每個recv-call只接收1個字節 – pindumb

回答

2

有幾種商業產品可以做到這一點,有些不錯。顯然,它們非常具有平臺特性,您不會對您的選擇平臺說些什麼。你指出的問題是操作系統級別,boost/C++與此無關。

至於腐敗,你真的不能有任何要求,除非你加密簽名的流量。

+0

該應用程序應該可以在linux和windows上運行。你能說出你想要的解決方案嗎? –

+0

[netlimiter](http://netlimiter.com/),[dummynet](http://info.iet.unipi.it/~luigi/dummynet/) –

2

TCP相當健壯。它已經處理了數據包丟失,損壞(用於隨機位翻轉而不是攻擊)併爲您節流。您應用程序需要處理的唯一事情是延遲尖峯和連接丟失。

通過在讀取方法中引入隨機延遲或通過在隨機時間點殺死連接,可以獲得相當好的里程數。

但是,處理它的最佳方式是爲您的應用程序考慮最糟糕的情況,並測試其中的一些。