5.8. Опции
Любой пакет DCCP может содержать опции, которые размещаются в конце заголовка DCCP. Размер каждой опции кратен 8 битам. Отдельные опции не дополняются для выравнивания по 32-битовой границе и каждая опция может начинаться на границе любого байта. Однако полный набор опций должен дополняться соответствующим числом байтов для выравнивания по 32-битовой границе; для добавочных байтов должна использоваться опция Padding. Все имеющиеся в пакете опции учитываются при расчете контрольной суммы заголовка.
Первый байт каждой опции определяет ее тип. Опции типов 0-31 являются однобайтовыми. В остальных опциях второй байт указывает размер опции. Размер учитывает два первых байта, определяющих тип и размер опции, а также поле данных опции, следовательно значение поля размера во всех случаях должно быть не меньше 2.
Опции должны обрабатываться последовательно, начиная с первой опции в заголовке пакета. Опции неизвестных типов должны игнорироваться. Так же должны игнорироваться опции некорректного размера (значение поля размера опции меньше 2 или больше оставшейся части пространства опций в заголовке пакета) вместе с любым дополнительным пространством опций вслед за опцией с некорректно указанной длиной. Если явно не указано иное, разные экземпляры одной опции в заголовке пакета должны обрабатываться независимо. Для некоторых опций это может означать, что будет использоваться только последнее корректное значение данной опции в заголовке пакета.
Определенные на сегодняшний день опции перечислены в таблице 3:
Опция | DCCP-Data? | Описание | ||
Тип | Размер | Значение | ||
0 | 1 | Padding | Y | 5.8.1 |
1 | 1 | Mandatory | N | 5.8.2 |
2 | 1 | Slow Receiver | Y | 11.6 |
3-31 | 1 | Резерв | ||
32 | переменный | Change L | N | 6.1 |
33 | переменный | Confirm L | N | 6.2 |
34 | переменный | Change R | N | 6.1 |
35 | переменный | Confirm R | N | 6.2 |
36 | переменный | Init Cookie | N | 8.1.4 |
37 | 3-8 | NDP Count | Y | 7.7 |
38 | переменный | Ack Vector [Nonce 0] | N | 11.4 |
39 | переменный | Ack Vector [Nonce 1] | N | 11.4 |
40 | переменный | Data Dropped | N | 11.7 |
41 | 6 | Timestamp | Y | 13.1 |
42 | 6/8/10 | Timestamp Echo | Y | 13.3 |
43 | 4/6 | Elapsed Time | N | 13.2 |
44 | 6 | Data Checksum | Y | 9.2 |
45-127 | переменный | Резерв | ||
128-255 | переменный | Опции, связанные с CCID | - | 10.3 |
Таблица 3: Опции DCCP |
Не все опции подходят для конкретного типа пакетов. Например, поскольку опция Ack Vector интерпретируется относительно номера подтверждения, она не может использоваться в пакетах DCCP-Request и пакетах DCCP-Data packets, не содержащих поля Acknowledgement Number. Если опция включена в неподходящий тип пакета, в общем случае она должна игнорироваться; такие случаи рассматриваются при описании отдельных опций. В таблице указаны ограничения общего значения — если в колонке DCCP-Data? Указано «-», соответствующая опция должна игнорироваться при ее получении в пакетах DCCP-Data (в параграфе 7.5.5 рассматриваются причины этого).
Опции с некорректными значениями должны игнорироваться, если явно не указано иное. Например, любая опция Data Checksum со значением 4 в поле размера должна игнорироваться, поскольку все корректные опции Data Checksum имеют размер 6.
В этой главе описываются две базовых опции — Padding и Mandatory. Остальные опции рассматриваются позднее.