2010-12-20 145 views
3

我已經注意到,當我從udp套接字以偶數間隔發送數據包時,發送的第一個數據包似乎被延遲。例如,如果我每100毫秒發送一次數據包,我發現在我的網絡上,接收數據包的時間間隔平均爲100毫秒,平均標準偏差爲4。然而,第一個和第二個數據包的接收時間之間的差距通常在10到40毫秒左右 - 如您所見,這顯然是一個統計上顯着的差異,所以我的問題是,是什麼造成的?什麼導致udp接收延遲?

我在linux上使用C語言的sendto函數。有人建議,延遲可能是由arp解析導致的,從而阻止發送數據包直到目標ip被轉換爲mac地址 - 這可能嗎?如果我重新啓動發送程序,第一個數據包又需要很長時間,而且延遲不一致--10到40 ms是一個相當大的範圍。

我需要找出爲什麼這第一個數據包花費太長時間,以及如何解決它。

編輯:用pcap進一步分析表明發送程序正在以正確的間隔發送數據包。問題必須與接收器有關,它使用select()等待可讀套接字,然後調用recvfrom並打印數據包。有沒有我可能不知道的緩衝?

+1

你可以使用嗅探器來檢查它是否與計算機有關的東西與數據包的傳輸有關。 – 2010-12-20 10:55:45

+0

嘿,可以誰downvoted請張貼爲什麼? – Benubird 2010-12-20 13:05:16

回答

0

您已經詢問了解決方法。如果數據包的接收時間很重要,一種可能的解決方法是設置SO_TIMESTAMP套接字選項。這將允許您獲取目標內核接收到每個數據包的時間 - 然後您可以在後續處理中使用此時間,而不是「當前時間」。

或者,您可以讓發件人在它發送的數據包中包含高分辨率時間戳,然後使用這些時間戳。

1

投機將讓我們無處可去,火起來Wireshark它會告訴你所有你需要知道的。

+0

我正在運行一個非常精簡的系統,除灰塵和我的程序外沒有其他任何東西,而且我一直難以運行pcap。 Wireshark是正確的。 – Benubird 2010-12-20 11:24:09

+0

如果wireshark出了,那tcpdump呢?如果這不起作用,如果你可以讓你在一個以太網集線器上(而不是交換機),你應該能夠遠程嗅探網絡。 – doron 2010-12-20 11:47:19

+1

是的 - 我設法最終實現了這個目標,看起來數據包正在發送時它們之間有正確的差距;延遲必須在接收端。 – Benubird 2010-12-20 12:21:23

2

這很可能是ARP地址解析所需的時間。這是將MAC地址解析爲IP地址的協議。

要解決此問題,請嘗試使用arp -s ip-address hw_address的arp高速緩存中的靜態條目。

+0

不幸的是我不能 - arp命令不可用。 '-sh:arp:找不到'。好的建議,但。 – Benubird 2010-12-20 11:30:12

+0

對我來說,它是包「net-tools」(如ifconfig等)和/ sbin/arp中的一部分。它幾乎是每個發行版的基本工具,你有什麼? – hirschhornsalz 2010-12-20 11:35:45

+0

我有BusyBox v1.7.2(2010-11-17 12:19:56 GMT)內置shell(灰) – Benubird 2010-12-20 12:08:26

0

這是在一個局域網上嗎?如果是這樣,它可能(可能)是ARP和/或主機名解析。如果它跨越一個更大的網絡,它可能是任何東西(儘管可能與路由查找和緩存總體有關)。

+0

是的,單個局域網。兩臺機器和一臺通過交換機連接的DHCP服務器。 – Benubird 2010-12-20 12:24:28

+0

不可能是arp,因爲我確定數據包是以正確的順序發送的,因爲我確定arp緩存必須持續幾秒鐘。 – Benubird 2010-12-21 17:49:53

+0

@benubird ARP緩存保留取決於操作系統。看看你對Wireshark推薦的最後評論,它似乎是交換結構中造成延遲的原因。 – Vatine 2010-12-22 11:16:44

0

我沒有足夠的「聲譽」來投票認爲我認爲是最好的解決方案,所以我只是說那些提到ARP消息的人最有可能是正確的。我認爲ARP消息只適用於局域網。他們會在wireshark上顯示爲「誰擁有192.168.0.24?」例如...然後將有任何主機聲稱擁有該IP地址的回覆。最初的數據包通過UDP發送到這個地址必須得到一個ARP響應來將IP地址解析成一個以太網MAC地址...所以UDP在表面上看起來應該永遠不應該BLOCK ...但是這只是真的ARP地址被​​解析。我不確定,但我認爲如果您要將UDP發送到不在局域網中的地址,則不應該要求ARP ......除非發現主網關出現問題。