Transmission Control Protocol TCP Introdução, apresentação em três vias, Campos do protocolo e estados da conexão TCP • A confiabilidade dos processos de comunicação foi deixada a cargo do TCP • O TCP é um protocolo: – Orientado à conexão – Confiável 05/11/2015 Profº André Luiz Silva 2 Número de portas • Assim como o UDP o TCP também utiliza número de portas como endereços • O número da porta é atribuído pela aplicação independentemente se o protocolo utilizado será o UDP ou o TCP 05/11/2015 Profº André Luiz Silva 3 Aplicações que usam TCP 05/11/2015 Profº André Luiz Silva 4 Fluxo de entrega TCP • Fluxo do serviço de entrega 05/11/2015 Profº André Luiz Silva 5 Segmentos • As entidades transmissoras e receptoras trocam bytes na forma de segmentos. • Um segmento TCP consiste em um cabeçalho de 20 bytes, seguidos por um campo opcional, seguido de zero ou mais bytes de dados. • Ele pode acumular dados de várias gravações em um único segmento ou dividir os dados de uma única gravação em vários segmentos. Restrições ao tamanho do cabeçalho • Dois fatores restringem o tamanho de um cabeçalho TCP: – Cada segmento, incluindo o cabeçalho, devem caber no campo de dados de um datagrama IP. • 65.515 bytes. – Cada segmento deve caber na MTU no receptor e no transmissor. • No Ethernet, 1500 bytes. Buffers de transmissão e recepção • Os processos podem não consumir e produzir dados à mesma velocidade. • Bufferização: – Buffer de recepção – Buffer de transmissão – Buffers do tipo FIFO (first-in first-out) 05/11/2015 Profº André Luiz Silva 8 Buffers de transmissão e recepção 05/11/2015 Profº André Luiz Silva 9 Buffers de transmissão • Três entradas – Entradas vazias possíveis de serem preenchidas – Área cinza esperando a chegada de ACKs – Área contendo os bytes que já estão prontos para serem enviados 05/11/2015 Profº André Luiz Silva 10 Buffers de recepção • Duas entradas – Entradas vazias aguardando bytes oriundos da rede – Entradas que possuem bytes recebidos aguardando verificação e utilização pelo processo receptor 05/11/2015 Profº André Luiz Silva 11 Bytes e segmentos • A bufferização controla a disparidade de velocidade entre os processos transmissores e receptores. • Porém, existe uma etapa a mais antes da transmissão de dados. Esta etapa é realizada pelo IP • Os segmentos TCP são encaminhados à camada de rede que os encapsula em datagramas IP – Os datagramas, como sabemos, podem chegar fora de ordem, serem perdidos, corrompidos ou retransmitidos 05/11/2015 Profº André Luiz Silva 12 Serviço full-duplex • O TCP oferece serviço em modo full-duplex. • Ou seja, existem buffers de recepção e transmissão em ambas as direções. 05/11/2015 Profº André Luiz Silva 13 Serviço orientado à conexão • O protocolo TCP que cuida dos processos de A solicita ao protocolo TCP de B, que cuida dos processos de B, aprovação para iniciar a transmissão • O TCP de A e de B trocam dados em ambas as direções • Quando os processos não tiverem dados a transmitir, os buffers tornam-se vazios e são reciclados 05/11/2015 Profº André Luiz Silva 14 Serviço confiável • O TCP utiliza um mecanismo de confirmação (ACK) para verificar a integridade dos dados. • Cada byte dentro de um segmento TCP tem o seu próprio número de sequência de 32 bits. • Cada segmento enviado é identificado e confirmado pelo destino através do envio de um pacote de reconhecimento (ack). 05/11/2015 Profº André Luiz Silva 15 Numeração de bytes • O TCP numera todos os bytes de dados que são transmitidos por uma conexão. • A numeração é independente em cada direção • Isto ocorre quando o TCP recebe os dados do processo e os armazena no buffer de envio • O valor inicial é estabelecido por um gerador de números aleatórios entre 0 e 2³² - 1 – Exemplo: • Se o número aleatório for escolhido como 1057 e a quantidade de bytes for 6000 bytes, os bytes serão numerados de 1057 a 7056 05/11/2015 Profº André Luiz Silva 16 Numeração do segmento • O TCP mantém registro dos segmentos transmitidos e/ou recebidos. Porém, não há um campo específico para o número do segmento. Ao invés disso: – Número de seqüência – Número de confirmação • Estes dois números referem-se ao número de bytes e não ao número de segmentos 05/11/2015 Profº André Luiz Silva 17 Número de seqüência • Após os bytes terem sido numerados, o TCP atribui um número de sequencia para cada segmento transmitido. • O número de seqüência é igual ao número do primeiro byte transportado nesse segmento. 05/11/2015 Profº André Luiz Silva 18 Exemplo 05/11/2015 Profº André Luiz Silva 19 Número de confirmação • O número ACK define o número do próximo byte que o protocolo TCP do receptor espera receber. • Lembre-se que a comunicação é full-duplex. • Ou seja, se A envia para B um segmento com número de seqüência 2500, o ACK que B enviará para A terá o número de confirmação 2501 05/11/2015 Profº André Luiz Silva 20 Cabeçalho do segmento TCP • Cabeçalho de 20 bytes (sem as opções) a 60 bytes (com as opções), seguido do campo de dados. 05/11/2015 Profº André Luiz Silva 21 Cabeçalho do TCP • Porta de origem (16 bits) – Número da porta do programa da camada de aplicação do transmissor. • Porta de destino (16 bits) - Número da porta do programa da camada de aplicação do receptor. • Número de sequência (32 bits) – Define o número atribuído ao primeiro byte de dados adicionado ao segmento. • Número de confirmação (32 bits) – Contém o número do byte que o transmissor do segmento espera receber da outra parte. É uma confirmação acumulativa. • Tamanho do cabeçalho (4 bits) – Define a quantidade de palavras de 4 bytes no cabeçalho. Os valores geralmente são 5 ou 15. 05/11/2015 Profº André Luiz Silva 22 Cabeçalho do TCP • Reservado (6 bits) – Reservado para uso futuro. • Controle (6 bits diferentes) – Veja tabela na próxima transparência • Tamanho da janela (16 bits) – Define o tamanho da janela que a outra parte deve suportar. • Checksum (16 bits) – Cálculo para verificação de erros. • Indicador de urgência (16 bits) – Utilizado quando o segmento contém dados de urgência. Veremos mais adiante. • Opções ( 40 bytes) – Informações adicionais. 05/11/2015 Profº André Luiz Silva 23 Flags 05/11/2015 Profº André Luiz Silva 24 Maximum Segment Size (1) • MSS (Tamanho Máximo do Segmento). – Limita a quantidade de dados que o TCP irá enviar num único datagrama IP. – Valores para MSS são trocados nos pacotes SYN (requisição de conexão) que abrem a conexão TCP. Maximum Segment Size (2) • Uma opção largamente utilizada permite que o host determine o tamanho máximo do segmento que irá receber. • O uso de segmentos grandes é mais eficiente. – Menos cabeçalho para uma mesma quantidade de dados. – Porém, alguns hosts podem não conseguir administrar segmentos muito grandes. Maximum Segment Size (3) • Durante a etapa de conexão, cada host informa o valor do seu MSS e avalia a do seu parceiro. • Caso contrário, o padrão de 536 bytes é estipulado. • Todos os hosts da Internet são obrigados a aceitar segmentos de 536 + 20 bytes. Timestamp • Outra opção também largamente utilizada. • Transporta um período de tempo enviado pelo transmissor e ecoado pelo receptor. • Calcula as amostras de tempo de ida e volta. Campos do TCP Conexão em três vias 05/11/2015 Profº André Luiz Silva 30 Primeira via • O lado cliente envia um segmento TCP especial ao lado servidor. Este segmento não contém dados. O bit SYN é ajustado para 1. • O cliente escolhe aleatoriamente um número de sequência e coloca-o no campo “número de sequência”. • O segmento é encapsulado em um datagrama IP e enviado ao servidor 05/11/2015 Profº André Luiz Silva 31 Segunda via • Assim que o datagrama IP chega ao servidor, este extrai o segmento SYN, aloca buffers e variáveis. • Este segmento também não contém dados. • O bit SYN está com valor 1 • O campo de reconhecimento é inicializado. • O servidor escolhe o seu próprio número de sequência. 05/11/2015 Profº André Luiz Silva 32 Terceira via • Ao receber o segmento SYN/ACK o cliente também reserva buffers e variáveis para a conexão. • Reconhece o segmento de confirmação colocando o valor do campo número de sequência + 1 no campo de reconhecimento. • O bit SYN é ajustado para 0, já que a conexão está estabelecida. • O bit PSH é ajustado para 1. 05/11/2015 Profº André Luiz Silva 33 Transferência de dados 05/11/2015 Profº André Luiz Silva 34 Término de conexão 05/11/2015 Profº André Luiz Silva 35 Etapas da conexão • Representadas em uma máquina de estados finitos. – 11 estados. • Em cada estado, determinados eventos são válidos. • Quando ocorre algum evento válido, torna-se possível executar uma ação. • Se ocorrer algum outro evento, um erro é reportado. Eventos e ações • Evento: – Pode ser uma chamada de sistema iniciada pelo usuário. • Connect, listen, send ou close. – A chegada de um segmento. • SYN, FIN, ACK ou RST. • Ação: – Envio de um segmento de controle. • SYN, FIN ou RST. • Ou nada, indicado por um travessão. Estados da conexão Estados do cliente • Começa no estado CLOSED saindo desse estado ao executar uma abertura ativa (CONNECT). • Se o outro lado executar a primitiva oposta, a conexão será estabelecida e o estado passará para ESTABLISHED. • O encerramento pode ser iniciado por qualquer um dos lados. Estados do servidor • Executa a primitiva LISTEN e aguarda. • Quando um SYN chegar, ele será confirmado e o servidor passa para o estado SYN RCVD. • Quando o SYN do servidor for confirmado, ele passará para o estado ESTABLISHED. • Então, os dados podem ser transmitidos. Encerramento da conexão • Ao terminar o envio dos dados, o cliente executa a primitiva CLOSE, o que faz um FIN ser enviado ao servidor. • O servidor também, ao receber o FIN, executa a primitiva CLOSE enviando um FIN ao cliente. • Ao receber o ACK do cliente o servidor encerra a conexão e apaga seus registros. Estados das conexões TCP - Cliente Estados das conexões TCP - Servidor Reset da conexão • TCP cliente solicita conexão a uma porta não existente • Ocorrência de alguma situação anormal levando o servidor a abortar a conexão • TCP cliente percebe que a conexão está ociosa por muito tempo e resolve desligar a conexão 05/11/2015 Profº André Luiz Silva 44