The paper talks about a principle called “end-to-end
argument” which has a major impact on the way a system is designed. The
principle states that functions should be provided at lower levels only if they
can be implemented by the applications using it.


Implementing functions at lower level has issues like
redundancy and higher cost and for this reason they should be implemented at a
higher level or closer to the application layer using them. 


The authors suggest that keeping functions at the
application level is the right way of system design. To explain this, they have
given examples like careful file transfer, delivery guarantees, secure transmission
of data, duplicate message suppression and guaranteeing FIFO.


Before applying the end-to-end argument to a system, we
should first consider the type of application that will be using the system.

1. File transfer – Here, the application has to think about
the errors caused in network, errors in copying/buffering data or host crash.

Thus, end-to-end argument is favored here.

2. Telephone call – Here, noise or loss of packet will not
have a major impact on the conversation and the above principle will just add
delay to the conversation.

Thus, end-to-end argument is not favored here.


The authors thus say that using end-to-end argument is not
always the best option. It should depend on the application using it.



Another limitation observed is that the authors do not
discuss anything about the security aspect of the functions if they are
implemented at a higher level, as functions at higher level are more at
security risk.