1) O documento descreve o processo de estabelecimento e encerramento de conexões TCP, incluindo a troca de segmentos SYN, ACK e FIN entre cliente e servidor.
2) No estabelecimento, cliente e servidor trocam segmentos SYN e ACK para estabelecer a conexão e sincronizar números de sequência.
3) Para encerrar a conexão, cliente ou servidor enviam segmentos FIN para fechar cada sentido da comunicação, requerindo quatro segmentos no total.
2. 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; Sequence number = x;
ACK = 0; Acknowledgement number = 0
3. 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; Sequence number = y;
ACK = 1; Acknowledgement number = x + 1
4. 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.
11. 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.