Tenga en cuenta que esto no es un duplicado de ¿Por qué la capa IP es consciente de las capas superiores de la pila de red?
La necesidad de un identificador de protocolo (por ejemplo, el campo Protocolo del encabezado IP) en la comunicación basada en paquetes es clara: es este o algún tipo de algoritmo de inferencia computacionalmente intensivo. La pregunta es: ¿por qué debe existir como parte del encabezado IP en lugar de en los encabezados de los protocolos encapsulados?
Me parece que este es uno de esos casos donde la claridad teórica se encuentra con consideraciones prácticas (también conocido como "Haskell cumple Go" ...): Por un lado, colocar un campo de "protocolo" en el encabezado de IP rompe la separación conceptual de intereses que, por ejemplo . el modelo OSI destinado a por otro lado, forzar protocolos más altos en la pila para indicar su tipo de manera consistente es mucho más difícil y eventualmente conduciría a una situación similar de todos modos (por ejemplo, si cada protocolo más arriba en la pila usara su primer byte de encabezado para indicar su tipo , parecería que IP utilizó su último byte de encabezado para hacer lo mismo).
Entonces mi pregunta es: ¿cuál fue el razonamiento detrás de colocar el campo "protocolo" dentro del encabezado del paquete de la IP en lugar de en cualquier otro lugar?
Editar : Al escribir esta pregunta, reflexioné sobre si agregar la palabra " original " antes de "razonar", es decir, el razonamiento del equipo que ideó la propiedad intelectual , pero consideró que era redundante ya que la pregunta estaba redactada en tiempo pasado ("¿cuál era el razonamiento..."). Sin embargo, esto parece necesario, ya que ninguna de las respuestas responde a esa pregunta. Algunas ideas notables:
- @immibis sugiere que cualquier otra forma rompería los modelos de otros protocolos (por ejemplo, los protocolos de comunicación encriptados tendrían que tener un campo de identificación de texto sin formato)
- @Eddie esencialmente afirma que la razón es la convención (aceptación del diseño de la cadena de protocolo , aunque por qué esa es la convención sigue siendo un misterio)
- @Ricky enfatiza la practicidad como una consideración general
- @Claudio sugiere que si el campo de protocolo formara parte del encabezado encapsulado, se necesitaría un paso de identificación de encabezado adicional , en el modelo actual que tiene lugar durante el análisis del encabezado IP
Así que reformulo: ¿Qué tiene de malo un modelo en el que, en lugar de que cada encabezado identifique el tipo del siguiente encabezado, cada encabezado identifique su propio tipo en una ubicación predeterminada (por ejemplo, en el primer byte del encabezado)? ¿Por qué un modelo así es menos deseable que el actual?
Edición n. ° 2 : Parece que la respuesta es una combinación de varias de las respuestas dadas (principalmente las mencionadas anteriormente junto con el segundo apéndice de @ Eddie):
Simplicidad: romper el principio del agnosticismo de capa en este caso particular significa que la pila (o el modelo) en su conjunto puede ser más simple:
- No hay fase de "identificación de protocolo", ni implícita ni explícita
- Se mejora la independencia de la capa (por ejemplo, un controlador de comunicaciones encriptado no tiene que compartir una capa con ningún protocolo auxiliar)
La regulación también se simplifica enormemente, ya que no tiene que imponer ningún requisito sobre los protocolos del cliente.
Rendimiento: establecer el protocolo de un paquete encapsulado antes del paquete en sí mismo permite que varios tipos de protocolos de enrutamiento rápido (filtrado de paquetes, QOS, conmutación de corte) se integren en la capa de red (Internet); estos pueden tomar decisiones tan rápido como se puede acceder a una tabla hash, lo cual es aún más importante teniendo en cuenta el hardware limitado para el que se diseñó este protocolo.
Este modelo tiene sus desventajas, pero parece que para los casos de uso comunes es más adecuado que las 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 entonces es efectivamente el último byte del encabezado IPv4 (o cualquier protocolo de nivel inferior) en todo menos en el nombre. Es un problema de "pollo o huevo". No puede analizar un encabezado si no sabe qué protocolo es.