estabelecimento e encerramento de conexão tcp
DESCRIPTION
Material descreve o conceito do estabelecimento e do encerramento de uma conexão TCP entre dois host. Ao final há um exemplo para demonstrar como as flags e campos do cabeçalho se comportam.TRANSCRIPT
Estabelecimento e Encerramento de Conexão TCP
Luis Octávio C. de Moraes [email protected]
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).
Estabelecimento
SYN = 1; Sequence number = x;
ACK = 0; Acknowledgement number = 0
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.
Estabelecimento
SYN = 1; Sequence number = y;
ACK = 1; Acknowledgement number = x + 1
5. Agora o servidor aguarda uma confirmação final do cliente, para poder dar início a transmissão de dados.
6. Os dados são transmitidos.
Estabelecimento
SYN = 0; Sequence number = x + 1;
ACK = 1; Acknowledgement number = y + 1
Segue exemplo:
Estabelecimento
Estabelecimento
Cliente Servidor
Rede
Estabelecimento
Cliente Servidor
SYN: 1 ACK: 0 FIN: 0
Seq: 22 Ack numb: 0
Estabelecimento
Cliente Servidor
SYN: 1 ACK: 0 FIN: 0
Seq: 22 Ack numb: 0
SYN: 1 ACK: 1 FIN: 0
Seq: 45 Ack numb: 23
Estabelecimento
Cliente Servidor
SYN: 1 ACK: 0 FIN: 0
Seq: 22 Ack numb: 0
SYN: 1 ACK: 1 FIN: 0
Seq: 45 Ack numb: 23
SYN: 0 ACK: 1 FIN: 0
Seq: 23 Ack numb: 46
Estabelecimento
Cliente Servidor
SYN: 1 ACK: 0 FIN: 0
Seq: 22 Ack numb: 0
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
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
Encerramento
Cliente Servidor
Encerramento
Cliente Servidor
SYN: 0 ACK: 1 FIN: 1
Seq: 23 Ack numb: 46
Encerramento
Cliente Servidor
SYN: 0 ACK: 1 FIN: 1
Seq: 23 Ack numb: 46
SYN: 0 ACK: 1 FIN: 0
Seq: 46 Ack numb: 24
Encerramento
Cliente Servidor
SYN: 0 ACK: 1 FIN: 1
Seq: 23 Ack numb: 46
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 Servidor
SYN: 0 ACK: 1 FIN: 1
Seq: 23 Ack numb: 46
SYN: 0 ACK: 1 FIN: 0
Seq: 46 Ack numb: 24
SYN: 0 ACK: 1 FIN: 1
Seq: 46 Ack numb: 24
Encerramento
Cliente Servidor
SYN: 0 ACK: 1 FIN: 1
Seq: 23 Ack numb: 46
SYN: 0 ACK: 1 FIN: 0
Seq: 46 Ack numb: 24
SYN: 0 ACK: 1 FIN: 1
Seq: 46 Ack numb: 24
SYN: 0 ACK: 1 FIN: 0
Seq: 24 Ack numb: 47
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/pt-br
– Último acesso em 12/03/2013.