這是不可能的。在分佈式系統中衆所周知,你不能相信在所有節點上都有相同的時鐘。只有當你有像NTP這樣的機制時,你才能擁有類似的時鐘,但仍然存在時鐘漂移(這取決於你可以忍受的錯誤)。即使你有相同的時鐘,你也需要一種方法來確定數據包何時離開PC,而你沒有。它是一個受控制的環境,或者你可能有未知的客戶?您能容忍測量中的任何誤差範圍嗎?我們是在談論100毫秒還是少於10毫秒的時間?這些是解決您的問題的關鍵。
根據@progerz的評論添加信息到我的回覆 如果NTP和幾ms的時鐘漂移適合你,那麼你可能有一個機制去做你需要的。請記住,您擁有的環境越不受控制,這可能就不那麼有用。例如,這可以在同一個數據中心內正常工作,而且在Wifi餐廳的連接客戶端和數據中心的服務器之間的連接不太好。
關於修改UDP或TCP,如果你需要修改UDP頭,基本上你正在實現一個新的協議,這是一種可能性,你需要給它分配一個新的協議號。您將無法使用數據報AF_INET套接字(或TCP流情況下的流套接字),您必須考慮使用較低級套接字(如原始套接字(或套接字套接字),但這不是必需的)。
#include <sys/socket.h>
#include <netinet/in.h>
raw_socket = socket(AF_INET, SOCK_RAW, your_new_protocol_number);
另一種方法是通過UDP或TCP創建應用層協議。在這種情況下,你將能夠使用數據報/流套接字。
是的,但我必須得到服務器上的延遲,對於單獨的數據包,無需發送響應!那是主要特徵(和問題)。 – progerz
@progerz根據我的猜測編輯 – CrazyCasta
我不會低估,但推薦UDP或真正的任何「帶外」計時機制都有一些問題。更明顯的一點是,主流TCP流量和帶外測量很可能分開進行。或者將通過插入的開關元件進行不同的處理。使用「流失(out-of-flow)」機制來說明特定流量的內容是很難說的。 – cnicutar