Comments (7)
I think a lot of this comes down to an implementation decision. In one sense there is similarity with stream data whn an application tries to write more bytes than the flow control would allow. How that is handles is a choice - you could send some of the bytes (up to the flow control limit) or reject them all and tell the application this. A library might have an API that can returncurrent capacity and expect the application to chunk writes. The list is long and it depends on lots of things we won't agree on.
Specifically for datagram, the OP question can be rephrased as what should the transport do about something that it by definition cannot do. But really its an implementation choice. In mine I expose the maximum size allowed. If an application tries to give me something bigger I reject the operation. I don't drop the datagram, I never accepted it. The application is trying something that will never logically work and there's probably a host of application-layer reasons or ways to deal with it. Mike's comments speak to that but there is not things to say here in this specification IMO
from datagram.
I think this will just be dropped, like the text describes for flow control on congestion control reasons.
The signaling to the application will be API specific for this case. I think we can't say anything normative about this, but we could suggest that implementations consider how this case would be signaled to applications.
from datagram.
I don't like the "just drop it" answer; while datagrams are inherently unreliable, that doesn't mean an application expects a message it sends to not even attempt to be delivered. "Need to handle" basically means applications need to do their own PMTUD implementation atop DATAGRAMs, since even querying an API only tells you one hop.
The DATAGRAM capsule type means that an arbitrarily large datagram can be transported, but loses the benefit of unreliable, out-of-order delivery. I had previously suggested that we could optionally define a Datagram unidirectional stream type, which would allow for reliable out-of-order delivery of larger-than-MTU payloads.
If a datagram being transported is too large for a DATAGRAM frame, perhaps some other method SHOULD be used?
from datagram.
@MikeBishop for H3 datagrams, then, it could fall back to sending a capsule over the stream itself, assuming the application layer knew that the datagram was dropped or too large. I do think for the QUIC datagram layer itself, it can only drop and notify if the application tries to send something too large, and it's up to the application protocol to handle it.
from datagram.
Ah, sorry -- wrong repo! You're correct -- at the QUIC layer, that's all you can do.
from datagram.
Actually I think for datagrams, sending only some of the data should not be an option. I think for datagrams the implicit contract is that the application always gets the whole datagram or nothing. So that's probably something to spell out.
from datagram.
I seriously considered adding a line to the draft that prohibits truncation, but looking into it I realized that this document doesn't define an API contract for sending and receiving datagrams, so truncation is out of scope. Also, I could imagine there exists an application out there that does want truncation, so there's no reason to ban this in all implementations and applications. All existing implementations already the right thing for their applications today, so adding text doesn't help there either. I'm closing this editorial issue with no action so we can move things forward.
from datagram.
Related Issues (20)
- Please define the frame using RFC 9000 style HOT 1
- Question about: "not used for loss recovery" HOT 5
- The
- Question about:This frame SHOULD be sent as soon as possible, and MAY be coalesced with other frames HOT 2
- Can DATAGRAM frame belong to stream? HOT 2
- Not "strongly" associated HOT 1
- Question about DATAGRAM frame HOT 2
- Is reliability really stream-based? HOT 4
- State clearly the IANA registration type of TP and frame type HOT 1
- Why do IANA considerations duplicate information from the body? HOT 1
- Clarify 0-RTT handling HOT 4
- consequence of not protecting DATAGRAM with 0-RTT or 1-RTT HOT 1
- explain the recommendation pattern for supporting coexistence of multiple datagram flows
- Congestion related information to the application HOT 8
- Bandwidth distribution to media and non-media traffic - applicablity statements HOT 5
- RFC Editor comment 1 HOT 1
- RFC Editor comment 2 HOT 2
- For clarity, may this sentence be updated as follows? Original (comment 3) HOT 2
- Would you like to change "and" to "-" here? Current (comment 4) HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from datagram.