No announcement yet.

FEC vs. ARQ vs. HARQ?

  • Filter
  • Time
  • Show
Clear All
new posts

  • FEC vs. ARQ vs. HARQ?

    In developing PDTP, I've been looking into the "bubble packet" approach to creating UDP links between NAT'd hosts by having both hosts establish NAT routes to each other, and consequently this requires hosts to utilize UDP as the underlying transport mechanism. I've been looking into a number of reliable UDP transport protocols, most of which are tailored to multicast and utilize Forward Error/Erasure Correction (FEC).

    There are a lot of companies now offering transport protocols based around FEC instead of TCP's traditional Automatic Repeat reQuest (ARQ) approach, most notably Aspera's FASP (which uses erasure codes, I believe),'s coded transport (from the creators of Kademlia), and ECIP.

    FEC's main benefit is, of course, that depending on the implementation it can require no backtraffic from the receiver (making it ideal for any kind of broadcast/multicast digital transmission). It's downside is that some type of redundancy computation (e.g. Vandermonde matrices) must be done on both the sender and receiver's side, making it much more CPU intensive than TCP.

    What would seem to be the ideal approach to me would be something that combines FEC and ARQ (sometimes referred to as Hybrid ARQ or HARQ), which attempts to achieve the bare amount of redundancy information necessary to avoid an ARQ for erasures. Hosts would periodically report back with statistics about the number of dropped packets they received and periodic ARQ requests for if redundancy data failed to replicate all dropped packets. Most of what I've found are research projects like SHARQFEC (what a mouthfull of a name), most of which date back to 1998. As far as I can tell, except for Aspera and all interest in incorporating FEC/erasure codes into a transport protocol diminished after 1998 or so... most discussion now seems to be around optimizing TCP performance for wireless links using FEC.

    The bottom line is I'm looking for reliable transport over UDP and I would like to integrate some type of FEC/HARQ error correction as well as congestion control, and above all else I don't really want to do any coding work Anyone have any ideas what I should be using or adapting to fit my needs?
    45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B0
    45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B1
    [ redacted ]