Mike,

The proposal sounds elegant. I will try to paraphrase it to make sure that I 
understand.

When originating a UDP datagram, the host always queries it underlying IP stack 
to determine the PMTU for the destination. If the PMTU greater than or equal to 
the size of the payload plus the UDP header plus the IP header, plus all IP 
extension headers, the originating host emits a conventional UDP packet which 
is characterized as follows:

- Protocol = 17
- Length <= L4 length from IP

If the PMTU less than the size of the payload plus the UDP header plus the IP 
header, plus all IP extension headers, the originating host emits an 
unconventional UDP packet which is characterized as follows:

- Protocol = 17
- Length > L4 length from IP
- Segment Offset, M-bit and Identification fields added to UDP header before 
the payload

If an unconventional UDP packet arrives a destination that supports 
unconventional packets, it is reassembled at the transport layer. If an 
unconventional UDP packet arrives a destination that does not support 
unconventional packets, it is  discarded.

Do I have this much right?

                          Ron


> -----Original Message-----
> From: ipv6-boun...@ietf.org [mailto:ipv6-boun...@ietf.org] On Behalf Of
> C. M. Heard
> Sent: Monday, August 05, 2013 11:53 PM
> To: IPv6
> Subject: Re: UDP+Fragmentation (was: "Deprecate")
> 
> On Thu, 1 Aug 2013, C. M. Heard wrote:
> > On Thu, 1 Aug 2013, RJ Atkinson wrote:
> > > I agree that C.M. Heard's ideas should be explored in more detail
> by
> > > the IETF.
> 
> The idea was essentially UDP with segmentation fields, which would
> require a new protocol number.
> 
> In an offline discussion with Mark Smith and I kicked around an idea
> for an alternate version not requiring a new protocol number, but
> relying instead on the redundancy of the UDP Length field.  The UDP
> Length field is not actually needed; TCP does not have one but rather
> relies on the length reported by the IP layer.  Under current
> standards, the UDP Length field must be at least 8 and cannot exceed
> the IP payload length minus the combined length of any extension
> headers -- let's call this the L4 length from IP.  Existing
> implementations are supposed to drop UDP datagrams that fail this
> check, and all the ones I know of do so.
> 
> The question then arises whether it might reasonably be possible to re-
> purpose the case UDP Length > L4 length from IP to mean a segmented UDP
> datagram.
> 
> In that case 8 <= UDP Length <= L4 length from IP would be intepreted
> as a standard unsegmented UDP datagram, as is it now.
> That's the case pictured below.  Note that if the L4 length indicated
> by the IP layer exceeds the UDP Length, then the extra octets would be
> discarded and are not delivered to the application; that is the
> behavior of the implementations I know of.
> 
>      0                            15 16                            31
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
>     |         Source Port           |      Destination Port         |
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
>     |   Length <= L4 length from IP |            Checksum           |
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
>     |                          data octets               ...
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|    ...
> 
> Now suppose that we have a long UDP datagram that we want to send in
> segments.  We set the Length and Checksum fields as usual, and then cut
> the datagram into segments, each of which looks like this:
> 
>      0                            15 16                            31
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
>     |         Source Port           |      Destination Port         |
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
>     |  Length > L4 length from IP   |            Checksum           |
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
>     |        (reserved = 0)         |       Segment Offset    |Res|M|
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
>     |                         Identification                        |
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-+
>     |                          data octets               ...
>     +-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|-+-+-+-+-+-+-+-|    ...
> 
> We put the same UDP header in each segment, so (if we take some care in
> how we choose the length of the segments) each one will have a UDP
> Length field that is greater than the IP payload length minus the
> combined length of any extension headers.  Implementations that conform
> to the current specifications should discard these segments, and so
> should not mistakenly consider the segmentation fields as part of the
> application data.  That should make it possible for segmented UDP
> datagrams to safely coexist with conventional unsegmented one, without
> getting a new protocol number.
> 
> Possible downsides: some middleboxes may filter such "erroneous"
> datagrams, and some existing erroneous implementations may fail to do
> the checks they should and might mistake these segments for ordinary
> UDP datagrams.
> 
> Note that this idea does not work with UDP-lite, which replaces the
> Length field with a Checksum Coverage field.  That could easily be too
> short to exceed the L4 length from IP.
> 
> Mike Heard
> --------------------------------------------------------------------
> IETF IPv6 working group mailing list
> ipv6@ietf.org
> Administrative Requests: https://www.ietf.org/mailman/listinfo/ipv6
> --------------------------------------------------------------------
> 


--------------------------------------------------------------------
IETF IPv6 working group mailing list
ipv6@ietf.org
Administrative Requests: https://www.ietf.org/mailman/listinfo/ipv6
--------------------------------------------------------------------

Reply via email to