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
Download

05 Introdução, apresentação em três vias, Campos do protocolo e