In crowded Internet, all connections are not reliable. To minimize jitter and packet loss, we can send it through different routes simultaneously then get redundancy.
flowchart LR
C[UDP Client]
PC[Paracat Client]
D{Data}
PS[Paracat Server]
S(UDP Server)
C -->|"handleForward()"| PC
C <-->|MultiPort<->SinglePort| PC
PC -->|"handleReverse()"| C
PC -->|"
SendUDPLoop()
SendTCPLoop()
Scatterer
"| D
PC -->|MultiPort<->| D
D -->|"
handleUDPRelayRecv()
ReceiveTCPLoop()
Gather
"| PC
D -->|"
handleUDPListener()
ReceiveTCPLoop()
Gather
"| PS
D -->|<->SinglePort| PS
PS -->|"
SendUDPLoop()
SendTCPLoop()
Scatterer
"| D
PS -->|"handleForward()"| S
PS <-->|MultiPort<->SinglePort| S
S -->|"handleReverse()"| PS
- Round-robin mode
- Remove unused UDP connections
- GRO & GSO
- Optimize delay
- Re-connect after EOF
- Congestion control algorithm
- Fake TCP with eBPF
- UDP MTU discovery with DF
- API interface