Elements of Network Protocol Design