Design exercise: A generic network protocol