Anhang B: Formatierungsrichtlinien für Optionen
Dieser Anhang enthält einige Empfehlungen zur Anordnung von Feldern beim Entwurf neuer Optionen für den Hop-by-Hop Options Header oder den Destination Options Header, wie in Abschnitt 4.2 beschrieben. Diese Richtlinien basieren auf den folgenden Annahmen:
o Eine wünschenswerte Eigenschaft ist, dass alle Felder mit mehreren Oktetten im Option Data-Bereich einer Option an ihren natürlichen Grenzen ausgerichtet sind, d. h. ein Feld mit einer Breite von n Oktetten SOLLTE an einem ganzzahligen Vielfachen von n Oktetten vom Beginn des Hop-by-Hop- oder Destination-Options-Headers platziert werden, wobei n = 1, 2, 4 oder 8.
o Eine weitere wünschenswerte Eigenschaft ist, dass der Hop-by-Hop- oder Destination-Options-Header so wenig Platz wie möglich einnimmt, vorbehaltlich der Anforderung, dass die Headerlänge ein Vielfaches von 8 Oktetten ist.
o Es kann angenommen werden, dass, wenn einer der optionentragenden Header vorhanden ist, er eine sehr kleine Anzahl von Optionen trägt, typischerweise nur eine.
Diese Annahmen legen den folgenden Ansatz zur Anordnung der Felder einer Option nahe: Felder von der kleinsten zur größten anordnen, ohne interne Auffüllung, und dann die Ausrichtungsanforderung für die gesamte Option basierend auf der Ausrichtungsanforderung des größten Feldes (bis zu einer 8-Oktett-Ausrichtung) ableiten. Die folgenden Beispiele veranschaulichen diesen Ansatz:
Beispiel 1
Wenn Option X zwei Datenfelder benötigt, eines mit einer Länge von 8 Oktetten und eines mit einer Länge von 4 Oktetten, lautet ihr Layout wie folgt:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type=X |Opt Data Len=12|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ 8-octet field +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Die Ausrichtungsanforderung ist 8n+2, um sicherzustellen, dass das 8-Oktett-Feld an einem Vielfachen von 8 vom Beginn des einschließenden Headers beginnt. Ein vollständiger Hop-by-Hop- oder Destination-Options-Header, der diese Option enthält, sieht wie folgt aus:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len=1 | Option Type=X |Opt Data Len=12|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ 8-octet field +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Beispiel 2
Wenn Option Y drei Datenfelder benötigt, eines mit einer Länge von 4 Oktetten, eines mit einer Länge von 2 Oktetten und eines mit einer Länge von 1 Oktett, lautet ihr Layout wie folgt:
+-+-+-+-+-+-+-+-+
| Option Type=Y |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Opt Data Len=7 | 1-octet field | 2-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Die Ausrichtungsanforderung ist 4n+3, um sicherzustellen, dass das 4-Oktett-Feld an einem Vielfachen von 4 vom Beginn des einschließenden Headers beginnt. Ein vollständiger Hop-by-Hop- oder Destination-Options-Header, der diese Option enthält, sieht wie folgt aus:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len=1 | Pad1 Option=0 | Option Type=Y |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Opt Data Len=7 | 1-octet field | 2-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PadN Option=1 |Opt Data Len=2 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Beispiel 3
Ein Hop-by-Hop- oder Destination-Options-Header, der sowohl Option X aus Beispiel 1 als auch Option Y aus Beispiel 2 enthält, hat eines der folgenden zwei Formate, je nachdem, welche Option zuerst erscheint:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len=3 | Option Type=X |Opt Data Len=12|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ 8-octet field +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PadN Option=1 |Opt Data Len=1 | 0 | Option Type=Y |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Opt Data Len=7 | 1-octet field | 2-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PadN Option=1 |Opt Data Len=2 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
oder:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len=3 | Pad1 Option=0 | Option Type=Y |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Opt Data Len=7 | 1-octet field | 2-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PadN Option=1 |Opt Data Len=4 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | 0 | Option Type=X |Opt Data Len=12|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4-octet field |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ 8-octet field +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+