[英]Timing sending and receiving the same packet
我想通過發送具有與源IP相同的目標IP的數據包來計時系統延遲的速度。 這相對簡單嗎?
您將如何自定義構建數據包?
設置兩個IP地址是否可以實現我的目標?
最佳計時方法是什么?
低/高水平的任何提示/想法將不勝感激。 我打算在帶有Boost庫和libpcap的Unix上使用C / C ++。
編輯:我應該補充,我將在路由器后面的家庭網絡中執行此操作。 我假設如果我將192.168.2.1(系統的本地IP)用作源和目標地址,則數據包將到達路由器並直接返回。
您不需要為此的自定義程序包。 只需創建一個連接到與服務器相同IP地址的套接字,然后開始發送軟件包即可。 請注意,這些軟件包永遠不會離開網絡堆棧,因此,您要測量的基本上是系統在用戶空間和內核空間之間復制數據的速度。
對於計時,您可以使用clock
功能,它可能是最廣泛使用的一種功能。
您可以嘗試ping您自己的IP。 這將產生ICMP數據包。 有些庫還允許您從應用程序執行相同的操作。
如果要自己創建數據包,則可以使用套接字API。 請記住,您可以發送相同的源IP地址和目標IP地址,但是端口號需要不同。
對於計時,您可以使用gettimeofday
函數。
編輯:您可以從您的C ++程序ping。 請參閱: http : //verplant.org/liboping/或查看其他論壇。 我強調ping的原因是因為它從網絡堆棧中返回。 另一方面,如果發送UDP數據包,期望應用程序返回並回顯,則將增加該數據包在偵聽服務器上的處理時間。
如果您ping到本地計算機ip(甚至lo
),它將返回而無需切換或下一跳路由器。 即使您拔掉eth電纜或wifi,它也會響應。
但是,您嘗試執行的操作是使用NTP協議在NTP守護程序中實現的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.