     \documentstyle[]{article}
     \addtolength{\textheight}{1.75in}
     \begin{document}
     \noindent
     David Golombek\\
     6.033 Section 6, David Wetherall\\
     Paper \#5: A question of practicality.\\\\
     
     According to the argument provided in Saltzer's "End-to-End
     Arguments
     in System Design", given an error-correcting modem, we
     should all use
     the Ymodem-g protocol.  Yet in practice, even with the new
     very high-reliablity modems on the market, people still use
     Zmodem,
     for more than traditions sake.  The end-to-end argument
     would say that
     Ymodem-g would be the more logical alternative because the
     programs
     communicating via the protocol must run a final comparison
     anyways,
     and the hardware error-correction should make this approach
     efficient. The real world demonstrates that the small cost
     difference
     between the Z and Y modem error-correction methods, and the
     high
     frequency of errors makes Zmodem the more practical of the
     two
     protocols.
     
     The end-to-end argument says that since any program that
     transfers
     data needs to perform a comparison of the data transfered
     itself,
     it is usually redundant for lower level components to be
     also be doing
     this checking.  If you have a multi-layer protocol stack,
     and each
     layer does extensive error-checking on it's own, the
     overhead that
     will be accumulated often makes the overall program too slow
     to be
     practical.  By this argument, the Ymodem-g protocol makes a
     lot of
     sense, because it does minimal error-checking, and thus is
     as fast as
     possible.
     
     However, if you look at the computation neccessary for
     Ymodem-g to
     determine whether there was any corruption, and the
     computation Zmodem
     performs as part of it's reliable data-checking, the
     difference in
     cost is far less than expected.  Both protocols must compute
     an
     identifier for the data that was received, and compare it to
     the data
     that was sent.  It turns out that both protocols use CRC's,
     and that
     the one that Ymodem-g computes isn't all that much faster.
     Thus,
     even when there are no errors in the data being transferred,
     Ymodem-g
     isn't all that much faster than Zmodem.
     
     As good as the error correction built into modem's is, there
     are still
     some things for which it cannot compensate.  In particular,
     having
     a person pick up another phone on the same line as a modem
     is trying
     to communicate on will usually throw off any hardware error
     checker.
     This becomes terribly annoying when one attempts to transfer
     a several
     megabyte file via a 14.4 Kbps modem, and the transfer is
     interrupted
     when you are 90 \% of the way done.  With the Ymodem-g
     protocol, you
     simply have to start over again, wasting several hours of
     wait in some
     cases.  With Zmodem, there is a much better chance that the
     software
     will eventually be able to reconnect, and that all is not
     lost.
     
     Despite the arguments of end-to-end, it is more efficient to
     use
     the Zmodem protocol rather than Ymodem-g.  Ymodem-g is
     indeed slightly
     faster than Zmodem if you have no errors at all, but this
     speed
     increase is much less than might be hoped for.  This small
     speed
     increase becomes insignifcant when compared to the amount of
     time
     saved by maintaing a connection Zmodem when significant
     amount of data
     has already been transferred.  Thus, even though redundant
     error-checking is taking place, the long-term efficiency of
     the system
     is increased.
     \end{document}
