<font face="arial" size="2"><p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">Actually, there are rateless erasure codes that don't require you have all the data in advance for the code.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">But before you get to that requirement, just number all the messages in a flow in a monotonic numbering scheme (source ID, destination ID, sequence number), and treat each message as a digital fountain.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">That's not an optimal code (it's a hybrid). </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">What's key about this hybrid is that if you think about it, discarding messages at the ultimate receiver works fine, and thus the buffer at the receiver can be arbitrarily reduced - all it needs is, at minimum, the space to decode one message.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">The key idea in TCP is that every bit sent by the source is retained by the source until it is positively acknowledged to have been received. All of those retained bit can be retransmitted at any time (the rest of the TCP design is about how to avoid excess and wasteful retransmissions of the same bits). You know this, but I'm stating it in the form of an invariant.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">This "source keeps it all until positive acknowledgement" by itself is inefficient when packets get lost, because the retransmissions are stabs in the dark, and may be redundant.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">Rateless erasure codes use the fact that there are infinitely many ways to encode *some* of the bits that have been already transmitted, in combination with new bits that haven't been transmitted yet, so that the lost packets are reconstructable from any sufficiently long sequence of these combined packets.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">The basic fountain code starts by sending all of the original segments first, then starts to send various mixed up packets.  That's the only reason why you need all of the packets to be known before starting.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">In fact, you only need to know (in that original form) the full length of the message when you have transmitted the full message (not to start). If there is space on the channel for extra packets, you can start sending combinations of the bits already sent, even if you don't know all of the original source bits. This is a bit farther from "optimal", because those packets may not have been necessary.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">Anyway, I'm not proposing a particular solution here - I'm just saying that the conceptual framing of the issue in terms of rateless erasure coding on the intermediate mesh creates the opportunity to get much closer to what one might want if one were trying to deal with very long end-to-end delays in a store and forward routing network.</p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;"> </p>
<p style="margin:0;padding:0;font-family: arial; font-size: 10pt; overflow-wrap: break-word;">On Sunday, December 12, 2021 3:47pm, "Vint Cerf" <vint@google.com> said:<br /><br /></p>
<div id="SafeStyles1639342176">
<div dir="ltr">I am a fan of Fountain codes - however, it only works if you have all the data you are going to send in hand before encoding. 
<div>David, if there is a way to do this with data that is being generated on the fly with sensors, that would be of interest.</div>
<div>Of course, one can "chunk" the data, fountain-code it, and reconstruct "chunks" on receipt. </div>
<div>v</div>
</div>
<br />
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Sun, Dec 12, 2021 at 3:39 PM David P. Reed <<a href="mailto:dpreed@deepplum.com">dpreed@deepplum.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">It's worth noting that the patents on Bill Luby's digital fountain codes, etc. have pretty much inhibited one of the best solutions for DTN out there. There's one exception - RFC 6330, which has a very, very specific use of the RaptorQ code specified in it. Qualcomm apparently negotiated a license for that very specific use in that specific protocol, as long as it is never used in "wide area wireless" (see the details of the narrow license here) networking. <a href="https://datatracker.ietf.org/ipr/2554/" target="_blank">https://datatracker.ietf.org/ipr/2554/</a></p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Rateless erasure codes of ANY kind appear to be covered by the claims in the early Digital Fountain patents.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Now why are rateless erasure codes important for DTN? Well, essentially such codes have a *unique* property that is pretty surprising:</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">The coded form of any N-bit message (composed of segments that can be lost, e.g. checksummed frames that are deemed lost/erased if the checksum fails), is an infinite sequence of non-identical segments. If a receiver receives a subset of distinct segments, totalling N or more bits, the entire N-bit message can be reconstructed.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">That's what makes the code "rateless" - it works for ANY error rate, and is optimal for that error rate.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">To solve the DTN problem, you simply send each message as a sequence of coded segments. No windowing is required, no retransmission of packets that are lost on one hop is required. Eventually, the message gets delivered, and it will take no more time than the error rate on the path requires.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">That's remarkable. </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">There are of course some issues to resolve - when should a message source assume that its message has been reliably and completely received by the intended destination?</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">This is the "end-to-end" problem. If there is a reverse channel, once a message has been received, the receiver should, at least each time it receives a segment of some already completed message, send a single ACK for that message. </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Now this is great for talking to a spacecraft that has a very low speed and noisy reverse channel.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Any number of messages can be concurrently sent from any number of sources (the requirement is that each message has a global unique ID).</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Fair sharing of a multiplexed deep-space network's resources among many concurrent messages is a bit more tricky. That's where "early ACks" might be used in an advanced erasure code (one I doubt has been patented fully, at least I've never seen that).</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">-----------------------------------</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Now, my personal view about *patents* on communications protocols is very severe: since interoperability is the *essence* of communications protocols, the idea of patents is antithetical to the utiliity of protocols. Just as mathematical algorithms should not be patentable subject matter, neither should communications protocols (which are just algorithms on a different abstract machine).</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Unfortunately, Luby, et al. have threatened litigation over and over, stymieing attempts to get usage of their remarkable invention, outside a few monopolistic or oligopolistic licensees.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">It looks like, even though the original patents are due to expire soon, lots of effort is being made to insure that all possible derivable techniques are being patented to extend this monopoly.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Consequently, I'd suggest that someone might find a way to "buy out" the inventors of these patents and their assignees. It's a cancerous growth.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Imagine if we who built the Internet Protocols had filed patents on all the techniques used in the Internet? Would Vint be sitting there counting his royalties, and with a team of lawyers negotiating license agreements? (I have an oar in this - I'd be there with Vint in the countinghouse, probably, as a coinventor).</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">Bill Luby, his advisors, etc. did a remarkable thing here. And like other inventors, he ought to be rewarded for his invention. I have no problem with that. What I have a problem with is the structure of patent law as it exists today. It is socially counterproductive, and economically counterproductive, when used in the way it is being used here.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">But that's just my opinion.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;">PS: I am co-inventor of a fair number of patented inventions. I live in this broken system. But, in the case of communications protocols specifically, I think this stuff shouldn't be protected by patent rights.</p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
<p style="margin:0;padding:0;margin: 0px; padding: 0px; font-family: arial; font-size: 10pt;"> </p>
_______________________________________________<br /> Starlink mailing list<br /><a href="mailto:Starlink@lists.bufferbloat.net" target="_blank">Starlink@lists.bufferbloat.net</a><br /><a rel="noreferrer" href="https://lists.bufferbloat.net/listinfo/starlink" target="_blank">https://lists.bufferbloat.net/listinfo/starlink</a></blockquote>
</div>
<br />-- <br />
<div class="gmail_signature" dir="ltr">
<div dir="ltr">
<div>Please send any postal/overnight deliveries to:</div>
<div>Vint Cerf</div>
<div>1435 Woodhurst Blvd </div>
<div>McLean, VA 22102</div>
<div>703-448-0965</div>
<div>until further notice</div>
</div>
</div>
</div></font>