a protocol architecture (e.g., tcp/ip) performs a task by implementing it as: separate program modules, responsible for subtasks, that cooperate with each other a single program module separate program modules, responsible for subtasks, that interact only indirectly with each other but directly with counterpart modules on target systems separate isolated program modules, responsible for subtasks, that do not interact