https://github.com/getlantern/multipath
Bond multiple connections for throughput and reliability.
https://github.com/getlantern/multipath
Last synced: 8 months ago
JSON representation
Bond multiple connections for throughput and reliability.
- Host: GitHub
- URL: https://github.com/getlantern/multipath
- Owner: getlantern
- License: apache-2.0
- Created: 2020-08-21T08:07:33.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2023-06-10T10:41:16.000Z (about 3 years ago)
- Last Synced: 2024-04-15T03:25:47.081Z (about 2 years ago)
- Language: Go
- Size: 104 KB
- Stars: 45
- Watchers: 17
- Forks: 9
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Multipath aggregates ordered and reliable connections over multiple paths together for throughput and resilience. It relies on existing dialers and listeners to create `net.Conn`s and wrap them as subflows on which it basically does two things:
1. On the sender side, transmits data over the subflow with the lowest roundtrip time, and if it takes long to get an acknowledgement, retransmits data over other subflows one by one.
1. On the receiver side, reorders the data received from all subflows and delivers ordered byte stream (`net.Conn`) to the upper layer.
See docs in [multipath.go](multipath.go) for details.
This code is used in https://github.com/benjojo/bondcat, and hat's off to [@benjojo](https://github.com/benjojo) for implementing [many fixes](https://github.com/benjojo/bondcat/tree/main/multipath).
At a high level, this concept is built on a similar notion as [MultiPath TCP](https://www.multipath-tcp.org/), but our "multipath" works at a higher level in the stack where it implements different protocols that each have their own subflow but are all running on their own TCP or reliable UDP transports underneath.