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

Restructure packetization section #985

Merged
merged 7 commits into from
Dec 13, 2017
Merged

Restructure packetization section #985

merged 7 commits into from
Dec 13, 2017

Conversation

martinthomson
Copy link
Member

This includes the changes from #849, which I have simply moved around.

I think that moving out the discussion on packet size to a subsection helps focus the attention on the most important part of this section, which is the discussion of how retransmission of frames works.

Closes #849.

Copy link
Contributor

@martinduke martinduke left a comment

Choose a reason for hiding this comment

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

I like the editorial reorganization. That section was too long.

I have few nits, mostly about shifting terminology of packet types.

Note also that @gloinul has some outstanding issues with this text. We can commit, but we can't yet close #614.


Clients MUST ensure that the first packet in a connection, and any
retransmissions of those octets, has a QUIC packet size of least 1200 octets.
The packet size for a QUIC packet includes the QUIC header and integrity check,
Copy link
Contributor

Choose a reason for hiding this comment

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

s/"packet size for QUIC packet"/"QUIC packet size"

Keep the terminology consistent, and shorter

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 think we need this; "QUIC packet size" is defined in Section 2.

Copy link
Member Author

Choose a reason for hiding this comment

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

I never realized that "QUIC packet size" was defined there. I think that this is the better place to add that definition.

The packet size for a QUIC packet includes the QUIC header and integrity check,
but not the UDP or IP header.

The initial client packet SHOULD be padded to exactly 1200 octets unless the
Copy link
Contributor

Choose a reason for hiding this comment

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

s/initial client/QUIC initlal

Copy link
Contributor

Choose a reason for hiding this comment

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

Perhaps "QUIC Initial and Handshake packets" ?

Copy link
Member Author

Choose a reason for hiding this comment

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

It's only Initial. I'll reword this.

an MTU of this size and helps reduce the amplitude of amplification attacks
caused by server responses toward an unverified client address.

Servers MUST ignore an initial plaintext packet from a client if its total size
Copy link
Contributor

Choose a reason for hiding this comment

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

s/initial plaintext packet/QUIC initial packet

Copy link
Member Author

Choose a reason for hiding this comment

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

Moar rewording coming up.

exist in other transports. PADDING frames generate acknowledgements, but their
content need not be delivered reliably. PADDING frames may delay the delivery of
application data, as they consume the congestion window. However, by definition
their likely loss in a probe packet does not require delay- inducing
Copy link
Contributor

Choose a reason for hiding this comment

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

Eliminate space after dash.

Copy link
Contributor

@janaiyengar janaiyengar left a comment

Choose a reason for hiding this comment

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

Looks good, a few minor things.

## Packet Size

Clients MUST ensure that the first packet in a connection, and any
retransmissions of those octets, has a QUIC packet size of least 1200 octets.
Copy link
Contributor

Choose a reason for hiding this comment

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

grammar nit: s/retransmissions/retransmission/ , since it's followed by "has a"


Clients MUST ensure that the first packet in a connection, and any
retransmissions of those octets, has a QUIC packet size of least 1200 octets.
The packet size for a QUIC packet includes the QUIC header and integrity check,
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 think we need this; "QUIC packet size" is defined in Section 2.

The packet size for a QUIC packet includes the QUIC header and integrity check,
but not the UDP or IP header.

The initial client packet SHOULD be padded to exactly 1200 octets unless the
Copy link
Contributor

Choose a reason for hiding this comment

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

Perhaps "QUIC Initial and Handshake packets" ?


All QUIC packets SHOULD be sized to fit within the estimated PMTU to avoid IP
fragmentation or packet drops. To optimize bandwidth efficiency, endpoints
SHOULD use Packetization Layer PMTU Discovery ({{!PLPMTUD=RFC4821}}) and MAY use
Copy link
Contributor

Choose a reason for hiding this comment

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

readability nit: long sentence, which is fine, but I would split it at the "and": "... SHOULD use Packetization Layer PMTU Discovery ({{!PLPMTUD=RFC4821}}). Endpoints MAY use ..."


QUIC endpoints that implement any kind of PMTU discovery SHOULD maintain an
estimate for each combination of local and remote IP addresses (as each pairing
could have a different maximum MTU in the path).
Copy link
Contributor

Choose a reason for hiding this comment

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

suggestion: remove the round brackets, and make the parenthetical phrase part of the main sentence.

Copy link
Member Author

Choose a reason for hiding this comment

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

or a new sentence

could have a different maximum MTU in the path).

