For many use cases, reordering tolerance (on "hosts" in IETF terminology) is possible and very useful for some intermediate nodes (routers, switches).
But #1: Ordering would be always a requirement for some use cases: 1. Real-time communication (especially anything interactive). This use case has no time to wait "maybe the packet would arrive later". 2. High-speed transmission accelerated in NIC. It is prohibitively expensive to have such a big memory just for reordering functionality. But #2: Reordering is a big problem for stateful devices ("middleboxes" in IETF terminology) - they cannot have such a huge memory and they should not create latency. If intermediate nodes should support ordering for some applications and cannot distinguish between applications, then all efforts to improve reordering tolerance for some applications would have minimal usefulness. This > write an explicit RFC giving guidance how much reordering is deemed acceptable Should be radically different "per use case or application". Ed/ -----Original Message----- From: Sebastian Moeller <moeller0=40gmx...@dmarc.ietf.org> Sent: Saturday, February 8, 2025 15:03 To: Michael Eriksson <michael.eriksson=40ericsson....@dmarc.ietf.org> Cc: Martin Thomson <m...@lowentropy.net>; Greg White <g.wh...@cablelabs.com>; IETF QUIC WG <quic@ietf.org>; ts...@ietf.org Subject: [tsvwg] Re: Robustness to packet reordering > On 8. Feb 2025, at 11:38, Michael Eriksson > <michael.eriksson=40ericsson....@dmarc.ietf.org> wrote: > > Well, QUIC receivers can easily handle an almost unlimited amount of > reordering. Quick note, if we are not talking about multiplexing within one 5 tuple*, then I believe there is quite some use cases where the data is only usable if all segments have been received. So out of order delivery might not actually give any big advantage in application latency. E.g. if we consider the case with a slow bottleneck (e.g. WiFi) in an otherwise fast path, there the resequencing will mostly result in creating line speed bursts from the receiver side of the bottleneck, if the ratio between bottleneck rate and rate on the reminder of the path the latency gained for doing out of order delivery instead of re-sequencing is rather mild. *) I understand the rationale for adding multiplexing to (each) protocol layer, but occasionally maybe using multiplexing via the lower layer's mechanism is a viable option... > The problem is the senders, and in particular the loss detection and > congestion controller. As has already been mentioned in the thread, the > default packet reordering threshold (kPacketThreshold) is only three packets. > > It is of course possible to adapt the threshold dynamically as the RFC > mentions, and with Ack Frequency you can also reduce the number of (spurious) > acks. > > Until it is verified that "all" production QUIC stacks implement dynamic > packet reordering thresholds, it seems unwise to completely turn off L2 > in-order delivery. I note that endpoints (EP) and intermediate hops (IH) have different desires in regards to reordering... EPs really want as little reordering as possible even if they can deal with it (as resequencing will translate into latency), while IHs want as much freedom as possible and as little work*. So IMHO if the IETF truly feels that more re-ordering is tolerable we should write an explicit RFC giving guidance how much reordering is deemed acceptable, "completely turn off L2 in-order delivery" seems not in the interest of end points... I guess giving guidance in units of time might be helpful unless tied to something an IH might not be privy to like path-RTT/OWD. *) This is why IHs typically do not seem to restrict reordering to flows that actually are affected by a link layer packet loss but apply it unconditionally to all traffic. Getting information about which packet aggregates are fate-sharing and hence would gain something from re-seqiencing can be computationally costly to impossible. Sebastian > > /me > > From: David Schinazi <dschinazi.i...@gmail.com> > Subject: [tsvwg] Re: Robustness to packet reordering > Date: Fri, 7 Feb 2025 00:14:28 +0100 (Central European Standard Time) > >> Having the link-layer delay packets to provide them in-order to the >> transport layer was helpful multiple decades ago when TCP implementations >> had more naive algorithms and were very resource-constrained. Given how >> modern implementations work, reordering at the link-layer is almost always >> harmful. TCP and QUIC stacks can handle reordering well, thanks to both >> protocol features and implementations having more memory to work with. The >> delay induced by this reordering will generally cause more harm than good. >> Furthermore, one of the biggest motivators for QUIC was to break >> head-of-line blocking and allow out-of-order delivery to the application >> layer. We have large bodies of data showing that this improves performance. >> Please disable reordering at the 5G layer. >> >> David >> >> On Thu, Feb 6, 2025 at 2:15 PM Christian Huitema <huit...@huitema.net> wrote: >> >> On 2/6/2025 12:55 PM, Martin Thomson wrote: >> > >> > On Fri, Feb 7, 2025, at 04:59, Greg White wrote: >> >> This is an important topic relating to the expectations and >> >> requirements that transport protocols place on layer 2 protocols. >> >> In layer 2 standards bodies that I've been involved in, it has >> >> been understood that "the upper layers" expect in-order delivery, >> > As far as QUIC goes, it is sensitive to reordering in the network. Some >> > reordering will be interpreted as damage (Christian cited the relevant >> > parts) and performance suffers in a few minor way when things arrive out >> > of order (ACKs are less efficient, data needs to be held, memory accesses >> > are less likely to be contiguous, etc...). >> > >> > However, the idea that the network might seek to "fix" these problems, >> > when doing so necessarily involves extra work and delays, is not a good >> > trade. Stuff that is delayed to "fix" a reordering that happened might >> > delay signals that the QUIC stack could use, even if some data needs to be >> > held at the endpoint. QUIC packets contain many things, some of which >> > don't need to be strictly ordered to be useful. >> >> Applications that are sensitive to delays will break their traffic >> into multiple QUIC streams. In case of packet loss, only one of those >> streams will be blocked, the others will be delivered without "head >> of queue blocking". Implementing L2 correction will make the response >> worse, not better, because all the streams will be delayed for the >> duration of the >> L2 correction instead of just one. >> >> -- Christian Huitema >> > >