The paper talks about a principle called “end-to-end
argument” have a major impact on system design. The principle states that
functions should be kept at lower levels only if they can be implemented by the
applications using it.
Implementing functions at lower level has issues like
redundancy and for this reason they should be implemented at a higher level or
closer to the application layer using them.
The author say that functions defined at the application
level is a very good option for efficient system designing rather than the
lower layers doing it. To explain this, they have given examples like careful
file transfer, delivery guarantees, duplicate message suppression and
Before applying the end-to-end argument to a system, we
should first consider the type of application that will be using the system.
Eg. File transfer – 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.
Eg. Telephone call – Loss of packet will not have a major
impact on the conversation and the above principle will just add delay to the
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