<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: How to write network backup software: a lesson in practical optimization</title>
	<atom:link href="http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/feed/" rel="self" type="application/rss+xml" />
	<link>http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/</link>
	<description>Longer than a blog; shorter than a book</description>
	<pubDate>Thu, 28 Aug 2008 19:50:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
		<item>
		<title>By: Mokka mit Schlag &#187; Chronosync: Final Answer</title>
		<link>http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-14142</link>
		<dc:creator>Mokka mit Schlag &#187; Chronosync: Final Answer</dc:creator>
		<pubDate>Thu, 07 Sep 2006 18:48:37 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-14142</guid>
		<description>[...] After evaluating Chronosync for a month, the evaluation period is up and it&#8217;s time to make a decision. To buy or not to buy, that is the question. I think the answer is no. Chronosync is too slow and too complex to justify paying for. [...]</description>
		<content:encoded><![CDATA[<p>[...] After evaluating Chronosync for a month, the evaluation period is up and it&#8217;s time to make a decision. To buy or not to buy, that is the question. I think the answer is no. Chronosync is too slow and too complex to justify paying for. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: verisimilidude</title>
		<link>http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-8270</link>
		<dc:creator>verisimilidude</dc:creator>
		<pubDate>Tue, 01 Aug 2006 22:14:23 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-8270</guid>
		<description>UDP as a bulk data transfer mechanism has been commercialized by Digital Fountain (http://www.digitalfountain.com/).  Basically (I believe) they break the transfer up into buckets and the buckets into a lot of little chunks and keep sending chunks until they get a message that a full bucket has been created.  Research results from so-called byzantine protocols are used in the chunking so that each chunk carries information from the entire bucket so that each piece that gets through can contribute to the reassembly without all having to get through.  This is both faster and more efficient than TCP's implementation (send-ack-resend if needed).  John's comment that you would just end up re-creating TCP shows a lack of imagination.  There are other reliable protocols that can run atop IP than just TCP.</description>
		<content:encoded><![CDATA[<p>UDP as a bulk data transfer mechanism has been commercialized by Digital Fountain (http://www.digitalfountain.com/).  Basically (I believe) they break the transfer up into buckets and the buckets into a lot of little chunks and keep sending chunks until they get a message that a full bucket has been created.  Research results from so-called byzantine protocols are used in the chunking so that each chunk carries information from the entire bucket so that each piece that gets through can contribute to the reassembly without all having to get through.  This is both faster and more efficient than TCP&#8217;s implementation (send-ack-resend if needed).  John&#8217;s comment that you would just end up re-creating TCP shows a lack of imagination.  There are other reliable protocols that can run atop IP than just TCP.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Randall</title>
		<link>http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-7862</link>
		<dc:creator>Randall</dc:creator>
		<pubDate>Sun, 30 Jul 2006 15:30:33 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-7862</guid>
		<description>Michael,

The rare instances of equal checksums but unequal data are covered under the collision statistics of your checksum algorithm.  For MD5, SHA-1, SHA-256, etc. refer to the RFC.  For CRC, refer to the RFC.

If a collision randomly occurs once in 2**80 operations, that's still many orders of magnitude larger than the block-error rate of your hard drive.  Since hard drives have integrity checks (i.e. CRCs) on the data of each raw block, the odds of getting a bad block (incorrect data) that passes the CRC integrity check (appears good) is a far more likely occurrance.  If such a block randomly appeared in a data comparison, you'd back it up as the latest change to the file.

Even though MD5 or other algorithms may be marginal or not recommended for new crypto systems, remember that those systems have to withstand an attacker INTENTIONALLY trying to create different data with the same hash.  That's a completely different situation.

Frankly, you're far more likely to get a bad block (unrecoverable data), or a bad block that looks good (as above), than a random hash collision.</description>
		<content:encoded><![CDATA[<p>Michael,</p>
<p>The rare instances of equal checksums but unequal data are covered under the collision statistics of your checksum algorithm.  For MD5, SHA-1, SHA-256, etc. refer to the RFC.  For CRC, refer to the RFC.</p>
<p>If a collision randomly occurs once in 2**80 operations, that&#8217;s still many orders of magnitude larger than the block-error rate of your hard drive.  Since hard drives have integrity checks (i.e. CRCs) on the data of each raw block, the odds of getting a bad block (incorrect data) that passes the CRC integrity check (appears good) is a far more likely occurrance.  If such a block randomly appeared in a data comparison, you&#8217;d back it up as the latest change to the file.</p>
<p>Even though MD5 or other algorithms may be marginal or not recommended for new crypto systems, remember that those systems have to withstand an attacker INTENTIONALLY trying to create different data with the same hash.  That&#8217;s a completely different situation.</p>
<p>Frankly, you&#8217;re far more likely to get a bad block (unrecoverable data), or a bad block that looks good (as above), than a random hash collision.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adam Rosien</title>
		<link>http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-7265</link>
		<dc:creator>Adam Rosien</dc:creator>
		<pubDate>Wed, 26 Jul 2006 15:29:22 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-7265</guid>
		<description>There is a famous paper called "End-to-end arguments in system design" that addresses this very issue.  Wikipedia has a nice summary and links: http://en.wikipedia.org/wiki/End-to-end_principle</description>
		<content:encoded><![CDATA[<p>There is a famous paper called &#8220;End-to-end arguments in system design&#8221; that addresses this very issue.  Wikipedia has a nice summary and links: <a href="http://en.wikipedia.org/wiki/End-to-end_principle" rel="nofollow">http://en.wikipedia.org/wiki/End-to-end_principle</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael</title>
		<link>http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-7223</link>
		<dc:creator>Michael</dc:creator>
		<pubDate>Wed, 26 Jul 2006 00:36:37 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-7223</guid>
		<description>There is existing software that uses essentially a checksum comparison to test for data equality across a network (rather than moving and comparing the actual data).  But, what about those instances, rare as they might be, when the checksum of two different data are equal (e.g., md5 collisions)?  Checksums are good for accidental data corruption, but can it be truly robust means of comparing data?  

(ps: I have a practical interest in this, since I do exactly this.)</description>
		<content:encoded><![CDATA[<p>There is existing software that uses essentially a checksum comparison to test for data equality across a network (rather than moving and comparing the actual data).  But, what about those instances, rare as they might be, when the checksum of two different data are equal (e.g., md5 collisions)?  Checksums are good for accidental data corruption, but can it be truly robust means of comparing data?  </p>
<p>(ps: I have a practical interest in this, since I do exactly this.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Cowan</title>
		<link>http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-6808</link>
		<dc:creator>John Cowan</dc:creator>
		<pubDate>Sat, 22 Jul 2006 17:43:19 +0000</pubDate>
		<guid isPermaLink="false">http://cafe.elharo.com/optimization/how-to-write-network-backup-software-a-lesson-in-practical-optimization/#comment-6808</guid>
		<description>UDP?  Just Say No!

Really, UDP is a terrible protocol for bulk transfer.  You basically have three choices:

1) Send out everything as fast as you can with no waiting for acknowledgements.  This is fine over a dedicated LAN or serial link, where you don't care if you saturate it.  It is unbelievably awful over an ordinary LAN, because other traffic will not be able to get through.

2) Ping-pong protocol: send a packet, wait for an ack, send a packet ....   That's way too slow.  The application gets involved too often, especially at the receiving end.

3) Try to do better than either of these by being clever.  You will end up reinventing TCP, badly.

All of these things were discovered almost as soon as Ethernet was invented, before there was even a way to do TCP/IP over Ethernet, using simple MAC-level protocols.  TCP is a subtle and clever protocol that has been designed for this job over many iterations.

UDP is meant for one-shot notification or request/reply actions.  Even DNS, the prototypical UDP protocol, uses TCP in order to do bulk transfer between primary and secondary servers.  The only time you want to do bulk transfer over UDP is when you are trying to boot over the network using a crowded boot ROM that simply can't implement the whole TCP stack, and then you use a ping-pong UDP protocol (TFTP) because you don't care very much about performance when booting.</description>
		<content:encoded><![CDATA[<p>UDP?  Just Say No!</p>
<p>Really, UDP is a terrible protocol for bulk transfer.  You basically have three choices:</p>
<p>1) Send out everything as fast as you can with no waiting for acknowledgements.  This is fine over a dedicated LAN or serial link, where you don&#8217;t care if you saturate it.  It is unbelievably awful over an ordinary LAN, because other traffic will not be able to get through.</p>
<p>2) Ping-pong protocol: send a packet, wait for an ack, send a packet &#8230;.   That&#8217;s way too slow.  The application gets involved too often, especially at the receiving end.</p>
<p>3) Try to do better than either of these by being clever.  You will end up reinventing TCP, badly.</p>
<p>All of these things were discovered almost as soon as Ethernet was invented, before there was even a way to do TCP/IP over Ethernet, using simple MAC-level protocols.  TCP is a subtle and clever protocol that has been designed for this job over many iterations.</p>
<p>UDP is meant for one-shot notification or request/reply actions.  Even DNS, the prototypical UDP protocol, uses TCP in order to do bulk transfer between primary and secondary servers.  The only time you want to do bulk transfer over UDP is when you are trying to boot over the network using a crowded boot ROM that simply can&#8217;t implement the whole TCP stack, and then you use a ping-pong UDP protocol (TFTP) because you don&#8217;t care very much about performance when booting.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
