Skip to content
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

Skip a packet number when sending one PTO packet #2952

Merged
merged 4 commits into from
Mar 17, 2020

Conversation

ianswett
Copy link
Contributor

@ianswett ianswett commented Aug 2, 2019

Indicates that peers can skip a packet number when sending a single PTO packet to elicit a faster ACK.

@ianswett ianswett added editorial An issue that does not affect the design of the protocol; does not require consensus. -recovery labels Aug 2, 2019
expensive consecutive PTO expiration due to a single lost datagram.
expensive consecutive PTO expiration due to a single lost datagram. When only
sending a single packet on PTO, senders can skip a packet number to elicit a
faster acknowledgement.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand this: while packet numbers are usually incremental, that does not carry any semantics to my knowledge. PN's are skipped to guard against optimistic ACK attacks. It would be unfortunate if that praxis affects retransmission?

That said, I think it would be great if PN's could be assumed to be incremental, but there is no good solution to the optimistic ACK attack so far.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIUC, skipping a packet number is a way to elicit an immediate ACK.

Quoting from section 4: In order to accelerate loss recovery and reduce timeouts, the receiver SHOULD send an immediate ACK after it receives an out-of-order packet.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But how is "out-of-order" defined?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So if both endpoints skip every second packet number early in the connection, in order to aggressively detect optimistic ACK's, would that lead to an ACK flood?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The term is defined in section 2.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we recommending to skip packet numbers over just including a PING? The former causes more overhead in the reverse direction.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@larseggert IIUC, the receiver of a PING is not required to send an ACK immediately.

My slight preference goes to handling the issue below the framing layer, because it'd be only after you've generated the payload of a packet (by gathering frames) that you discover that the packet that is going to be sent is a tail.

Copy link
Member

@kazuho kazuho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that this is a good advice. OTOH, I wonder if it might be better to suggest that such approach is possible for all tails, not just PTOs.

@janaiyengar
Copy link
Contributor

This is a clever idea, but I don't think that we want to write it down in the spec. It's allowed by the spec, so people can surely do it, but we are talking about immediate ACK signaling in other ways too, and I don't think we want to encourage this behavior.

@marten-seemann
Copy link
Contributor

@chumd

Thats brialliant idialistic for futured company soon.......

Yeah, it's incredible how much money they will make by skipping packet numbers. If I had just known about this before...

@quicwg quicwg deleted a comment Sep 13, 2019
@quicwg quicwg deleted a comment Sep 13, 2019
@ianswett
Copy link
Contributor Author

I'm going to run an experiment comparing 1 PTO packet, 2 PTO packets, and 1 with skipping a packet number and report back the results. If the results are good enough with 1PTO + gap, we can consider whether this is an optimization worth mentioning.

@ianswett ianswett closed this Sep 13, 2019
@mikkelfj
Copy link
Contributor

Can also test this both sides at the same time? I'm still concerned this might run away in ACK floods.

Indicates that peers can skip a packet number when sending a single PTO packet to elicit a faster ACK.
martinthomson and others added 3 commits March 18, 2020 09:46
@janaiyengar janaiyengar merged commit 63ee9b0 into master Mar 17, 2020
@janaiyengar janaiyengar deleted the ianswett-skip-packet-number branch March 17, 2020 22:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-recovery editorial An issue that does not affect the design of the protocol; does not require consensus.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants