O Protocolo DCCP
Formato dos pacotes
O cabeçalho do protocolo DCCP tem no mínimo 12 e no máximo 1200 bytes. A parte inicial do cabeçalho carrega a mesma semântica para todos os tipos de pacotes conhecidos atualmente. Depois vem o campo adicional que depende do tipo de pacote e, depois, um campo opcional para opções, finalizando o cabeçalho do DCCP. Por último, seguindo o cabeçalho, tem o application data area, onde ficam os dados da aplicação, a depender do tipo de pacote.
Protocolo DCCP. A parte em cinza é o cabeçalho do protocolo.
Cabeçalho genérico |
---|
Campos adicionais (a depender do tipo de pacote) |
Opções (opcional) |
Application data area (a depender do tipo de pacote) |
Cabeçalho genérico
O cabeçalho genérico DCCP toma diferentes formas dependendo do valor de X, que é o bit de número de sequência estendido. Para X = 1, o campo do número de sequência tem 48 bits de comprimento e o cabeçalho genérico ocupa 16 bytes.
Source port | Dest port | |||||
---|---|---|---|---|---|---|
Data offset | CCVal | CsCov | Checksum | |||
Res | Type | X = 1 | Reserved | Sequence Number (high bits) | ||
Source port | Dest port | |||||
Sequence Number (low bits) |
Se X = 0, apenas os 24 bits menos significativos do número de sequência são transmitidos. O cabeçalho genérico terá 12 bytes de comprimento.
Source port | Dest port | |||||
---|---|---|---|---|---|---|
Data offset | CCVal | CsCov | Checksum | |||
Res | Type | X = 0 | Reserved | Sequence Number (low bits) |
Source port e Dest port - 16 bits cada - Esses campos identificam a conexão, de maneira
similar aos campos de TCP e UDP correspondentes. Ao iniciar uma conexão, o client deve
escolher a Source port de maneira aleatória para reduzir a possibilidade de ataque.
Data offset - 8 bits - Esse é o offset do início do cabeçalho do pacote DCCP até o início do
application data area desse pacote, em palavras de 32 bits. O receptor deve ignorar pacotes
com offset menor do que o tamanho mínimo de cabeçalho para o tipo de pacote, ou maior que
o próprio pacote.
CCVal - 4 bits - Especifica o código do tipo de controle de congestionamento a ser usado.
CsCov - 4 bit - Informa qual parte do pacote vai ser checada pelo algoritmo de Checksum,
permitindo a tolerância à corrupção de dados.
Checksum - 16 bits - Algoritmo de soma de verificação do pacote.
Res - 3 bits - quem envia deve colocar esse campo todo em zero em pacotes gerados e quem
recebe deve ignorar esse campo.
Type - 4 bits - especifica o tipo do pacote.
Sequence Number - 24 ou 48 bits - Identifica de forma única um pacote na sequência de
todos os pacotes enviados pela source em dada conexão.
Todos os tipos de pacotes DCCP definidos atualmente (exceto DCCP-Request e Data) possuem um Acknowledgement Number Subheader ocupando os 4 ou 8 bytes que seguem o cabeçalho genérico.
Se X = 1
Reserved | Acknowledgement Number (high bits) | |||||
---|---|---|---|---|---|---|
Acknowledgement Number (low bits) |
Se X = 0
Reserved | Acknowledgement Number (low bits) |
Reserved - 16 ou 8 bits - quem envia deve colocar esse campo todo em zero em pacotes
gerados e quem recebe deve ignorar esse campo.
Acknowledgement Number - 48 or 24 bits - Contém o maior número de sequência recebido
(e processado com sucesso até o fim) em qualquer pacote até o momento.
Tipos de Pacote
Campo Type no cabeçalho genérico | Tipo de pacote correspondente |
---|---|
0 | DCCP-Request |
1 | DCCP-Response |
2 | DCCP-Data |
3 | DCCP-Ack |
4 | DCCP-DataAck |
5 | DCCP-CloseReq |
6 | DCCP-Close |
7 | DCCP-Reset |
8 | DCCP-Sync |
9 | DCCP-SyncAck |
10-15 | Reserved |
DCCP-Request
Resposta do servidor ao pacote DCCP-Request, com X = 1.
Cabeçalho DCCP genérico |
---|
Service code |
Opções e padding |
Application data area |
Service code - 32 bits - informa o tipo de aplicação com a qual se deseja fazer a conexão.
DCCP-Response
Pacote utilizado pelo cliente na inicialização da conexão, com X = 1.
Cabeçalho DCCP genérico |
---|
Subcabeçalho de número acknowledgement |
Service code |
Opções e padding |
Application data area |
Service code - 32 bits - informa o tipo de aplicação com a qual se deseja fazer a conexão.
Subcabeçalho de número acknowledgement - 48 bits - Os DCCP-Responses são sempre enviados durante a inicialização de conexão, portanto esse campo sempre será igual ao número de sequência num Request recebido.
DCCP-Data
Pacote que carrega os dados transferidos.
Cabeçalho DCCP genérico |
---|
Opções e padding |
Application data area |
DCCP-Ack e DCCP-DataAck
São utilizados para mensagens de acknowledgment. DataAck também transporta dados.
Cabeçalho DCCP genérico |
---|
Subcabeçalho de número acknowledgement |
Opções e padding |
Application data area |
DCCP-CloseReq e DCCP-Close
Participam do encerramento da conexão. Tanto cliente quanto servidor pode enviar pacotes Close, mas apenas o servidor pode enviar CloseReq. Com X = 1.
Cabeçalho DCCP genérico |
---|
Subcabeçalho de número acknowledgement |
Opções e padding |
Application data area |
DCCP-Reset
Esse pacote encerra a conexão, com X = 1.
Cabeçalho DCCP genérico | |||||
---|---|---|---|---|---|
Subcabeçalho de número acknowledgement | |||||
Reset code | Dado 1 | Dado 2 | Dado 3 | ||
Opções e padding | |||||
Application data area (error text) |
Reset code - 48 bits - Motivo pelo qual a conexão foi encerrada.
Dados 1, 2 e 3 - 8 bits cada - Informação adicional sobre o motivo de encerramento.
Application data area (error text) - 48 bits - Log de descrição dos erros.
Reset code | Nome |
---|---|
0 | Não especificado |
1 | Closed |
2 | Aborted |
3 | Sem conexão |
4 | Erro de pacote |
5 | Erro de opção |
6 | Mandatory error |
7 | Connection refused |
8 | Bad service code |
9 | Too busy |
10 | Bad init cookie |
11 | Aggression penalty |
12-127 | Reserved |
128-255 | Códigos específicos CCID |
DCCP-Sync e DCCP-SyncAck
Pacotes auxiliam endpoints DCCP na recuperação de sincronização após várias perdas de pacotes. Com X = 1.
Cabeçalho DCCP genérico |
---|
Subcabeçalho de número de acknowledgement |
Opções e padding |
Application data area |
Conexão DCCP
O DCCP é um protocolo unicast com transferência de dados por parte de cliente e servidor. A conexão do DCCP é realizada por meio de duas conexões unidirecionais separadas, as meia-conexões. As meia-conexões são definidas como dados que são enviados por uma estação e a resposta ACK da outra parte.
A conexão é caracterizada por estado, como ilustrado na tabela abaixo.
Cliente | Servidor | |
---|---|---|
Sem conexão | ||
CLOSED | LISTEN | |
Inicialização | ||
REQUEST | DCCP-Request -> | RESPOND |
<- DCCP-Response | ||
PARTOPEN | DCCP-Ack/DataAck -> | |
Transferência de dados | ||
OPEN | <- DCCP-Data, Ack, DataAck -> | OPEN |
Finalização | ||
CLOSING | <- DCCP-CloseReq | CLOSEREQ CLOSED |
DCCP-Close -> | ||
<- DCCP-Reset | ||
TIMEWAIT | ||
CLOSED |