4.3. Состояния
Конечные точки DCCP проходят различные состояний в течение срока существования соединения; эти состояния можно разделить на три фазы — организация соединения, обмен данными и завершение соединения. На рисунке показан типовой пример смены состояний для клиента и сервера.
Client Server ------ ------ (0) No connection CLOSED LISTEN (1) Initiation REQUEST DCCP-Request --> <-- DCCP-Response RESPOND PARTOPEN DCCP-Ack or DCCP-DataAck --> (2) Data transfer OPEN <-- DCCP-Data, Ack, DataAck --> OPEN (3) Termination <-- DCCP-CloseReq CLOSEREQ CLOSING DCCP-Close --> <-- DCCP-Reset CLOSED TIMEWAIT CLOSED
Всего возможно девять состояний, которые перечислены ниже в порядке возрастания. Следовательно, запись state >= CLOSEREQ означает, что соединение находится в состоянии state = CLOSEREQ, state = CLOSING или state = TIMEWAIT. В главе 8 приводится более детальное описание всех состояний.
- CLOSED
- Нет соединения.
- LISTEN
- Сокеты сервера находятся в пассивном состоянии прослушивания. Состояния LISTEN и CLOSED не связываются с каким-либо конкретным соединением DCCP.
- REQUEST
- Сокет клиента переходит в это состояние из состояния CLOSED после передачи пакета DCCP-Request с целью организации соединения.
- RESPOND
- Сокет сервера переходит в это состояние из состояния LISTEN после получения от клиента пакета DCCP-Request.
- PARTOPEN
- Сокет клиента переходит в это состояние из состояния REQUEST после получения от сервера пакета DCCP-Response. Это состояние является третьим шагом трехэтапного согласования. Клиент может передавать данные приложений из этого состояния, но он должен включать во все такие пакеты номер подтверждения Acknowledgement Number.
- OPEN
- Это состояние является центральной частью соединения DCCP. Сокеты клиента и сервера переходят в это состояние из состояний PARTOPEN и RESPOND, соответственно. Иногда мы будет говорить о состояниях SERVER-OPEN и CLIENTOPEN, указывающих на состояние OPEN для клиента и сервера, соответственно.
- CLOSEREQ
- Сокет сервера переходит в это состояние из состояния SERVER-OPEN для того, чтобы запросить у клиента завершение соединения и переход в состояние TIMEWAIT.
- CLOSING
- Сокеты клиента и сервера переходят в это состояние для завершения соединения.
- TIMEWAIT
- Сокет клиента или сервера остается в этом состоянии в течение времени 2MSL (4 минуты) после того, как соединение было разорвано для того, чтобы предотвратить ошибки, связанные с доставкой старых пакетов. Состояние TIMEWAIT устанавливается только на одной стороне (другая сразу же переходит в состояние CLOSED) и сервер может запросить переход клиента в состояние TIMEWAIT, используя для этого пакет типа DCCP-CloseReq.