Comments on draft-michel-quic-fec-01
Christian Huitema <huitema@huitema.net> Fri, 19 January 2024 06:30 UTC
Return-Path: <huitema@huitema.net>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id A8DEEC14F5F2 for <quic@ietfa.amsl.com>; Thu, 18 Jan 2024 22:30:04 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.909
X-Spam-Level:
X-Spam-Status: No, score=-6.909 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id MH8LlLrzJ8ZB for <quic@ietfa.amsl.com>; Thu, 18 Jan 2024 22:30:03 -0800 (PST)
Received: from out15-27.antispamcloud.com (out15-27.antispamcloud.com [185.201.19.27]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 04369C14F5EB for <quic@ietf.org>; Thu, 18 Jan 2024 22:30:02 -0800 (PST)
Received: from xse179.mail2web.com ([66.113.196.179] helo=xse.mail2web.com) by mx208.antispamcloud.com with esmtp (Exim 4.92) (envelope-from <huitema@huitema.net>) id 1rQiO7-008Mxx-Rw for quic@ietf.org; Fri, 19 Jan 2024 07:30:01 +0100
Received: from xsmtp21.mail2web.com (unknown [10.100.68.60]) by xse.mail2web.com (Postfix) with ESMTPS id 4TGV8j5TsYz4np for <quic@ietf.org>; Thu, 18 Jan 2024 22:29:57 -0800 (PST)
Received: from [10.5.2.17] (helo=xmail07.myhosting.com) by xsmtp21.mail2web.com with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.92) (envelope-from <huitema@huitema.net>) id 1rQiO5-0008I7-Kh for quic@ietf.org; Thu, 18 Jan 2024 22:29:57 -0800
Received: (qmail 10028 invoked from network); 19 Jan 2024 06:29:57 -0000
Received: from unknown (HELO [192.168.1.107]) (Authenticated-user:_huitema@huitema.net@[172.56.169.166]) (envelope-sender <huitema@huitema.net>) by xmail07.myhosting.com (qmail-ldap-1.03) with ESMTPA for <francois.michel@uclouvain.be>; 19 Jan 2024 06:29:57 -0000
Message-ID: <30cbb347-a144-4d58-bf03-b8e7bc0836d1@huitema.net>
Date: Thu, 18 Jan 2024 22:29:56 -0800
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Content-Language: en-US
To: François Michel <francois.michel@uclouvain.be>, Olivier Bonaventure <Olivier.Bonaventure@uclouvain.be>
Cc: IETF QUIC WG <quic@ietf.org>
From: Christian Huitema <huitema@huitema.net>
Subject: Comments on draft-michel-quic-fec-01
Autocrypt: addr=huitema@huitema.net; keydata= xjMEXtavGxYJKwYBBAHaRw8BAQdA1ou9A5MHTP9N3jfsWzlDZ+jPnQkusmc7sfLmWVz1RmvN J0NocmlzdGlhbiBIdWl0ZW1hIDxodWl0ZW1hQGh1aXRlbWEubmV0PsKWBBMWCAA+FiEEw3G4 Nwi4QEpAAXUUELAmqKBYtJQFAl7WrxsCGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgEC F4AACgkQELAmqKBYtJQbMwD/ebj/qnSbthC/5kD5DxZ/Ip0CGJw5QBz/+fJp3R8iAlsBAMjK r2tmyWyJz0CUkVG24WaR5EAJDvgwDv8h22U6QVkAzjgEXtavGxIKKwYBBAGXVQEFAQEHQJoM 6MUAIqpoqdCIiACiEynZf7nlJg2Eu0pXIhbUGONdAwEIB8J+BBgWCAAmFiEEw3G4Nwi4QEpA AXUUELAmqKBYtJQFAl7WrxsCGwwFCQlmAYAACgkQELAmqKBYtJRm2wD7BzeK5gEXSmBcBf0j BYdSaJcXNzx4yPLbP4GnUMAyl2cBAJzcsR4RkwO4dCRqM9CHpVJCwHtbUDJaa55//E0kp+gH
Content-Type: text/plain; charset="UTF-8"; format="flowed"
Content-Transfer-Encoding: 8bit
X-Originating-IP: 66.113.196.179
X-Spampanel-Domain: xsmtpout.mail2web.com
X-Spampanel-Username: 66.113.196.0/24
Authentication-Results: antispamcloud.com; auth=pass smtp.auth=66.113.196.0/24@xsmtpout.mail2web.com
X-Spampanel-Outgoing-Class: unsure
X-Spampanel-Outgoing-Evidence: Combined (0.15)
X-Recommended-Action: accept
X-Filter-ID: Pt3MvcO5N4iKaDQ5O6lkdGlMVN6RH8bjRMzItlySaT9WLQux0N3HQm8ltz8rnu+BPUtbdvnXkggZ 3YnVId/Y5jcf0yeVQAvfjHznO7+bT5x6h2yQpzTslcOqazQkKtAFKj/EwzSHE5FGYwwjsNRPCPKD KEXvoeWNQf5jcK/hkT/mD6wdmZPcItWbGe10hXJtXL4FsauCVkDjmcYJdU3yWp7KuHNaaKdg7iBE ZefdsNUFWKwa/wzJUjmazeC7ImcaSHJ6ZQJj6aLOOYVpdHNa+hQ6V51u76v35b1wNe/MvdLYhf3I dKwJJ7WW9KzchH2I2+J9PgaoF8SQHto3le4zsHTaeQtlKubP6iUTjj6yPARK6buALVaA782LKxg6 vRmng8N1aLhXqdc+jC1RcnVud53D5caUhbVtvqItBqoizkEt9O20UjkwI0v+LOlw05G4BS+iyyNq bT8dUMXMJ4tUCMj6G37ZfAMLceP5aNHPt26RBupu5v1nytoNnc138GfEEIgtEXyXj6S3SDvReMcV 8TXUjLjYWQt1/5xnQymMoPsgr/U0flMcy2Vi/IcBgY4arPaiJ1W6hAyiRC61jekdwIcXNugoOEbH RyFULpSjm7jZ1h/HfDRQ5Ig8VhPsPE8N/FZpkRQlnEjxvdHcabythWaKnUd4mN3xkONnx9HiFPUS VAwd8HMaiRG0Af4kHzA4DRojSVizNl0ce/s7u0P9b9Tml6eOMCV9kYYwkPx6ZsXvIUzTXkDAiiJi mGhLUFuS2lhaIetXfCg1JdAVrOwKfNpF8BKbWK1FNhbThcpJ5dNUoFIvD3sIcP1fhJPM6B/8te2S LAKX+c/Ia77NJI+shD1I5TgnJ4xNz8rxHJKsrhKJ+dym1L8cD17Js0v4cp1MFX0KQIPQl47SuR0r HMEpzTcKVNeVJ9BXyu9+ceCqThTYg2px1fSoqxQCCHnLMo/m9VKh99btUAanjnMCAH2co+fBoeG+ Hs0afhsY/5zhNYWRVYKU9W9tbmVXJBqdHHDmZEKhyNAv1N35kYWaEdgLurFV5oTvAcwA4rM3FkfW 8/1kE/e7sUnsVpINvARNxpFO
X-Report-Abuse-To: spam@quarantine14.antispamcloud.com
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/ETVofniZ5TSxha38Q9MNdpy1B6Q>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 19 Jan 2024 06:30:04 -0000
François, Olivier,
I just spent some time studying your draft on QUIC FEC. I like the idea
of having an FEC framework independent from the algorithm used to
actually compute the FEC data and repair packets. Your draft solves a
number of practical problems, such as how to notify peers when FEC helps
receive a frame from an otherwise lost packet, or how to identify
"symblos" independently of packet numbers using the symbol identifier
frame (SID).
The draft is obviously a work in progress.
You propose two alternatives for linking frames to a SID. I wish you
picked just one, and I prefer your first alternative, in which your SID
frames brackets a list of protected frames. However, I an not quite sure
how this should be parsed. You give an example as:
| Pkt(6)[STREAM(2, "xyz"), |
| SOURCE_SYMBOL(1, { STREAM(8, "def"), |
| DATAGRAM("msg") }] |
In that example, the frame STREAM(8..) and DATAGRAM() are protected,
while the "STREAM(2)" is not. Fine, but the syntax is described as:
SOURCE_SYMBOL {
SID (i),
FEC Protected Payload (..)
}
... and I don't know how to parse that. There is no indication of the
length of the "FEC Protected Payload". Do you mean to indicate that the
SOURCE_SYMBOL frame extends to the end of the packet, and that all
frames following the SID are protected?
You define a framework in which client and server negotiate to use FEC,
and also to select a FEC scheme. The syntax of your transport parameter
seems a bit restrictive: the client proposes to use FEC and a specific
scheme, and the server accepts or refuse. Given the experimental nature
of FEC, I expect that we will try several algorithms. It would be nice
for the client to propose a list, and for the server to pick one -- or
zero, if it does not support any of the proposed values. In fact, I
think that you could merge the "enable FEC" parameter that negotiates
use of FEC with the "decoder FEC scheme" negotiation.
Your draft does not assign identifiers to existing FEC schemes. To
facilitate interop tests, I suggest that you define at least one. In
fact, I would suggest a very simple one, in which the REPAIR frame
identifies a range of SID, and then carries the XOR of all packets in
that range.
The suggestion above brings a discussion of the relative size of the
"FEC Protected Payload" and the REPAIR frames. As in the example above,
I would expect REPAIR frames to include a small header followed by a
combination of the content of several FEC Protected Payload, with that
combination being at least as long as the longest FEC Protected Payload
in the set. That longest size, by default, can be a full packet payload
(per PMTU), minus the length of the SID prefix. But that leave very
little room for encoding the prefix of the REPAIR frame, which is likely
to require at list the REPAIR frame type (arguably same length as the
SOURCE_SYMBOL frame type), and SID identifying the range (same length as
the SID parameter of the SOURCE_SYMBOL frame), and an additional
parameter indicating the variant of he repair frame according to the
selected scheme (arguably the same length as the coding window). Is that
the problem that you are discussing in section 4.2.3? Should there be
some property associated to the FEC scheme, such as the maximum overhead
of a REPAIR frame? (Also, why pad the FEC-protected data at the
beginning rather than at the end? Or leave that as a property of the FEC
scheme?)
I am not sure that I fully understand how to use the FEC WINDOW frame.
You allow it to change, but what if the packet containing that frame is
lost? How can the peer know when exactly the use of the new window
starts, and which window is associated with a particular SOURCE_SYMBOL
or REPAIR frame?
Reed-Solomon codes are often characterized by two numbers, the length of
the coding window and the number of redundant copies -- in our case, the
number of REPAIR frames for a given coding window. It seems that in your
proposal these two numbers are set arbitrarily by the sender. Should
there me some negotiation of maximum values? Or would those maximum
values be deduced from the scheme identifier, something like "reed
solomon 32 + 8"? Or should the "repair" frame indicate the length of the
coding widow over which it operates?
I am also not sure how the update of the coding window works for a
convolutional code.
One way to understand the coding window is "the number of frames over
which a given REPAIR may operate," but we are concerned with correlated
losses happening in trains. To protect against that, it is nice to send
the repair frames some time after the protected frames, in which case
the window would an indication of how long a copy of a given frame has
to be kept. This could be expressed as a number of packets, but
if multipath is supported we may want to send the repairs on a different
path, and then using number of packets is not natural.
OK, that's a lot of text. Some of that may be because I did not fully
understand your intent. I expect things to get clearer with your next
draft, or when we start interop testing of different implementations...
Waiting to work on that!
-- Christian Huitema
- Comments on draft-michel-quic-fec-01 Christian Huitema
- Re: Comments on draft-michel-quic-fec-01 François Michel
- Re: Comments on draft-michel-quic-fec-01 Christian Huitema