[vcf-midatlantic] A "100%" Efficient BBS Transfer Protocol
John Heritage
john.heritage at gmail.com
Tue Oct 15 19:42:30 EDT 2019
Interesting Ken - thank you;
Ahh interesting - is that because a one byte slip/drop might not allow the
CRC algorithm to work properly?
I guess alternatively if you had a truly symmetrical connection you could
send the entire file back on the other channel as a brute force method of
ensuring 100% correct and 100% efficiency?
On Tue, Oct 15, 2019 at 2:33 PM Kenneth Gober <kgober at gmail.com> wrote:
> On Mon, Oct 14, 2019 at 7:55 PM John Heritage via vcf-midatlantic <
> vcf-midatlantic at lists.vcfed.org> wrote:
>
>> This protocol would operate like ZModem or YModem-G where the uploader
>> just
>> keeps streaming, but no CRCs would be sent with the transfer. Instead,
>> the
>> 'sender' computer would simply pre-calculate CRCs for every 1K or so; the
>> receiver computer would calculate after receiving that 1K, and send back
>> to
>> the uploader. The uploader would go back and verify that it was getting
>> the right CRCs in the right order (you could pre-calculate these and store
>> in RAM before the transfer starts to reduce CPU load during transfer).
>> If
>> no problems were encountered - you might hit that theoretical 1800 cps.
>>
>
> You will probably want to at least mark block boundaries, so that the
> sender
> and receiver can stay in sync if any bytes are dropped in transmission.
> Otherwise a single dropped byte could cause every successive block to
> be sent again. With a 1K block size, a 2-byte 'frame boundary' marker
> would give you an efficiency of 1024/1026 (99.8%), assuming the block
> doesn't contain embedded markers that need to be escaped. For
> random data you could guess that you'll get about 4 such bytes on
> average per block, so call it 1024/1034 (99.0%) efficient.
>
> I chose 2 bytes as the size of the frame marker so that a single escape
> byte could handle all of these cases:
> ESC n (n=0-63) - frame (x mod 64) follows (numbered starting from 0)
> ESC n (n=64-127) - current frame contains n-63 literal ESC bytes here
> ESC n (n=128-191) - end of file, file size should be (x mod 64) frames
> ESC n (n=192-255) - please send the CRC for frame (x mod 64) again
>
> The first 3 cases should be self-explanatory, the last case allows the
> receiver to send a 'frame' CRC in addition to the 'payload' CRC, so the
> sender can detect corrupt CRCs (or corrupt frame numbers).
>
> -ken
>
More information about the vcf-midatlantic
mailing list