1
因爲多播數據包爲基礎,在一般的UDP它的在本地主機上不可靠的多播分組順序
我假設一個分組只複製從一個進程的緩衝區到另一個從而,將在順序作爲被有點兒排隊發件人傳送,對嗎?
什麼我不知道的是:
- 我可以在一般假定在本地主機上的多播(或UDP)正確的包順序?如果沒有,爲什麼?
- 不同的操作系統處理(win,mac,linux)具體區別是什麼?
謝謝
因爲多播數據包爲基礎,在一般的UDP它的在本地主機上不可靠的多播分組順序
我假設一個分組只複製從一個進程的緩衝區到另一個從而,將在順序作爲被有點兒排隊發件人傳送,對嗎?
什麼我不知道的是:
謝謝
我可以假設正確的包順序一般在本地主機上的多播(或UDP)?如果沒有,爲什麼?
不,因爲數據包沒有編目。此外,正如你可能已經知道的那樣,不保證循環連接將保持UDP的順序。
不同的操作系統處理(win,mac,linux)具體區別是什麼?
協議沒有區別(請參閱RFC),但基本細節很可能取決於平臺(和版本),我確定沒有人知道它們是手動的(有些是非常靠近的)。這是有序性最有可能得不到保證的另一個原因。即使你測試了這個並且數據包按順序排列,依靠循環連接中的UDP數據包的順序,這是一個非常糟糕的主意(tm)。
也:UDP是「不可靠的」,雖然真實,可以誤導的論點。許多有安全意識的軟件通過UDP工作,一般來說,只有一小部分數據包被丟棄。如果使用適當的意外事件,如果使用UDP(爲了性能,可以說)和數據包丟失,軟件不應該炸燬。但是如果你擔心它,爲什麼不使用TCP?
我問的原因只是出於好奇,因爲如果輸入udp數據包的內核數據結構是例如一個向量或FIFO,然後數據包將按順序傳遞,但是如果它像堆棧一樣,數據包可能按不同的處理時間按不同的順序進行推送/壓入 –
@JohnDoe沒有理由爲什麼它會是堆棧,所以你可以合理地假設在接收端有某種類型的FIFO,但它是無關緊要的。你不能假設的是發送和接收之間的任何順序,因爲協議特別小心,不要保證任何這樣的事情。 – EJP