2010-09-19 39 views
7

即時通訊使用2臺計算機與應用程序發送和接收udp數據報。
沒有流量控制(ICMP禁用)
經常當我通過應用程序發送文件作爲UDP數據報,我送2包改變它們的順序,爲此 - 分組丟失。確保UDP中的數據包順序

是有辦法,以確保Winsock和發送()將發送數據包,他們到了那裏以同樣的方式?
或者是OS在做什麼?被禁用和種類的防火牆,並且計算機之間沒有連接硬件開關(它們直接連接)。 需要網絡設備配置嗎?
謝謝

回答

10

UDP是一個輕量級的協議,通過設計不處理像數據包序列的東西。如果您想要穩健的數據包傳輸和排序,TCP是一個更好的選擇。

UDP通常被設計爲,其中分組丟失是可接受的或優選的是哪個TCP即被當它具有重新請求的數據包的延遲的應用程序。 UDP因此通常用於媒體流。

如果你僅限於使用UDP你就必須開發識別出序列分組和重測序的方法等。

+0

你能解釋一下這是什麼[UDP的訂單(http://www.nasdaqtrader.com/ content/technicalsupport/specifications/TradingProducts/UFO.pdf)? – Sajuuk 2017-08-16 14:12:01

+0

@Sajuuk。看起來像一個PDF文件。如果你有問題,最好問一個新問題。 – PaulG 2017-08-16 15:03:52

7

UDP不保證您的數據包按順序到達。 (它甚至不保證你的數據包完全到達。)如果你需要這種穩健性,你最好用TCP。或者,您可以將序列標記添加到數據報中,並在另一端重新排列它們,但爲什麼要重新發明輪子?

+0

從一個實質性的原因我不能形容我只限於udp。一次又一次的罕見包丟失是可以接受的。它只是3個文件中的1個受到損失。我只需要找到一種方法讓發送者以正確的順序發送數據包,其餘的對我來說並不重要。謝謝 – Davidallencoe 2010-09-19 11:09:32

+1

這並不是發送方按照正確的順序發送數據包的問題,​​而是讓接收方將它們重新組裝成正確的順序。就像我說的,在一些適當的級別添加序列標記。 – crazyscot 2010-09-19 11:40:48

+0

UDP確保數據包完整或完全到達(即它具有校驗和),並且它還將端口號添加到原始IP。它不保證傳送或排序;那些是TCP增加的(通過基本上喊出一個包直到另一端說它已經到達)。保證正確的按順序傳遞也足以讓你假裝你有一個數據流(因此TCP是一個流媒體套接字,因爲這是很常見的)。 – 2010-10-03 19:52:47

4
有沒有一種方法可以確保winsock和send()會以與他們相同的方式發送數據包?

它被稱爲TCP。

可選擇地嘗試了可靠的UDP協議如UDT。我猜你可能在一個小的嵌入式平臺上,所以你需要一個更緊湊的協議,比如貝爾實驗室的RUDP

0

沒有流量控制(ICMP禁用)

可以使用UDP實現自己的流量控制:

  • 發送一個或多個UDP數據包
  • 等待確認(發送作爲另一個UDP數據包從接收器到發送器)
  • 重複如上

有關詳細信息,請參閱Sliding window protocol

[這將具有在發送數據包的序列號是除]