QUIC depends on the network path supporting a MTU of at least 1280 octets. This
is the IPv6 minimum and therefore also supported by most modern IPv4 networks.
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: s/the IPv6 minimum/the IPv6 minimum packet size/

Copy link
Member Author

Choose a reason for hiding this comment

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

MTU, not packet size (a 1280 MTU implies a smaller packet size)


QUIC depends on the network path supporting a MTU of at least 1280 octets. This
is the IPv6 minimum and therefore also supported by most modern IPv4 networks.
An endpoint MUST NOT reduce their MTU below this number, even if it receives
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: s/their MTU/its MTU/

An endpoint MUST NOT reduce their MTU below this number, even if it receives
signals that indicate a smaller limit might exist.

If a QUIC endpoint determines that the PMTU between any pair of local and remote
Copy link
Contributor

Choose a reason for hiding this comment

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

There's obviously a good reason for this, which I can't seem to remember. Why do we disallow smaller packets? Can you add a note here about that as well, so it's obvious to any reader?

Copy link
Contributor

Choose a reason for hiding this comment

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

My reading of this is that the maximum must not be reduced, but if you have less to send, go ahead. This will trigger packet loss and eventual connection failure when sending bulk data on a network that does not honor the 1200 minimum and therefore possibly trigger a connection migration if possible, or otherwise stop a hopeless quest.

Copy link
Contributor

Choose a reason for hiding this comment

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

Another reason may be to prevent DoS attacks by injection of unverifiable network congestion control / status data.

Copy link
Member Author

Choose a reason for hiding this comment

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

I'm going to request that you open an issue if you care about this. This is old text and I'm not really equipped to deal with it right now. I think that @mikkelfj is approximately right. It might also be to avoid using paths that will drop random packets.

Frankly, I don't think that we need the requirement. If you know that this has happened, you can deal. The only real cost at that point is that you might be unable to create a new connection on that path.

Copy link
Member Author

@martinthomson martinthomson left a comment

Choose a reason for hiding this comment

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

Ugh, this is what you get when you move text. I swear I didn't change anything here.

Rewording coming up.


Clients MUST ensure that the first packet in a connection, and any
retransmissions of those octets, has a QUIC packet size of least 1200 octets.
The packet size for a QUIC packet includes the QUIC header and integrity check,
Copy link
Member Author

Choose a reason for hiding this comment

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

I never realized that "QUIC packet size" was defined there. I think that this is the better place to add that definition.

The packet size for a QUIC packet includes the QUIC header and integrity check,
but not the UDP or IP header.

The initial client packet SHOULD be padded to exactly 1200 octets unless the
Copy link
Member Author

Choose a reason for hiding this comment

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

It's only Initial. I'll reword this.

an MTU of this size and helps reduce the amplitude of amplification attacks
caused by server responses toward an unverified client address.

Servers MUST ignore an initial plaintext packet from a client if its total size
Copy link
Member Author

Choose a reason for hiding this comment

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

Moar rewording coming up.


QUIC endpoints that implement any kind of PMTU discovery SHOULD maintain an
estimate for each combination of local and remote IP addresses (as each pairing
could have a different maximum MTU in the path).
Copy link
Member Author

Choose a reason for hiding this comment

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

or a new sentence

could have a different maximum MTU in the path).

QUIC depends on the network path supporting a MTU of at least 1280 octets. This
is the IPv6 minimum and therefore also supported by most modern IPv4 networks.
Copy link
Member Author

Choose a reason for hiding this comment

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

MTU, not packet size (a 1280 MTU implies a smaller packet size)

An endpoint MUST NOT reduce their MTU below this number, even if it receives
signals that indicate a smaller limit might exist.

If a QUIC endpoint determines that the PMTU between any pair of local and remote
Copy link
Member Author

Choose a reason for hiding this comment

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

I'm going to request that you open an issue if you care about this. This is old text and I'm not really equipped to deal with it right now. I think that @mikkelfj is approximately right. It might also be to avoid using paths that will drop random packets.

Frankly, I don't think that we need the requirement. If you know that this has happened, you can deal. The only real cost at that point is that you might be unable to create a new connection on that path.

Copy link
Contributor

@janaiyengar janaiyengar left a comment

Choose a reason for hiding this comment

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

LGTM. Merge when you're ready.

@martinthomson martinthomson merged commit 150ea51 into master Dec 13, 2017
@martinthomson martinthomson deleted the mduke-plpmtu branch December 13, 2017 21:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants