簡體   English   中英

UDP上可靠層需要哪些機制?

[英]What are the required mechanisms for a reliable layer over UDP?

我一直在為自己的游戲開發方面的項目編寫自己的網絡引擎。 這需要具有不可靠,可靠和有序可靠消息的選項。 但是,我無法確定可靠和有序可靠協議所必需的所有機制。

UDP上可靠層需要哪些機制? 附加的細節表示贊賞。

到目前為止,我認為這些是要求:

  • 確認收到的帶有序列號的消息。
  • 重傳時間到期后,重新發送未確認的消息。
  • 跟蹤每個目的地的往返時間,以便計算適當的重傳時間。
  • 識別並刪除重復的數據包。
  • 處理溢出的序列號。

這影響了我的體系結構,使其具有帶有序列和時間戳的可靠消息頭,確認消息以回顯接收到的序列和時間戳,基於地址跟蹤適當的重傳時間的系統以及一個線程,該線程a)接收消息並將其排隊以供用戶接收,b)確認可靠消息,並且c)使用過期的重傳計時器重傳未確認的消息。

注意:可靠的UDP與TCP不同。 甚至訂購的可靠UDP也與TCP不同。 我並不是暗中沒有意識到我真的想要TCP。 另外,在有人玩語義游戲之前,是的……可靠的UDP是“矛盾的”。 這是UDP上的一層,可確保可靠的傳送。

您可能想看看以下問題的答案: 當您需要可靠的UDP時使用什么?

我會在您的列表中添加“流控制”。 您希望能夠根據所獲得的往返時間來控制在特定鏈接上發送的數據量,否則您將淹沒該鏈接而只是丟掉數據報。

請注意,根據整個協議,有可能省去重傳計時器。 參見例如Quake 3網絡協議

在第3季度中,僅發送可靠的數據包,直到看到確認為止。

您為什么要重新發明TCP? 它提供了您最初聲明的所有功能,並且已經證明可以正常工作。

編輯-由於您的評論表明您還有其他最初未說明的要求,因此,應考慮使用多個套接字的混合模型是否比嘗試在單個應用程序層協議中滿足所有這些條件更好。

實際上,您似乎真正需要的是SCTP

SCTP支持:

  1. 基於消息(而不是字節流)的傳輸
  2. 一個Netsock套接字上有多個流
  3. 有序或無序的數據包接收

...消息排序在SCTP中是可選的; 接收應用程序可以選擇按照接收消息的順序而不是發送消息的順序處理消息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM