The Internet vs. Layering

- The Internet was NOT originally conceived as a layered system
(the "layer guys" explained the network as layers)

- The end-to-end argument is often explained in as if it is a "layering principle".   But it was NOT.

- the key idea is one of controllability: can you control the relevant attributes of a large complex system from the edges where it matters? (source routing, diagnosis, investment)

- The system's description first and foremost contains its own evolution. (the hourglass model)

- Be careful to listen to everybody involved, because the act of argument surfaces issues that will be important.

End-to-end argument

The function in question can completely and correctly be implemented only with the knowledge and help of the application standing at the end points of the communication system.
Therefore, providing that questioned function as a feature of the communication system itself is not possible.
(Sometimes an incomplete version of the function provided by the communication system may be useful as a performance enhancement.)

What is the function?
Can it be implemented in the communications system?
If not, DON'T put it in the communications system!

Alternative: Discover commonality
What can you put in the communications system?
Is it similar to a desirable function?
If so, convince the users that they want what you can build in?
Arguments: 
1.cheaper to implement in comm system. (circular)
2. we know what the users really want.
3. protect the users from each other (interoperability is its own reward)

Another area in which an end-to-end argument can be applied is that of data encryption. The argument here is threefold. First, if the data transmission system performs encryption and decryption, it must be trusted to manage securely the required encryption keys. Second, the data will be in the clear and thus vulnerable as it passes into the target node and is fanned out to the target application. Third, the authenticity of the message must still be checked by the application. If the application performs end-to-end encryption, it obtains its required authentication check, it can handle key management to its satisfaction, and the data is never exposed outside the application.

Thus, to satisfy the requirements of the application, there is no need for the communication subsystem to provide for automatic encryption of all traffic. Automatic encryption of all traffic by the communication subsystem may be called for, however, to ensure something else – that a misbehaving user or application program does not deliberately transmit information that should not be exposed. The automatic encryption of all data as it is put into the network is one more firewall the system designer can use to ensure that information does not escape outside the system. Note however, that this is a different requirement from authenticating access rights of a system user to specific parts of the data. This network-level encryption can be quite unsophisticated – the same key can be used by all hosts, with frequent changes of the key. No per-user keys complicate the key management problem. The use of encryption for application-level authentication and protection is complementary. Neither mechanism can satisfy both requirements completely.