O Transmission Control Protocol é um protocolo muito importante na camada de transporte para o modelo OSI ou TCP/IP. Existem muitas vantagens no TCP, como:
- O TCP retransmite se algum dado enviado não for confirmado pelo receptor dentro de algum tempo.
- O TCP estabelece alguma conexão antes de enviar os dados. Chamamos essa conexão de handshake de 3 vias.
- TCP tem mecanismo de controle de congestionamento.
- O TCP pode detectar erros usando alguns métodos.
Vamos aprender principalmente sobre o handshake de 3 vias do TCP. Vamos também aprender sobre os campos importantes no Wireshark para handshake de 3 vias.
Aperto de mão de 3 vias
Existem três trocas de quadros que acontecem em um handshake de 3 vias:
O primeiro quadro é sempre enviado pelo cliente ao servidor. Vamos entender isso a partir de um diagrama simples:
'SERVIDOR CLIENTE'
Frame1: O cliente envia o quadro SYN para o servidor----------------------------------><-------------------------------------------Servidor envia quadro SYN+ACK para o cliente: Frame2
Frame3: Cliente envia quadro ACK para o servidor ----------------------------------->
Podemos ver esses três quadros no Wireshark. O filtro “tcp” pode ser usado no Wireshark para ver todos os quadros TCP. Aqui está a captura de tela dos três quadros:
Vamos agora entender todos os três quadros em detalhes:
SYN
Este quadro contém muitas informações sobre as capacidades do cliente para informar o servidor. A captura de tela a seguir mostra todos os campos importantes do quadro SYN:
Aqui estão os campos importantes para o quadro SYN:
Porta de origem: 50602Porta de destino: 80
Número de sequência: 0
Número de Reconhecimento: 0
Comprimento do cabeçalho: 32 bytes
Sinalizadores: 0x002 (SYN):
Reconhecimento: Não definido
Empurrar: não definido
Redefinir: Não definido
Syn: Set -----> Este bit foi definido porque este é um quadro SYN.
Fin: Não definido
Janela: 65535
Ponteiro Urgente: 0
Opção TCP - Tamanho máximo do segmento: 1460 bytes
Opção TCP - Escala da janela: 3 (multiplicar por 8)
Opção TCP - SACK permitido
VISUALIZAR+CONFIRMAR
Este quadro contém muitas informações sobre os recursos do servidor para informar o cliente. A captura de tela a seguir mostra todos os campos importantes do quadro SYN+ACK:
Este quadro também reconhece o quadro SYN que é enviado pelo cliente.
Aqui estão os campos importantes para o quadro SYN+ACK:
Porta de origem: 80Porta de destino: 50602
Número de sequência: 0
Número de Reconhecimento: 1
Comprimento do cabeçalho: 32 bytes (8)
Sinalizadores: 0x012 (SYN, ACK)
Reconhecimento: Definido
Empurrar: não definido
Redefinir: Não definido
Dele: Definido
Fin: Não definido
Janela: 29200
Ponteiro Urgente: 0
Opção TCP - Tamanho máximo do segmento: 1412 bytes
Opção TCP - SACK permitido
Opção TCP - Escala da janela: 7 (multiplicar por 128)
Podemos ver que os bits “Acknowledge” e “SYN” estão definidos neste quadro. Isso ocorre porque esse quadro é SYN+ACK.
ACK
Este quadro é o último quadro do handshake de 3 vias e também o reconhecimento do SYN+ACK pelo cliente. A captura de tela a seguir mostra todos os campos importantes do quadro ACK:
Aqui estão os campos importantes para o quadro ACK:
Porta de origem: 50602Porta de destino: 80
Número de sequência: 1
Número de Reconhecimento: 1
Comprimento do cabeçalho: 20 bytes (5)
Sinalizadores: 0x010 (ACK)
Urgente: não definido
Reconhecimento: Definido
Empurrar: não definido
Redefinir: Não definido
Sin: Não definido
Fin: Não definido
Janela: 32768
Aqui, apenas o bit “Reconhecimento” é definido porque este é um quadro ACK.
Explicação para alguns campos comuns importantes
porta 80 : Observamos uma porta fixa 80 neste tutorial. É porque esta é uma captura HTTP e a porta 80 é fixa (lado do servidor) para comunicação HTTP.
Número sequencial : O número de sequência desse quadro. A sincronização é o primeiro quadro, portanto, temos 0 como número de sequência.
Sinalizadores TCP:
Reconhecimento – Este bit é definido se o quadro for um ACK. Exemplo: SYN+ACK, quadro ACK.
SYN – Este bit é definido se o quadro for um SYN. Exemplo: SIN.
Janela : este campo compartilha o tamanho máximo da janela do remetente no modo de recebimento. Exemplo: Temos o tamanho da janela de 65535 bytes no quadro SYN. Isso significa que o receptor pode receber dados TCP máximos de 65.535 bytes a qualquer momento.
SACK permitido : Este bit é definido se o envio suportar SACK [reconhecimento seletivo].
Tamanho Máximo do Segmento : Também podemos chamá-lo de MSS. Isso define o quadro de dados máximo que o remetente pode receber. Exemplo: Obtemos MSS como 1460 bytes no quadro SYN.
Conclusão
Aprendemos sobre o handshake TCP de 3 vias e todos os campos úteis para quadros SYN, SYN+ACK e ACK. Se você quiser aprender mais sobre TCP, você pode seguir este link RFC https://tools.ietf.org/html/rfc793 .