Giter Club home page Giter Club logo

Comments (15)

tfpauly avatar tfpauly commented on July 17, 2024 1

I'm not sure the consensus was clear, but I think it's upon us to make a proposal and see if it flies =)

from draft-ietf-masque-connect-ip.

mirjak avatar mirjak commented on July 17, 2024

This is only a problem for the end-2-end QUIC handshake packets, right? I was assuming that you either have a QUIC tunnel that has a larger MTU in order to use datagrams or you have to use stream-based transmission for the e2e handshake and then need a way to switch to datagram later. In any case we need to say more in the draft!

from draft-ietf-masque-connect-ip.

bemasc avatar bemasc commented on July 17, 2024

From the most recent session, I think we may have consensus to address this by noting that CONNECT-IP over H3 requires a minimum link MTU of X bytes on every HTTP hop for IPv6 compliance, leaving support for smaller links to an extension.

from draft-ietf-masque-connect-ip.

DavidSchinazi avatar DavidSchinazi commented on July 17, 2024

That sounds like the best path forward.

from draft-ietf-masque-connect-ip.

DavidSchinazi avatar DavidSchinazi commented on July 17, 2024

I propose a simple solution that should be enough for most use-cases:

  1. if any endpoint detects that the path MTU is too low, it MUST close the tunnel if the tunnel had IPv6 addresses or routes on it. Endpoints are not required to measure the path MTU.
  2. endpoints that wish to use IPv6 SHOULD ensure that their path MTU is sufficient. For example, that can be guaranteed by padding QUIC initial packets to 1320 bytes.

from draft-ietf-masque-connect-ip.

tfpauly avatar tfpauly commented on July 17, 2024

That seems reasonable to me as a proposal!

from draft-ietf-masque-connect-ip.

gloinul avatar gloinul commented on July 17, 2024

I propose a simple solution that should be enough for most use-cases:

  1. if any endpoint detects that the path MTU is too low, it MUST close the tunnel if the tunnel had IPv6 addresses or routes on it. Endpoints are not required to measure the path MTU.
  2. endpoints that wish to use IPv6 SHOULD ensure that their path MTU is sufficient. For example, that can be guaranteed by padding QUIC initial packets to 1320 bytes.

So how does the endpoint determine that the Path MTU is too low? In the scenario that looks like this C - I1 -I2 - S and it is the I1-I2 path that can't support 1280 byte datagrams. The I nodes are HTTP intermediaries. The client will not know that the datagram MTU size is too low on these nodes, to my understanding the datagram payloads will simply be dropped by the I nodes in either direction.

from draft-ietf-masque-connect-ip.

DavidSchinazi avatar DavidSchinazi commented on July 17, 2024

In that scenario, if the endpoint wants to check it can send an ICMPv6 echo request with 1232 bytes of data - if it receives an ICMPv6 echo reply that means that the path supports the minimum IPv6 MTU.

from draft-ietf-masque-connect-ip.

gloinul avatar gloinul commented on July 17, 2024

@DavidSchinazi then we are making it mandatory to send ICMPv6 echo to the external address assigned for the client, and for the server sending one to the client, this to determine that minimal 1280 bytes are working over MASQUE. Because to me there are no way the MASQUE endpoint can determine in all cases if there are HTTP intermediaries or not. Else we have to put requirements on the HTTP intermediaries to understand MASQUE, and to my understanding what was not desired.

And maybe using ICMPv6 is the easiest method with the lowest implementation burden. The issue I see with this aspect is that many applications when establishing a Connect-IP path might not want to wait for the ICMPv6 response before sending other traffic so we have a situation where there is a small, but non-zero risk that these packets goes into a black hole, and then the ICMP response comes back and the MASQUE Connect-IP stream will be closed due to the response to indicate the failure. I think this is all manageable and not different from failures that can occur for other reasons.

from draft-ietf-masque-connect-ip.

DavidSchinazi avatar DavidSchinazi commented on July 17, 2024

I don't see why this should be mandatory. When I plug in an Ethernet cable into my computer, I don't know whether the IP stack on the next router spuriously drops packets above 1000 bytes long, and my OS has no requirement to measure the path MTU.

from draft-ietf-masque-connect-ip.

gloinul avatar gloinul commented on July 17, 2024

But for the said router dropping IPv6 packets below 1280 would be a protocol violation. The issue here is the interaction with the HTTP intermediaries and what is under the control of Connect-IP function. So Connect-IP basically provides a IPv6 capable link. Per IPv6 RFC that requires us to support 1280 at least. What have been the rough consensus so far is that we are not defining an fragmentation and reassembly mechanism, or rather how to ensure that one uses QUIC streams when the transport is HTTP/3 for below 1280 IPv6 packets and instead reject the service. Thus we are in the position of having to answer how does one know when to reject the service. The alternatives I see are:

  1. Force the Connect-IP endpoints to ICMP ping each other to verify that the path supports 1280 IPv6 packets
  2. Have the HTTP intermediaries be Connect-IP aware to the level that they can reject the HTTP request if the path does not support 1280 packets.

Where 2) have the downside that we still likely have some black holes in cases where the HTTP intermediaries are not connect-IP aware and ignores the requirements.

Where 1) have the downside that the endpoints request can't be rejected during the request response sequence and instead have to be closed with an error message indicating the paths failure to support the packet.

from draft-ietf-masque-connect-ip.

DavidSchinazi avatar DavidSchinazi commented on July 17, 2024

I'm opposed to requiring ICMP pings because the majority of use-cases will not have this problem. How about we add text like this:

CONNECT-IP endpoints that enable IPv6 connectivity in the tunnel MUST ensure that the tunnel MTU is at least 1280 bytes to meet the IPv6 minimum required MTU. This can be accomplished multiple different ways, including:

  • Endpoints padding QUIC initial packets when it is known that there are no intermediaries present
  • Endpoints sending ICMPv6 echo requests with 1232 bytes of data
  • an out of band agreement between one of the endpoints and any involved intermediaries to have them pad QUIC initial packets

from draft-ietf-masque-connect-ip.

gloinul avatar gloinul commented on July 17, 2024

So I understand your desire to not add complexity anywhere for a likely seldom arising case. However, I do fear that not addressing this with a clear assignment on whose responsibility it is to avoid the issue will result in that none does anything of it. Because an endpoint that uses HTTP/3 can verify its first hop. However, the complexities arise when you have HTTP intermediaries in the mix.

from draft-ietf-masque-connect-ip.

DavidSchinazi avatar DavidSchinazi commented on July 17, 2024

I get that, but since the complexity is added by intermediaries we just need to make it clear that the intermediary needs to not be silly

from draft-ietf-masque-connect-ip.

mirjak avatar mirjak commented on July 17, 2024

One part is to detect if the link is capable of 1232 bytes, however, if not, we also not to provide more guidance what to do. I think there are two options: either close the connection or use quic streams instead of data datagrams.

from draft-ietf-masque-connect-ip.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.