5.6. Пакеты DCCP-Reset
Пакеты DCCP-Reset служат для безусловного разрыва соединений. Нормальное завершение соединений также использует пакеты DCCP-Reset, но эти пакеты могут также применяться в других случаях, включая получение некорректного порядкового номера и/или некорректные отклики ECN Nonce Echo. Пакеты DCCP-Resets должны использовать 48-битовые порядковые номера (X=1).
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Generic DCCP Header with X=1 (16 bytes) / / with Type=7 (DCCP-Reset) / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Acknowledgement Number Subheader (8 bytes) / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reset Code | Data 1 | Data 2 | Data 3 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Options and Padding / +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ / Application Data Area (Error Text) / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Reset Code: 8 битов
- Указывает причину, по которой отправитель пакета разрывает соединение DCCP.
- Data 1, Data 2, Data 3: по 8 битов каждое
- Поля Data обеспечивают дополнительные данные о причине разрыва соединения DCCP. Трактовка этих полей определяется значением Reset Code.
- Область данных приложения: Error Text
- При наличии поля Error Text оно содержит понятное для человека текстовое сообщение в кодировке Unicode UTF-8 (предпочтительно на английском языке) с более детальным описанием причины разрыва соединения. Например, пакет DCCP Reset с Reset Code = 11 (Aggression Penalty) может содержать поле Error Text вида "Aggression Penalty: Received 3 bad ECN Nonce Echoes, assuming misbehavior".
Определенные в настоящее время значения Reset Code перечислены ниже. Если явно не указано иное, поля Data 1, 2 и 3 должны устанавливаться отправителем в 0, а получатель должен игнорировать эти поля в пакетах DCCP-Reset. Коды сопровождаются описаниями конкретных ситуаций, которые будут вызывать передачу каждого значения Reset Code, однако описание таких ситуаций не является исчерпывающим.
- 0, "Unspecified" — причина не указана
- Показывает отсутствие трактовки Reset Code. Использование Reset Code = 0 не рекомендуется — отправителю следует выбирать код, показывающий причину разрыва соединения.
- 1, "Closed" — закрытия соединения
- Нормальное завершение работы соединения (см. параграф 8.3).
- 2, "Aborted" — прерывание соединения
- Передающая конечная точка отказывается от соединения по причине того, что в нем ничего не происходит (см. параграфы 8.1.1 и 8.1.5).
- 3, "No Connection" — нет соединения
- Соединения не существует (см. параграф 8.3.1).
- 4, "Packet Error" — ошибочный пакет
- Получен корректный пакет неожиданного типа. Например, пакет DCCP-Data с корректной контрольной суммой в заголовке и порядковым номером был получен соединением, находящимся в состоянии REQUEST (см. параграф 8.3.1). Поле Data 1 содержит тип пакета-нарушителя (т. е., при получении ошибочного пакета типа 2 поле Data 1 будет иметь значение 2).
- 5, "Option Error" — ошибка в опциях
- Опция была ошибочной и эта ошибка достаточно серьезна для того, чтобы пришлось сбрасывать соединение (см. параграфы 6.6.7, 6.6.8 и 11.4). Поле Data 1 содержит тип ошибочной опции, а Data 2 и Data 3 — два первых байта поля опции (или 0, если опция использовала менее 2 байтов данных).
- 6, "Mandatory Error" — ошибка в Mandatory
- Передающая сторона не может обработать опцию O, которой непосредственно предшествовала опция Mandatory. Поля Data показывают тип и данные опции O с использованием такого же формата, как для Reset Code 5, "Option Error" (см. параграф 5.8.2).
- 7, "Connection Refused" — соединение отвергнуто
- Значение Destination Port не соответствует порту, открытому для прослушивания. Этот код передается только в пакетах DCCP-Request (см. параграф 8.1.3).
- 8, "Bad Service Code" — некорректный код сервиса
- Значение Service Code не совпадает с кодом сервиса, который связан в Destination Port. Этот код передается только в пакетах DCCP-Request (см. параграф 8.1.3).
- 9, "Too Busy" — сервер занят
- Сервер слишком занят для того, чтобы принимать новые соединения. Этот код передается только в пакетах DCCP-Request (см. параграф 8.1.3).
- 10, "Bad Init Cookie" — некорректное значение Init Cookie
- Клиент не вернул значение Init Cookie или указал некорректное значение (см. параграф 8.1.4).
- 11, "Aggression Penalty" — наказание за агрессию
- Конечная точка определила некорректность поведения другой стороны в плане контроля насыщения (см. параграф 12.3).
- 12-127, зарезервированы
- Резервные значения следует трактовать как Reset Code 0, "Unspecified".
- 128-255, Связанные с CCID коды
- Семантика этих кодов зависит от используемого в соединении CCID (см. параграф 10.3). Получателю следует трактовать неизвестные коды этого диапазона как Reset Code 0, "Unspecified".
Сводка определенных в настоящее время кодов приведена в таблице 2:
Код сброса | Имя | Данные 1 | Данные 2 и 3 |
0 | Unspecified | 0 | 0 |
1 | Closed | 0 | 0 |
2 | Aborted | 0 | 0 |
3 | No Connection | 0 | 0 |
4 | Packet Error | Тип пакета | 0 |
5 | Option Error | Номер опции | Данные опции |
6 | Mandatory Error | Номер опции | Данные опции |
7 | Connection Refused | 0 | 0 |
8 | Bad Service Code | 0 | 0 |
9 | Too Busy | 0 | 0 |
10 | Bad Init Cookie | 0 | 0 |
11 | Aggression Penalty | 0 | 0 |
12-127 | Резерв | 0 | 0 |
128-25 | Коды, связанные с CCID | 0 | 0 |
Таблица 2: Коды DCCP Reset |
Опции в пакетах DCCP-Reset обрабатываются до разрыва соединения. Это означает, что некоторые комбинации опций (в частности, включающие опцию Mandatory) могут заставлять конечную точку отвечать на корректный пакет DCCP-Reset другим пакетом DCCP-Reset. Это может вести к всплеску передачи таких пакетов (reset storm); поскольку после сброса первой конечной точкой соединения второй пакет DCCP-Reset будет игнорироваться.