Possíveis estados do TCP no início da conexão:
LISTEN – Estado empregado pelo servidor quando está aguardando solicitações de conexão;
SYN-SENT – Representa o estado do cliente quando este envia um flag SYN ao servidor e está aguardando o estabelecimento da conexão;
SYN-RECEIVED – É o estado do servidor após ter recebido o flag SYN e retornado os flags SYN-ACK ao cliente aguardando pela confirmação do estabelecimento da conexão;
ESTABLISHED – Esse estado é adotado tanto pelo cliente como pelo servidor. O cliente emprega este estado quando recebe os flags SYN-ACK do servidor e retorna um ACK. Já o servidor utiliza este estado quando recebe o flag ACK do cliente. Dessa forma, o three-way-handshake é encerrado e os dados da camada de aplicação podem fluir normalmente.
Possíveis estados do TCP no término da conexão:
FIN-WAIT-1 – É o estado adotado pelo iniciador após enviar um flag FIN ao receptor dando início ao encerramento da conexão TCP;
CLOSE-WAIT – Representa o estado do receptor ao receber o flag FIN do iniciador. A partir desse momento, o receptor inicia seu procedimento de encerramento e confirma o recebimento do FIN enviando um ACK ao iniciador;
FIN-WAIT-2 – O iniciador muda para este estado ao receber o ACK do receptor, e aguarda o envio de um flag FIN pelo receptor.
LAST-ACK – É o estado empregado pelo receptor ao enviar um flag FIN ao iniciador. Significa que o receptor aguarda apenas o ACK do iniciador confirmando o envio de seu flag FIN para finalizar sua conexão;
TIME-WAIT – Representa o estado do iniciador ao receber o flag FIN do receptor e confirmá-lo com o envio de um flag ACK. O iniciador aguarda um tempo para ter certeza que o receptor recebeu seu flag ACK;
CLOSED – É o estado adotado pelo receptor ao receber o ACK de confirmação de seu flag FIN. Também é o estado empregado pelo iniciador após o término do tempo aguardado. Este estado representa o fim de uma conexão TCP.
Fonte:"http://www.itnerante.com.br/profiles/blogs/estados-do-protocolo-tcp-um-assunto-que-voc-deve-saber".
O TCP é o protocolo da camada de transporte do modelo de referência OSI que é orientado a conexão.
Por ter essa característica, antes de ocorrer a transmissão de dados deve-se estabelecer uma sessão de comunicação entre as duas partes. Essa sessão é estabelecida através de um processo chamado three-way handshake.
ACK = Acknowledgement (Reconhecimento)
SYN = Synchronize (Sincronizar)
Estabelecimento de conexões
1. O cliente envia um pacote com a flag SYN ativa;
2. O servidor responde com um pacote com as flags SYN + ACK;
3. O cliente reponde com um pacote ACK.
Traduzindo
1. Cliente: Servidor, estou enviando a mensagem 100 (Número de sequência do cliente). Dá pra sincronizar (SYN)?
2. Servidor: Claro, sincroniza a mensagem 200 (Número de sequência do servidor) que estou enviando (SYN). Prossiga com a mensagem 101 (ACK).
3. Cliente: Ok, estou enviando a mensagem 101. Prossiga com a mensagem 201 (ACK).
O cliente e o servidor, possuem números de sequência distintos, por este motivo faz-se necessária a sincronização em ambos os sentidos.
Feita a sincronização, começam a troca de pacotes com base em números de sequência, que tem o objetivo de enumerar as pacotes de cada um.
Os estados possíveis da conexão TCP são os seguintes:
LISTEN: esse é o estado verdadeiro de uma conexão TCP, ele ocorre quando um host está esperando um pedido para iniciar uma conexão.
SYN-SENT: esse estado indica que o host enviou um SYN para iniciar a conexão e está aguardando a resposta SYN-ACK adequada.
SYN-RCVD: esse estado indica que o host enviou a resposta SYN-ACK depois de ter recebido o SYN.
ESTABLISHED: esse estado indica que a conexão foi estabelecida. O host que iniciou a conexão entra nesse estado depois de receber o SYN-ACK e o host que responde depois que recebe o ACK.
Esses são os estados que os hosts passam no processo de estabelecimento da conexão TCP no processo chamado 3-way handshake.
Existem outros estados que acontecem no desmembramento de uma conexão TCP:
FIN-WAIT-1: O estado que um host se encontra após ter enviado um pacote FIN inicial pedindo um fechamento correto da conexão TCP.
CLOSE-WAIT: O estado da conexão do host que recebeu um FIN inicial e envia de volta um ACK para confirmar o FIN.
FIN-WAIT-2: O estado da conexão do host que recebeu a resposta ACK para seu FIN inicial, e indica que agora está esperando um FIN final.
LAST-ACK: Esse estado indica que o host acabou de enviar seu segundo FIN, que é necessário para encerramento correto da conexão TCP, e está aguardando uma confirmação.
TIME-WAIT: Nesse estado encontra-se o host iniciador que recebeu um FIN final e enviou um ACK para fechar a conexão. Nesse momento ele não irá mais receber nenhuma confirmação do ACK que acabou de enviar, portanto espera um período de tempo para fechar a conexão.
CLOSED: pode-se considerar como “sem estado”. Esse estado existe antes que uma conexão seja iniciada ou quando ela é finalizada.
Fonte:https://juancarloscunha.wordpress.com