You are on page 1of 19

Estabelecimento e Encerramento de Conexão TCP

Luis Octávio C. de Moraes luisoctavio.moraes@gmail.com

Estabelecimento
1. Um lado (o servidor) aguarda passivamente por uma conexão de entrada, executando as primitivas LISTEN e ACCEPT através da especificação de uma determinada origem ou de ninguém em particular. 2. O outro lado (o cliente) executa a primitiva CONNECT, especificando o endereço do socket (ip+porta) a qual deseja conectar, o tamanho máximo do segmento TCP que está disposto a aceitar, opcionalmente, alguns dados do usuário (por exemplo, uma senha).
SYN = 1;
ACK = 0;

Sequence number = x;
Acknowledgement number = 0

Estabelecimento
3. Quando o segmento chega ao servidor, a entidade TCP verifica se existe um processo executando a primitiva LISTEN na porta informada no campo ‘destination port’. Caso não tenha, ela envia uma resposta com o bit RST ativado para rejeitar a conexão.
4. Se algum processo estiver na escuta da porta, esse processo receberá o segmento TCP de entrada. Em seguida, ele poderá aceitar ou registrar a conexão. Se aceitar, um segmento de confirmação será retornado.
SYN = 1; ACK = 1; Sequence number = y; Acknowledgement number = x + 1

Estabelecimento
5. Agora o servidor aguarda uma confirmação final do cliente, para poder dar início a transmissão de dados.
SYN = 0; Sequence number = x + 1;

ACK = 1;

Acknowledgement number = y + 1

6. Os dados são transmitidos.

Estabelecimento
Segue exemplo:

Estabelecimento Cliente Servidor

Rede

Estabelecimento Cliente
SYN: 1 ACK: 0 FIN: 0 Seq: 22 Ack numb: 0

Servidor

Estabelecimento Cliente
SYN: 1 ACK: 0 FIN: 0 Seq: 22 Ack numb: 0

Servidor

SYN: 1 ACK: 1 FIN: 0

Seq: 45 Ack numb: 23

Estabelecimento Cliente
SYN: 1 ACK: 0 FIN: 0 Seq: 22 Ack numb: 0

Servidor

SYN: 1 ACK: 1 FIN: 0

Seq: 45 Ack numb: 23

SYN: 0 ACK: 1 FIN: 0

Seq: 23 Ack numb: 46

Estabelecimento Cliente
SYN: 1 ACK: 0 FIN: 0 Seq: 22 Ack numb: 0

Servidor

SYN: 1 ACK: 1 FIN: 0

Seq: 45 Ack numb: 23

SYN: 0 ACK: 1 FIN: 0

Seq: 23 Ack numb: 46

Transferência de Dados

Encerramento
Apesar das conexões TCP serem full-duplex, fica mais fácil compreender como as conexões são encerradas se as considerarmos um par de conexões simplex. Cada conexão simplex é encerrada de modo independente de sua parceira. Qualquer dos lados pode enviar um segmento com o bit FIN ativado, o que significa que não há mais dados para serem transmitidos. Quando FIN é confirmado, esse sentido é desativado para novos dados. No entanto, os dados podem continuar a fluir indefinitamente no outro sentido. De modo geral, são necessários quatro segmentos TCP para encerrar uma conexão, isto é um FIN e um ACK para cada sentido. Porém é possível que o primeiro ACK e o segundo FIN ocupem o mesmo segmento, o que baixa o número total para três.

Encerramento
Segue exemplo:

Encerramento Cliente Servidor

Encerramento Cliente
SYN: 0 ACK: 1 FIN: 1 Seq: 23 Ack numb: 46

Servidor

Encerramento Cliente
SYN: 0 ACK: 1 FIN: 1 Seq: 23 Ack numb: 46

Servidor

SYN: 0 ACK: 1 FIN: 0

Seq: 46 Ack numb: 24

Encerramento Cliente
SYN: 0 ACK: 1 FIN: 1 Seq: 23 Ack numb: 46

Servidor

SYN: 0 ACK: 1 FIN: 0

Seq: 46 Ack numb: 24

Obs: Neste momento foi encerrado o envio de novos dados apenas no sentido cliente-servidor. Nada impede do servidor continuar enviando novos dados.

Encerramento Cliente
SYN: 0 ACK: 1 FIN: 1 Seq: 23 Ack numb: 46 SYN: 0 ACK: 1 FIN: 0 Seq: 46 Ack numb: 24

Servidor

SYN: 0 ACK: 1 FIN: 1

Seq: 46 Ack numb: 24

Encerramento Cliente
SYN: 0 ACK: 1 FIN: 1 Seq: 23 Ack numb: 46
SYN: 0 ACK: 1 FIN: 0 Seq: 46 Ack numb: 24

Servidor

SYN: 0 ACK: 1 FIN: 1 SYN: 0 ACK: 1 FIN: 0 Seq: 24 Ack numb: 47

Seq: 46 Ack numb: 24

Encerramento da conexão finalizado para os dois lados da conexão.

Referências
• TANENBAUM. A. Rede de computadores. 4º Edição.
• http://support.microsoft.com/kb/172983/ptbr
– Último acesso em 12/03/2013.