Observe que isso não é uma duplicata de Por que a camada IP está ciente das camadas mais altas da pilha de rede?
A necessidade de um identificador de protocolo (por exemplo, o campo Protocolo do cabeçalho IP) na comunicação baseada em pacotes é clara: é este ou algum tipo de algoritmo de inferência com uso intensivo de computação. A questão é: por que ela deve existir como parte do cabeçalho IP e não nos cabeçalhos dos protocolos encapsulados?
Parece-me que esse daqueles casos em que a clareza teórica atende a considerações práticas (também conhecido como "Haskell atende Go" ...): por um lado, a colocação de um campo "protocolo" no cabeçalho IP quebra a separação conceitual de interesses que, por exemplo, . o modelo OSI visado; por outro lado, forçar protocolos mais altos na pilha para declarar seu tipo de maneira consistente é muito mais difícil e, eventualmente, levaria a uma situação semelhante (por exemplo, se todo protocolo acima da pilha usasse seu primeiro byte de cabeçalho para indicar seu tipo , parece que o IP usou seu último byte de cabeçalho para fazer o mesmo).
Então, minha pergunta é: qual foi o motivo por trás da colocação do campo "protocolo" dentro do cabeçalho do pacote do IP, e não em qualquer outro lugar?
Editar : Ao escrever esta pergunta, pensei em adicionar a palavra " original " antes de "raciocínio", ou seja, o raciocínio da equipe que inventou o IP , mas calculou que era redundante, pois a pergunta foi formulada no pretérito ("qual era o raciocínio..."). No entanto, isso parece necessário, pois nenhuma das respostas realmente responde a essa pergunta. Algumas dicas de observação:
- @immibis sugere que qualquer outra forma violaria os modelos de outros protocolos (por exemplo, os protocolos de comunicação criptografados teriam que ter um campo de identificação em texto sem formatação)
- O @Eddie afirma essencialmente que o motivo é a convenção (aceitação do design da cadeia de protocolos , embora o motivo seja essa a convenção permanece um mistério)
- @Ricky enfatiza a praticidade como uma consideração abrangente
- A @Claudio sugere que, se o campo de protocolo fizesse parte do cabeçalho encapsulado, seria necessária uma etapa adicional de identificação do cabeçalho , no modelo atual que ocorre durante a análise do cabeçalho IP
Então, vou reformular: O que há de errado com um modelo em que, em vez de cada cabeçalho identificar o próximo tipo de cabeçalho, cada cabeçalho identifica seu próprio tipo em um local predeterminado (por exemplo, no primeiro byte do cabeçalho)? Por que esse modelo é menos desejável que o atual?
Edit # 2 : Parece que a resposta é uma combinação de várias das respostas dadas (principalmente as mencionadas acima, juntamente com o segundo adendo de @ Eddie):
Simplicidade: Quebrar a principal agnosticism camada em neste caso particular, os meios da pilha (ou o modelo) como um todo, pode ser mais simples:
- Não há fase de "identificação de protocolo", nem implícita nem explícita
- A independência da camada foi aprimorada (por exemplo, um manipulador de comunicações criptografadas não precisa compartilhar uma camada com nenhum protocolo auxiliar)
A regulamentação também é bastante simplificada, não sendo necessário impor nenhum requisito nos protocolos do cliente.
Desempenho: declarar o protocolo de um pacote encapsulado antes do próprio pacote permite que vários tipos de protocolos de roteamento rápido (filtragem de pacotes, QOS, comutação de corte) sejam integrados à própria camada de rede (Internet); eles podem tomar decisões o mais rápido que uma tabela de hash pode ser acessada, o que é ainda mais importante, considerando o hardware limitado em que este protocolo foi projetado para executar.
Esse modelo tem suas desvantagens, mas parece que para os casos de uso comuns é mais adequado do que as alternativas.
"What's wrong with a model where instead of every header identifying the next header's type, every header identifies its own type in a predetermined location?"
Porque, então, é efetivamente apenas o último byte do cabeçalho IPv4 (ou qualquer protocolo de nível inferior), exceto o nome. É um problema de "galinha ou ovo". Você não pode analisar um cabeçalho se não souber qual é o protocolo.