1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-04-18 17:24:03 +03:00

add overview of MVFST and other info in README

Summary: Adds more info on README

Reviewed By: siyengar

Differential Revision: D15145263

fbshipit-source-id: 93fa6cb37250a08fd78577013d9eb9d20d74430b
This commit is contained in:
Udip Pant 2019-04-30 09:08:27 -07:00 committed by udippant
parent f5310e174c
commit 8399a99add
2 changed files with 75 additions and 22 deletions

View File

@ -1,6 +1,45 @@
![alt text](logo.png "MVFST")
## Introduction
`mvfst` is a client and server implementation of [IETF QUIC](https://tools.ietf.org/html/draft-ietf-quic-transport-20) protocol in C++ by Facebook. QUIC is a UDP based reliable, multiplexed transport protocol that will become an internet standard. The goal of `mvfst` is to build a performant implementation of the QUIC transport protocol that applications could adapt for use cases on both the internet and the data-center. `mvfst` has been tested at scale on android, iOS apps, as well as servers and has several features to support large scale deployments.
## Features
**Server features**:
- Multi-threaded UDP socket server with a thread local architecture to be able to scale to multi-core servers
- Customizable Connection-Id routing. The default Connection-Id routing implementation integrates seamlessly with [katran](https://github.com/facebookincubator/katran)
- APIs to enable zero-downtime restarts of servers, so that applications do not have to drop connections when restarting.
- APIs to expose transport and server statistics for debuggability
- Zero-Rtt connection establishment and customizable zero rtt path validation
- Support for UDP Generic segmentation offloading (GSO) for faster UDP writes.
**Client features**:
- Native happy eyeballs support between ipv4 and ipv6 so that applications do not need to implement it themselves
- Pluggable congestion control and support for turning off congestion control to plug in application specific control algorithms
- QUIC trace APIs to retrieve deep transport level stats.
## Source Layout
- `quic/api`: Defines API that applications can use to interact with the QUIC transport layer.
- `quic/client`: Client transport implementation
- `quic/server`: Server transport implementation
- `quic/codec`: Read and write codec implementation for the protocol
- `quic/common`: Implementation of common utility functions
- `quic/congestion_control`: Implementation of different congestion control algorithms such as Cubic and Copa
- `quic/flowcontrol`: Implementations of flowcontrol functions
- `quic/handshake`: Implementations cryptographic handshake layer
- `quic/loss`: Implementations of different loss recovery algotithms
- `quic/logging`: Implementation of logging framework
- `quic/happyeyeballs`: Implementation of mechanism to race IPV4 and IPV6 connection and pick a winner
- `quic/state`: Defines and implements both connection and stream level state artifacts and state machines
- `quic/tools`: Implementation of tools such as one to trace transport events within a connection
- `quic/sample`: Example client and server
## Building
## Dependencies
`mvfst` largely depends on two libraries: [folly](https://www.github.com/facebook/folly) and [fizz](https://www.github.com/facebookincubator/fizz).
## Building mvfst
### Ubuntu 16+
@ -47,7 +86,6 @@ built libraries and binaries for `mvfst`.
You can also install `mvfst` as well as its dependencies `folly` and `fizz`
to a custom directory using the build script, by supplying an `INSTALL_PREFIX`
env var.
```
./build_helper.sh -i /usr/local
```
@ -55,19 +93,34 @@ See `./build_helper.sh --help` for more options
You might need to run the script as root to install to certain directories.
By default the build script `build_helper.sh` enables the building of test target (i.e. runs with `-DBUILD_TEST=ON` option). Since some of tests in `mvfst` require some test artifacts of Fizz, it is necessary to supply the path of the Fizz src directory (via option `DFIZZ_PROJECT`) to correctly build all test targets in `mvfst`.
## Run a sample client and server
Building the test targets of `mvfst` (or via `build_helper.sh`) should automatically build the sample client and server binaries as well. You can then spin a simple echo server by running:
```
./quic/samples/echo -mode=server -host=<ip> -port=<port>
```
and to run a client:
```
./quic/samples/echo -mode=client -host=<ip> -port=<port>
```
For more options, see
```
./quic/samples/echo --help
```
## Contributing
We'd love to have your help in making MVFST better. If you're interested, please
We'd love to have your help in making `mvfst` better. If you're interested, please
read our guide to [guide to contributing](CONTRIBUTING.md)
## License
MVFST is MIT licensed, as found in the LICENSE file.
`mvfst` is MIT licensed, as found in the LICENSE file.
## Reporting and Fixing Security Issues
Please do not open GitHub issues or pull requests - this makes the problem
immediately visible to everyone, including malicious actors. Security issues in
MVFST can be safely reported via Facebook's Whitehat Bug Bounty program:
`mvfst` can be safely reported via Facebook's Whitehat Bug Bounty program:
https://www.facebook.com/whitehat

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB