2013-02-06 39 views
1

我在我的linux C++程序中觀察到意外的亂序數據包接收序列。在限制了接收套接字的數量之後,它再次依次接收數據包。另外,我也用boost :: asio或epoll明確地測試了這個問題,但它們都產生了相同的結果。另一方面,同樣的程序在Window環境下工作正常(使用boost.asio)。在linux下接收亂序數據包

我覺得很奇怪,我知道udp協議並不保證數據包按順序接收。但是,廣播發送者和接收者之間只有1個開關。因此,我認爲,無序是不可能的。在Window OS下(在同一網絡下)加上相同的程序工作正常。

假設包保證在傳輸層到達。額外的序列號檢查不是一個選項,改變協議也不是。

+2

所以這裏的基本想法是使用一個協議,允許出貨或訂購交貨,然後要求按訂單交貨嗎? –

回答

6

即使是本地主機到本地主機的通信也可能無序發送,其所有實現都依賴於它。由於不需要按順序交付,棧可以隨意在UDP的某處實現LIFO隊列。每個操作系統可以並且會有不同的表現。如果您必須使用UDP,則您預計OOO數據包並對其進行處理。

相關問題