-
Notifications
You must be signed in to change notification settings - Fork 20
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
Path abandonment is underspecified #455
Comments
Yes we need to correct the sentence to exclude PATH_ACKs. This was an oversight. I created PR #456. However, the procedure described above is not correct and not what is specified in the draft. B has to sent the PATH_ABANDON immediately and then both endpoints wait for 3PTO after receiving the PATH_ABANDON before they remove state. As usually all packets sent before the PATH_ABANDON will receive before the PATH_ABANDON and therefore will be ACKed, there is no need to wait for the ACKs first. If there is re-ordering, that's why we have the 3 PTO waiting time. Also note that when you try to wait for the ACKs first, you also need a 3 PTO timer as they might never arrive. Therefore I don't think it's really useful to wait for the ACKs first. |
There is no oversight. The handling of acknowledgements is fully specified in: 3.3.2. Handling PATH_ACK for abandoned paths When an endpoint decides to send a PATH_ABANDON frame, there may still be some unacknowledged packets. Some other packets may well be in transit, and could be received shortly after sending the PATH_ABANDON frame. As specified above, the endpoints SHOULD send PATH_ACK frames promptly, to avoid unnecessary data retransmission after the peer deletes path resources. The problem is in the sentence added at the end of section 7.2. PATH_ABANDON Frame. The text contradicts the more specification text in the "path close" section. That text should be replaced by a reference to path close. |
Hmm, I wanted to initiate a discussion about the best way to do and specify path abandonment, by describing an efficient and clear procedure above. Let me be point more explicitly on some issues, using the same A (initiator) and B roles as in the example above: B's sending of
|
The exact sequence of events during path abandonment is underspecified (or maybe underexemplified) in the document. It is, however, specifed that:
This requirement is a little hard to parse, but if read literally it would mean that incoming packets could not be acknowledged after a
PATH_ABANDON
frame has been sent. This would imply that a whole RTT-flight of packets in the other direction would be unacknowledged and thus needlessly retransmitted.This is the way I think that endpoint A abandoning a path with endpoint B should be done:
PATH_ABANDON
frame to B. After that, A continues to acknowledge incoming packets from B, on the same or another path.PATH_ABANDON
frame. It does not immediately send a reciprocalPATH_ABANDON
frame, but first waits for acknowledgments of the packets it has in flight (just like A did before it sent itsPATH_ABANDON
).PATH_ABANDON
to A and removes all state is has for the path.PATH_ABANDON
from B, it removes all state is has for the path and the path is completely abandoned.This procedure also handles concurrent abandonment from both endpoints well.
The text was updated successfully, but these errors were encountered: