2011-11-22 64 views
0

我想通過發送與源IP具有相同目標IP的數據包來使系統的等待時間有多快。這是相對簡單的事情嗎?定時發送和接收相同的數據包

您將如何定製構建數據包?

會設置兩個IP地址實現我後?

什麼是最佳的計時方法?

任何提示/想法在低/高層次將不勝感激。我打算在升級庫和libpcap上使用Unix上的C/C++。

編輯:我應該補充我會在家庭網絡上做這個,在路由器後面。如果我使用192.168.2.1(我的系統的本地IP)作爲源地址和目的地址,我認爲數據包會進入路由器並直接返回。

+1

它可能根本不會打到路由器。網絡驅動程序可能會注意到它們是相同的,因此無法在物理上達到網絡。 – Matt

回答

0

你可以嘗試ping你自己的IP。這會產生ICMP數據包。有些庫也允許您從應用程序中執行相同的操作。

如果您想爲自己創建數據包,則可以使用套接字API。請記住,您可以將源IP地址和目標IP地址發送爲相同,但端口號需要不同。

您需要的時間可以使用gettimeofday函數。

編輯: 你可以 ping你的C++程序。請參閱:http://verplant.org/liboping/或查看其他論壇。我強調ping的原因是它從網絡堆棧中直接返回。另一方面,如果您發送UDP數據包,期望應用程序返回並回顯,則會添加偵聽服務器上數據包的處理時間。

如果ping到本地計算機ip(或甚至lo),它會返回而不會轉到下一跳路由器。即使您刪除了您的eth電纜或wifi,它也會作出響應。

你正在做的是在NTP守護進程中用NTP協議實現。

+0

所以我從我的C++程序「平」? ICMP數據包將保留在網絡堆棧中,或者轉到路由器並返回? – user997112

+0

將我的答案附加到您的查詢中。 –

+0

謝謝Dipan。出於好奇,你會知道我上面對約阿希姆的最後評論的答案嗎? – user997112

0

您不需要爲此定製軟件包。只需創建一個連接到與服務器相同的IP地址的套接字,並開始發送包。請注意,這些軟件包永遠不會離開網絡堆棧,因此您將要測量的基本上是系統在用戶空間和內核空間之間複製數據的速度。

對於時機,您可以使用clock函數,它可能是最廣泛用於此類事情的函數。

+0

嗨Joachim,你說我唯一不會測量的唯一東西就是包裹在媒體上的實際物理傳遞嗎?如果是這樣,那不是一個大問題。 – user997112

+0

@ user997112這是正確的。 –

+0

只是最後一個問題:我問這個問題的原因是因爲我想了解更多關於高頻交易的信息。從尋找額外速度的角度來看,linux網絡堆棧已經得到了較好的優化。換句話說,你認爲這是linux HF開發人員重寫的部分之一嗎?或者像TCP一樣,這是否已經發展到儘可能高效? – user997112