Beachten Sie, dass dies kein Duplikat von Warum kennt die IP-Schicht höhere Schichten im Netzwerkstapel?
Die Notwendigkeit einer Protokollkennung (z. B. des Protokollfelds des IP-Headers) bei der paketbasierten Kommunikation ist klar: Es handelt sich entweder um diesen oder einen rechenintensiven Inferenzalgorithmus. Die Frage ist: Warum muss es als Teil des IP-Headers und nicht in den Headern der gekapselten Protokolle vorhanden sein?
Es scheint mir, dass dieser eine der Fälle, in denen theoretische Klarheit auf praktische Überlegungen trifft (AKA "Haskell meets Go" ...): Einerseits das Platzieren eines "Protokoll" -Feldes im IP-Header die konzeptionelle Trennung von Interessen bricht, die z . das angestrebte OSI-Modell; Andererseits ist es viel schwieriger, Protokolle höher im Stapel zu zwingen, ihren Typ auf konsistente Weise anzugeben, und würde schließlich ohnehin zu einer ähnlichen Situation führen (z. B. wenn jedes Protokoll höher im Stapel sein erstes Header-Byte verwendet, um seinen Typ anzugeben würde es so aussehen, als ob IP sein letztes Header-Byte verwendet hätte, um dasselbe zu tun).
Meine Frage ist also: Was war der Grund dafür, dass das Feld "Protokoll" im Paket-Header der IP platziert wurde und nicht irgendwo anders?
Bearbeiten : Als ich diese Frage schrieb, überlegte ich, ob ich das Wort " Original " vor "Argumentation" hinzufügen sollte , dh die Argumentation des Teams, das IP entwickelt hatte , hielt es jedoch für überflüssig, da die Frage in der Vergangenheitsform formuliert wurde ("Was war das ?") Argumentation..."). Dies scheint jedoch notwendig zu sein, da keine der Antworten diese Frage tatsächlich beantwortet. Einige wichtige Erkenntnisse:
- @immibis schlägt vor, dass jede andere Form die Modelle anderer Protokolle beschädigen würde (z. B. müssten verschlüsselte Kommunikationsprotokolle ein Klartext-Identifikationsfeld haben).
- @Eddie gibt im Wesentlichen an, dass der Grund die Konvention ist (Akzeptanz des Protokollkettendesigns , warum dies die Konvention ist, bleibt ein Rätsel)
- @ Ricky betont die Praktikabilität als übergeordnete Überlegung
- @Claudio schlägt vor, dass, wenn das Protokollfeld Teil des gekapselten Headers wäre, ein zusätzlicher Schritt zur Identifizierung des Headers erforderlich wäre , der im aktuellen Modell während der Analyse des IP-Headers stattfindet
Also werde ich umformulieren: Was ist falsch an einem Modell, bei dem anstelle jedes Headers, der den Typ des nächsten Headers identifiziert, jeder Header seinen eigenen Typ an einer vorbestimmten Stelle identifiziert (z. B. im ersten Header-Byte)? Warum ist ein solches Modell weniger wünschenswert als das aktuelle?
Edit # 2 : Es scheint, dass die Antwort eine Kombination aus mehreren der gegebenen Antworten ist (hauptsächlich die oben genannten zusammen mit @ Eddies zweitem Nachtrag):
Einfachheit: Wenn in diesem speziellen Fall das Prinzip der Schichtunabhängigkeit gebrochen wird, kann der Stapel (oder das Modell) als Ganzes einfacher sein:
- Es gibt keine "Protokollidentifikations" -Phase, weder implizit noch explizit
- Die Schichtunabhängigkeit wird verbessert (z. B. muss ein verschlüsselter Kommunikationshandler keine Schicht mit einem Hilfsprotokoll teilen).
Die Regulierung wird ebenfalls stark vereinfacht, da keine Anforderungen an Client-Protokolle durchgesetzt werden müssen.
Leistung: Wenn das Protokoll eines gekapselten Pakets vor dem Paket selbst angegeben wird, können verschiedene Arten von Fast-Routing-Protokollen (Paketfilterung, QOS, Cut-Through-Switching) in die Netzwerkschicht (Internet) selbst integriert werden. Diese können dann Entscheidungen treffen, sobald auf eine Hash-Tabelle zugegriffen werden kann. Dies ist umso wichtiger, als die Hardware, auf der dieses Protokoll ausgeführt werden soll, begrenzt ist.
Dieses Modell hat seine Nachteile, aber es scheint, dass es für die gängigen Anwendungsfälle besser geeignet ist als die Alternativen.
"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?"
Denn dann ist es praktisch nur das letzte Byte des IPv4-Headers (oder eines beliebigen Protokolls auf niedrigerer Ebene) in allen außer dem Namen. Es ist ein "Huhn oder Ei" Problem. Sie können einen Header nicht analysieren, wenn Sie nicht wissen, um welches Protokoll es sich handelt.