-
Notifications
You must be signed in to change notification settings - Fork 119
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
implement path migration #554
Conversation
… that we could be using multiple CIDs at the same time
…es' into kazuho/path-migration
… send RCID for all those with sequence no greater than retire_prior_to
…at we send RCID frames up front
…d_at`) among all the paths
…try to decrypt packets arriving on new paths, as doing so would allow an attacker to race duplicated packets to prevent those arriving on legitimate paths from being decrypted (note: each PN is decrypted only once)
ToDo:
As to the second point, when a server receives a HTTP/3 request after quiescence with NAT rebinding involved, the server will send a HTTP/3 response to the old address while sending a probe to the new address. As the client has migrated to the new address, the packet carrying HTTP/3 response gets lost. This would be the most popular pattern of path migration and we are going to see negative effect on HTTP/3 throughput, unless we need to do something. Regarding what to do, for CC, one way of moving forward would be to reset whenever the path is migrated, potentially adopting the send rate on the old path as the jumpstart rate on the new path. Also, we might look into flushing the sentmap of the old path immediately when the new path is validated. Doing so allows the retransmission logic to kick in at an earlier moment. |
…et loss recovery)
…or retransmission
This reverts commit 07b28e5.
…too, if configured)
…e reflected in stats
fix hot loops introduced by #554
Design:
conn->paths[0]
is the path that will always exist, this path is always validation-complete once the handshake is complete and is the only path on which non-probing packets are sent.paths[1]
topaths[3]
are backup paths.path[0]
.Notes:
Config knobs:
max_probe_packets
- maximum number of probe packets to send before calling a path unreachable (default: 5)max_path_validation_failures
- once path validation fails for the specified number of paths, packets arriving on new tuples will be dropped (default: 100)Connection stats:
num_paths.created
- number of paths creatednum_paths.validated
- number of paths that were validatednum_paths.validation_failed
- number of paths that failed to validatenum_paths.migration_elicited
- number of paths on which migration was elicited (i.e., non-probing packets were received)num_paths.promoted
- number of paths that were promoted (for sending data)num_paths.closed_no_dcid
- number of paths that were closed due to Connection ID being unavailablenum_packets.sent_promoted_paths
- number of packets sent on any promoted pathnum_packets.ack_received_promoted_paths
- number of packets being acked among ones that were sent on any promoted path