2012-02-08 38 views
2

我正在開發一個在本地網絡中使用的UDP協議,在源和目標之間只有一個交換機(cisco,3com等),這兩個Linux系統都是相同的MTU。 在這種情況下,我應該多久看一次udp數據包在目的地被複制(顯然不是由我,而是由交換機或服務器)?我需要這個知道是否在我的代碼中執行重複檢查。重複udp數據包:它發生多少次?

+0

大概不會太頻繁,但我不會基於這個假設建立我的程序。你爲什麼不使用TCP? – 2012-02-08 16:15:59

+0

,因爲TCP很慢 – Nulik 2012-02-08 16:50:01

+0

有什麼合理的解釋爲什麼(以及如何)本地交換機克隆UDP數據包? – Vyktor 2012-02-08 16:56:52

回答

5

交換機在使用廣播或在極端條件下(全MAC地址表)將數據包發送到所有接口。如果兩臺或多臺交換機之間存在環路並且沒有使用生成樹協議,則可能導致重複。所以答案很少。

0

在目標主機中接收重複UDP數據包的可能性取決於從源主機接收數據包的目標接口的數量。如果其中的三個接口(eth1,eth2,eth_int)可以同時從源獲取數據包,則目標將收到三個重複的UDP數據包。

+0

但是所有這些接口(eth1,eth2等)都不能使用相同的IP地址,因此在描述的情況下不應該有重複。 – Nulik 2012-02-08 19:11:08

+0

如果目標主機中的套接字綁定到INADDR_ANY,並且源廣播UDP數據包,則可能會收到重複數據包。 – 2012-02-08 20:32:56

+0

但我不是在談論這種重複。我正在談論交換機/路由器或內核重新傳輸數據包,而不用擔心。如果數據包經過很多路由器,這可能會很容易發生,但我正在談論本地網絡 – Nulik 2012-02-09 02:00:21

2

從我讀過一個故事的記憶〜20年前...

有是重複的UDP數據包有故障的路由器。長話短說,發現一些中斷過度頻繁發生。造成以下情形:

  1. 路由器去了外發數據包隊列
  2. 它發送的數據包,它標誌着它之前爲發送...
  3. 中斷長大。
  4. 由於某些原因,處理完中斷後,路由器回去檢查外出的數據包隊列,而​​不是將數據包標記爲已發送(一個無關的錯誤?),導致它重新發送同一數據包,直到中斷之間的間隔足夠長的時間來完成第2步。