Buscar

TCP_v2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Faculdade de Engenharia - UERJ
Departamento de Engenharia de Sistemas e Computação
Teleprocessamento e Redes de Computadores
Professora: Marley Vellasco
 
Transmission Control Protocol
André de Oliveira Dias
Jonas Ribeiro
Protocolo de Transporte
Em uma arquitetura de protocolos, o protocolo de transporte fica acima de uma rede ou camada internetwork, que fornece serviços relacionados à rede. O protocolo de transporte presta serviços de transporte (TS) às camadas superiores que utilizam protocolos FTP, HTTP, SMTP e etc., escondendo dos mesmos detalhes das camadas inferiores e das redes participantes da transferência de dados. A entidade de transporte local se comunica com alguma entidade de transporte remota, utilizando os serviços de alguma camada inferior, tal como o Protocolo de Internet. O protocolo de transporte fornece um serviço de transferência de dados fim-a-fim que protegem os protocolos de camadas superiores das intervenções na rede. A camada de transporte transporta mensagens da camada de aplicação entre os lados do cliente e servidor de uma aplicação. Dois tipos básicos de serviço de transporte são possíveis: orientado à conexão e sem conexão ou serviço de datagrama. Um serviço orientado a conexão prevê a criação, manutenção, e término de uma conexão lógica entre os usuários do TS. Há dois protocolos de transporte: TCP, orientado a conexão, e o UDP, que é sem conexão, qualquer um deles pode levar mensagens de camada de aplicação. 
Geralmente o serviço orientado a conexão implica que o serviço é confiável, mas para isso quatro problemas precisam ser abordados:
Endereçamento
Multiplexação
Controle de Fluxo
Conexão (estabelecimento e término)
Serviço de Rede Confiável
2.1 Endereçamento
O problema com o endereçamento é simplesmente este: Um usuário de uma determinada entidade de transporte quer estabelecer uma conexão com ou fazer uma transferência de dados para um usuário de alguma entidade de transporte diferente usando o mesmo protocolo. O usuário destino precisa ser especificado por:
Identificação do Usuário
Identificação da Entidade de Transporte
Endereço do Host
Número da Rede
O protocolo de transporte deve ser capaz de obter essas informações do endereço de TS do usuário. O endereço do usuário é especificado em host e porta. A variável porta representa um usuário TS particular no host especificado. Geralmente há uma entidade de transporte em cada host, portanto, a identificação da entidade de transporte não é necessária. Se mais de uma entidade de transporte estiver presente, há normalmente apenas uma de cada tipo, neste caso, o endereço deve incluir uma designação do tipo de protocolo de transporte (por exemplo, TCP e UDP). No caso de uma rede única, o Host identifica um dispositivo de rede conectado. No caso de internet, o Host é endereço global de internet. No TCP, a combinação de porta e host é referido como socket.
O roteamento não é uma preocupação da camada de transporte, ele simplesmente passa um pedaço de endereço do host até o serviço de rede, a porta está incluída no cabeçalho, para ser usada no destino pelo protocolo de transporte da entidade destino. Uma questão continua por resolver: Como o usuário inicial do TS sabe o endereço de destino? Para isso existem duas estratégias estáticas e duas dinâmicas:
O usuário TS sabe o endereço que deseja usar antes mesmo de usá-lo, isso é basicamente uma função da configuração do sistema. De tempos em tempos, uma rotina realiza uma conexão a um processo para obter estatísticas, esses processos não são conhecidos e acessíveis a todos.
Alguns serviços usualmente utilizados são assinados como “endereços bem conhecidos”, como exemplos no lado do servidor o FTP, SMTP e outros protocolos padrões.
Um servidor de nomes é fornecido, o usuário TS solicita um serviço por um nome genérico ou global, o pedido é enviado para o servidor de nomes que faz uma pesquisa nos diretórios e retorna um endereço, a entidade de transporte prossegue com a conexão. Este serviço é útil para aplicações que mudam de local de tempos em tempos. Por exemplo, um processo de entrada de dados pode ser movido de um host para outro em uma rede local para balancear a carga.
Em alguns casos, o destino é um processo que é gerado no momento que é solicitado, o remetente pode solicitar o processo a um endereço conhecido, o usuário deste endereço é um processo privilegiado do sistema que irá criar um novo processo e retornar o seu endereço. Por exemplo, um programador desenvolveu uma aplicação particular que irá executar remotamente num servidor, mas foi iniciada localmente. Um pedido é emitido remotamente ao gerenciador de Jobs que inicia o processo. 
2.2 Multiplexação
No que diz respeito à interface entre o protocolo de transporte e protocolos de nível superior, o protocolo de transporte executa uma função de multiplexação / desmultiplexação, ou seja, vários usuários usam o mesmo protocolo de transporte e são distinguidos por números de porta ou pontos de acesso ao serviço. 
A entidade de transporte também pode desempenhar uma função de multiplexação com respeito aos serviços de rede que utiliza. Existe a multiplexação para cima que é a multiplexação de várias conexões em uma conexão única no nível inferior e a multiplexação para baixo que é a multiplexação como a divisão de uma única conexão em várias conexões no nível inferior. Considerando uma entidade de transporte fazendo uso de um serviço X.25, por que a entidade de transporte deve aplicar a multiplexação para cima? Existem pelo menos 4095 circuitos virtuais disponíveis, isto é mais do que suficiente para lidar com todos os usuários TS ativos. Se um único circuito virtual fornece throughput suficiente para usuários TS múltiplos, a multiplexação para cima é indicada.
Por outro lado, a multiplexação para baixo pode ser usada para melhorar o throughput. Por exemplo, cada circuito virtual X.25 é restrito a um número de sequência de 3 ou 7 bits. Um espaçamento maior na sequência pode ser necessário para redes com latência e velocidade altas. Se existir um único nó do host sobre o qual todos os circuitos virtuais são multiplexados, o throughput de uma conexão de transporte não pode exceder a taxa de dados desse link.
 2.3 Controle de Fluxo
O controle de fluxo é um mecanismo relativamente simples na camada de enlace, mas bastante complexo na camada de transporte, por dois motivos:
O atraso de transmissão entre as entidades de transporte é geralmente longo quando comparado ao tempo de transmissão real. Isto significa que há um atraso considerável na a comunicação do controle de fluxo de informação.
Como a camada de transporte opera através de uma rede ou internet, a quantidade do atraso de transmissão pode ser altamente variável. Isto torna complicado usar efetivamente um mecanismo de timeout para retransmissão de dados perdidos.
Em geral, há duas razões pelas quais uma entidade de transporte gostaria de restringir a taxa de transmissão do segmento através de uma conexão de outra entidade de transporte:
• O usuário da entidade de transporte de recebimento não pode manter-se com o fluxo de dados.
• A entidade de transporte de recebimento em si não pode manter-se com o fluxo de segmentos.
Como esses problemas se manifestam? Presumivelmente, uma entidade de transporte tem certa quantidade de espaço de buffer. Segmentos de entrada são adicionados ao buffer. Cada segmento de buffer é processado (o cabeçalho de transporte é examinado) e os dados são enviados para o usuário TS. Qualquer um dos dois problemas mencionados fará com que o buffer fique cheio. Assim, a entidade de transporte precisa tomar medidas para parar ou diminuir o fluxo de segmentos para evitar um overflow no buffer. Este problema é difícil de resolver por causa da diferença de tempo entre o emissor e o receptor. Existem quatro maneiras de lidar com o controle de fluxo, a entidade receptora pode:
Não fazer nada.
Recusar a aceitar novos segmentos a partir do serviço de rede.
Usar umprotocolo fixo de janela deslizante.
Usar o esquema de crédito.
A primeira opção significa que os segmentos que geram overflow no buffer são descartados, a entidade de transporte emissora não obtém o ACK e irá retransmitir isso é muito ruim porque a vantagem de uma rede confiável é que esta nunca irá retransmitir, além disso, essa manobra agrava mais o problema porque a entidade de transporte emissora aumena a sua saída incluindo novos segmentos mais os antigos que serão retransmitidos.
A segunda alternativa é um mecanismo de backpressure que conta com o serviço de rede para fazer o trabalho. Quando um buffer da entidade de transporte está cheio, ele recusa dados adicionais do serviço de rede, isto provoca procedimentos de controle de fluxo dentro da rede que acelera os serviços de rede. Este serviço, por sua vez, recusa segmentos adicionais a partir da sua entidade de transporte, este mecanismo é grosseiro, por exemplo, se múltiplas conexões de transporte são multiplexadas em um único circuito virtual, o controle será exercido sobre o fluxo agregado de todas as conexões de transporte.
A terceira opção possui elementos chave, como:
• O uso de números de sequência em unidades de dados
• A utilização de uma janela de tamanho fixo
• O uso de ACK’s para avançar de janela
Com um serviço de rede confiável, a técnica de janela deslizante funcionaria muito bem. Por exemplo, considere um protocolo com um tamanho de janela de 7. Quando o emissor recebe uma ACK para um segmento particular, ele é automaticamente autorizado a enviar os seguintes 7 segmentos (claro, alguns podem ter sido enviados). Quando o buffer do receptor tiver os 7 segmentos, ele pode reter os segmentos que ainda estão por vir para evitar um overflow no buffer. A entidade de transporte emissora pode enviar no máximo sete segmentos adicionais e, em seguida, deve parar porque o serviço de rede é confiável, não irá haver timeout nem retransmissão por parte do emissor. Assim, em algum ponto, uma entidade de transporte emissora pode ter um número de segmentos em circulação para o qual não tenha recebido os ACK’s referentes a esses segmentos porque estamos lidando com uma rede confiável, a entidade de transporte emissora pode assumir que os segmentos vão chegar ao destino e que a falta de ACK’s é uma tática de controle de fluxo. Essa tática não funcionaria bem em uma rede não confiável, porque a entidade de transporte emissora não saberia se a falta de ACK é devido ao controle de fluxo ou de um segmento perdido.
A quarta alternativa, um regime de crédito (credit scheme), fornece ao receptor um maior grau de controle sobre o fluxo de dados. Embora não seja estritamente necessário num serviço de rede confiável, um regime de crédito deve resultar em um fluxo de tráfego suave. Além disso, é um esquema mais eficaz com um serviço de rede não confiável. O regime de crédito desacopla o ACK do controle de fluxo, diferente do que acontece em protocolos de janela deslizante fixa, tais como X.25 e HDLC, onde os dois são sinônimos. Cada segmento transmitido inclui em seu cabeçalho três domínios relacionados ao controle de fluxo: Número de sequência (SN), o número de confirmação (AN) e janela (W). Quando uma entidade de transporte envia um segmento, ela inclui o número de sequência do primeiro octeto no campo de dados segmento, esse número de sequência é único e os octetos de dados restantes são numerados sequencialmente após o primeiro octeto de dados. A entidade de transporte reconhece um segmento de entrada com um segmento de retorno que contém a seguinte interpretação (AN = i, W = j):
• Todos os octetos que tem número de sequência SN = i – 1 são reconhecidos, o próximo octeto esperado possui número de sequência i.
• Permissão é concedida para enviar uma janela adicional de W = j dados de octetos;
isto é, os octetos j correspondem aos números de sequência I através de i + j – 1
A figura abaixo mostra o mecanismo simplificado do fluxo de dados em uma única direção, assumindo que 200 octetos de dados enviados em cada segmento. Inicialmente, através do processo de estabelecimento da conexão, o envio e recebimento de números de sequência são sincronizados e à entidade de transporte A é concedida uma alocação de crédito inicial de 1400 octetos, começando com o octeto de número segmento 1001. O primeiro segmento transmitido pela entidade de transporte A contém octetos de dados numerados de 1001 até 1200. Depois de enviar 600 octetos em três segmentos, a entidade A diminuiu sua janela para um tamanho de 800 octetos (números de 1601 até 2400). Depois da entidade B receber esses três segmentos, 600 octetos dos originais 1400 octetos de crédito são contabilizados, e 800 octetos de crédito estão em circulação. Suponhamos agora que neste ponto, a entidade B é capaz de absorver 1000 octetos de dados de entrada nesta conexão. Assim, a entidade B confirma o recebimento de todos os octetos até 1600 e emite um crédito de 1000 octetos. Isto significa que a entidade A pode enviar octetos 1601 até 2600 (5 segmentos). No entanto, no momento em que a mensagem da entidade B chegar a entidade A, a entidade A já havia enviado dois segmentos, contendo octetos 1601 até 2000 (que era permitido por conta da alocação inicial). Assim, os créditos remanescentes da entidade A após o recebimento de crédito de alocação da entidade B é de apenas 600 octetos (3 segmentos).
Para aumentar o throughput, a entidade receptora pode fornecer mais créditos que o espaço disponível no buffer. Isso só é possível devido ao longo tempo de propagação entre as entidades de transporte transmissora e receptora.
2.4 Conexão
Mesmo com um serviço de rede confiável, existe uma necessidade de procedimentos para estabelecimento e término de conexão para suportar o serviço de conexão orientada. O estabelecimento de conexão serve para três propósitos principais: 
• Ela permite que cada ponta se assegure que a outra ponta existe.
• Permite a troca ou negociação de parâmetros opcionais (tamanho máximo do segmento, tamanho máximo da janela, qualidade de serviço).
• Ela dispara a alocação de recursos do transporte de entidade (espaço de buffer, entrada na tabela de conexão).
O estabelecimento da conexão é por acordo mútuo e pode ser realizada por um conjunto simples de comandos de usuário e segmentos de controle, como mostrado no diagrama de estado abaixo. Para começar, um utilizador TS está num estado CLOSED (isto é, não tem nenhuma conexão de transporte aberta). O utilizador TS pode sinalizar para a entidade TCP local que ele irá esperar passivamente por uma solicitação com um comando Passive Open. Um programa servidor, como time-sharing ou uma aplicação de transferência de arquivo, isso. O usuário TS pode mudar sua mente enviando um comando Close. Após o comando Passive Open ser enviado, a entidade de transporte cria um objeto de conexão de algum tipo (entrada de tabela) que está no estado LISTEN.
A partir do estado CLOSED, um usuário TS pode abrir uma conexão através da emissão do comando Active Open, que instrui a entidade de transporte para tentar o estabelecimento da conexão com um usuário TS remoto designado, o que leva a entidade de transporte enviar um segmento SYN, para sincronizar, este segmento é transportado pela entidade de transporte receptora e interpretada como um pedido para conexão a uma porta em particular. Se a entidade de transporte destino está no estado LISTEN para essa porta então uma conexão é estabelecida através das seguintes acções por parte da entidade de transporte receptora:
• Sinalizar o usuário TS local que uma conexão está aberta.
• Enviar um SYN como confirmação para a entidade de transporte remota.
• Colocar o objeto de conexão em estado ESTAB (estabelecido).
Quando a resposta SYN é recebida pela entidade de transporte emissora, ele também pode mover a conexão para o estado ESTAB. A conexão é prematuramente abortada se qualquer usuário TS emite um comando CLOSE.
A figura abaixo mostra a robustez do protocolo de transporte,ambos os lados podem iniciar uma conexão, além disso, se ambos os lados iniciarem a conexão ao mesmo tempo, ela é estabelecido sem confusão porque o segmento SYN funciona como um pedido de conexão e como um ACK.
Podem ocorrer três situações no caso do SYN ser enviado e a entidade receptora não estiver no estado LISTEN:
• A entidade de transporte receptora pode rejeitar o pedido enviando um segmento RST (reset) para a outra entidade de transporte.
• O pedido pode ficar na fila até que os problemas locais do usuário TS se resolvam.
• A entidade de transporte pode interromper ou sinalizar o usuário TS local para notificá-la de um pedido pendente.
Se o terceiro mecanismo é usado o comando Passive Open não é estritamente necessário, mas pode ser substituído por um comando Accept, que é um sinal a partir do usuário para a entidade de transporte que aceita o pedido de conexão.
O término de conexão é tratado da mesma forma, cada lado ou ambos os lados, pode iniciar um fim, a conexão é fechada por acordo mútuo. Esta estratégia permite que uma terminação abrupta, os dados em trânsito podem ser perdidos, ou graciosa que impede ambos os lados de fecharem a conexão até que todos os dados sejam entregues, para atingir este objetivo, uma conexão no estado FIN WAIT deve continuar a aceitar segmentos de dados até que um segmento FIN (término) é recebido.
3. Serviço de Rede não confiável
Um caso mais difícil para um protocolo de transporte é o de um serviço de rede não confiáveis. Exemplos de tais redes são:
• Um conjunto de redes usando IP
• Uma rede frame relay usando apenas o protocolo central LAPF
• Uma IEEE 802.3 LAN usando a conexão não reconhecida LLC serviço
O problema não é apenas que ocasionalmente os segmentos são perdidos, mas que os segmentos podem chegar fora de sequência devido a atrasos variáveis de trânsito. O problema da não-confiabilidade e não-sequenciamento cria problemas com todos os mecanismos. Geralmente, a solução para cada problema levanta novos problemas, embora existam problemas a serem resolvidos em protocolos de todos os níveis, parece que há mais dificuldades com um protocolo de transporte confiável orientado a conexão do que qualquer outro tipo de protocolo. Sete questões precisam ser abordadas:
• Entrega ordenada
• Estratégia de retransmissão
• Detecção de Duplicação
• Controle de fluxo
• Estabelecimento de conexão
• Término de conexão
• Recuperação de falha
3.1 Entrega Ordenada
Devido aos diversos atrasos variáveis, os segmentos podem chegar fora de ordem. Para isso deve-se numerar os segmentos sequencialmente, o protocolo de transporte da ISO numera cada unidade de dados sequencialmente, o TCP numera implicitamente cada octeto e os segmentos são numerados pelo número do primeiro octeto do segmento.
3.2 Estratégia de Retransmissão
Dois eventos exigem retransmissão do segmento:
– Segmento foi danificado durante o trânsito na(s) rede(s), mas foi recebido
– Segmento não é recebido
O transmissor não tem conhecimento sobre a falha, então o receptor deve informar o recebimento bem sucedido de cada segmento (através de ACK) usando um acknowledgement cumulativo e assim o receptor utiliza um valor fixo ou método adaptativo de timeout para disparar a retransmissão.
3.3 Detecção de Duplicação
Se um ACK é perdido, um ou mais segmentos serão retransmitidos, o receptor deve reconhecer duplicatas, existem duas situações distintas:
– Uma duplicata é recebida antes do CLOSE
	Receptor assume que o ACK foi perdido e o retransmite
	Sender não deve ficar confuso com múltiplos ACKs
	A faixa de valores para os números de sequência deve ser grande o suficiente para não permitir o reinício da numeração durante o tempo máximo de vida de um segmento
– Uma duplicata é recebida após o CLOSE
3.4 Controle de Fluxo
Utiliza o mecanismo de alocação de crédito mas existem alguns problemas como:
a) Receptor envia (AN=i,W=0), fechando a janela temporariamente
b) Depois receptor envia (AN=i,W=j) para reabrir a janela, mas o segmento é perdido.
Neste caso, o transmissor continua achando que a janela está fechada, apesar do receptor achar que foi reaberta
Soluções:
a) Uso de um timeout associado à janela
b) O timer é zerado a cada transmissão de segmento contendo AN e W
c) Se o tempo expirar, a entidade retransmite o segmento
3.5 Estabelecimento de Conexão
Tipo básico: Two-way handshake:
– A envia SYN, B responde com SYN
– Perda de segmento SYN é resolvido por retransmissão
 Retransmissão pode gerar SYNs duplicados:
– As entidades de transporte devem ignorar SYNs duplicados uma vez estabelecida a conexão
Perda ou atraso de segmentos podem gerar problemas na conexão:
– Recepção de segmentos SYN e de dados provenientes de conexões antigas
3.6 Término de Conexão
Entidade de transporte A envia FIN que é recebido antes do último segmento de dados, o receptor B aceita FIN podendo: fechar a conexão ou descartar o último segmento. Uma solução seria associar um número de sequência do próximo octeto com o segmento FIN, após a transmissão dos dados. No segundo caso o receptor espera por todos os segmentos antes do número de sequência especificado no FIN e para lidar com perda de segmento e recebimento de segmentos obsoletos deve-se enviar o ACK FIN que é o fechamento gracioso.
3.7 Recuperação de Falha
Quando um sistema falha, toda a informação de STATUS da entidade de transporte é perdida, a conexão fica half-open, assim o lado que não sofreu a falha pensa que a conexão ainda está ativa. Utiliza-se Close Connection através de um persistence timer, espera por um ACK, quando o tempo expirar, fecha a conexão e avisa ao usuário de transporte. Se a estação que falhou se recuperar antes de expirar o timer, deve enviar RST i em resposta a qualquer segmento recebido ou o usuário deve decidir se solicita uma reconexão.
4. TCP
O TCP provê serviços orientados para conexão para suas aplicações. Alguns desses serviços são a entrega garantida de mensagens da camada de aplicação ao destino e controle de fluxo (isto é, compatibilização das velocidades remetente/receptor). O TCP também fragmenta mensagens longas em segmentos mais curtos e provê mecanismo de controle de congestionamento, de modo que uma origem regula sua velocidade de transmissão quando a rede está congestionada. O protocolo UDP provê serviço não orientado para conexão das aplições. Clientes e servidores trocam dados através dos protocolos de transporte (TCP ou UDP). Tanto o cliente quanto o servidor devem ter a mesma pilha de protocolos e ambos devem interagir com a camada de transporte. Se a rede subjacente ou o serviço de redes não é confiável, como as que usam IP, então uma conexão orientada que usa protocolo de transporte se torna bastante complexa. A causa básica dessa complexidade é a necessidade de lidar com os atrasos relativamente grandes e variável experimentadas entre sistemas finais. Estes grandes ou variáveis atrasos complicam o controle de fluxo e técnicas de controle de erro.
TCP Header
O cabeçalho (header) do TCP deve conter todos os mecanismos oferecidos pelo protocolo. O cabeçalho tem no mínimo 20 octetos. O formato do cabeçalho e seus campos são mostrados a seguir:
Source Port (16 bits): Usuário TCP fonte. 
Destination Port (16 bits): Usuário TCP Destino.
Sequence Number (32 bits): Número de seqüência do primeiro octeto de dados no segmento, exceto quando o SYN flag está setado, onde este é o número de sequência inicial (ISN) e o primeiro octeto de dados é ISN+1. 
Acknowledgment Number (32 bits): Contém o número da sequencia do próximo octeto de dados que a entidade TCP espera receber.
Data Offset (4 bits): Número de palavras de 32 bits no cabeçalho.
Reserved (4 bits): Reservado para uso posterior.
Flags (6 bits): Para cada flag, se estiverem setados:
- CWR: Congestion Window Reduced (janela reduzida de congestionamento).
- ECE: Este bit e o CWR, são definidos na RFC 3168, e são usados para explicitar notificação de funcionamento em congestionamento.
- URG: Bit de indicaçãodo Urgent Pointer.
- ACK: Bit de ACK ativo.
- PSH: Função Push.
- RST: Reseta a conexão.
- SYN: Sincroniza os números de sequência.
- FIN: Bit de indicação de término de envio de dados do transmissor.
Window (16 bits): Mecanismo de crédito, em octetos. Contém o número de octetos, começando pelo número de sequência indicado no campo ACK que o transmissor pode aceitar.
Checksum (16 bits): Os bits complementares a soma de todos as palavras de 16 bits no cabeçalho.
Urgent Pointer (16 bits): Aponta para o último octeto na sequência de dados urgentes. Permite ao receptor saber quantos dados urgentes estão chegando.
Options (tamanho variável): Um exemplo é para indicar o tamnaho máximo permitido de cada segmento.
Estes elementos do cabeçalho do TCP garantem suas funcionalidades. A exemplo do Checksum, que detecta erros em envio de dados a entidade errada, mesmo se no pacote não houver bits indicativos de erros.
Mecanismos do TCP
É possível dividir os mecanismos do TCP em 3 categorias:
Estabelecimento da conexão
Transferência de dados
Término de conexão
O estabelecimento de conexão funciona usualmente através de sinais de sincronização (Three-way Handshake). A estação A envia um sinal SYN e um valor correspondente ao número do segmento e a estação B responde com o sinal SYN e reconhece o número do segmento. Se há uma perda de segmento SYN, o segmento todo então é retransmitido. O estabelecimento da conexão é determinado unicamente pelo endereço e porta da estação fonte e destino.
A transferência de dados é feita com segmentos. Mas a transmissão de dados é vista como sequências de octetos. Cada octeto tem sua numeração em 232. Cada segmento possui o número do primeiro octeto em seu campo de dados. Lembrando que o controle de fluxo dá a alocação de crédito baseado no número de octetos e não no do número de segmentos. Geralmente o TCP sua seus mecanismos para determinar quando os dados armazenados em buffer de transporte serão enviados, contudo a transmissão pode se dar de outra forma, por exemplo, o flag PUSH, que é usado para forçar o envio de dados ou a especificação de um bloco como urgente pelo usuário.
O término de conexão é um indicativo de transmissão segura dos dados. Os usuários enviam uma primitiva CLOSE. A entidade de transporte seta o bit FIN no último segmento, que contém os últimos dados a serem enviados, e o envia. Um término abrupto ocorre quando o usuário fornece uma primitiva ABORT. Nesse caso a entidade não prossegue com as tentativas de envio ou recebimento de dados e descarta os dados dos buffers. Após isto o bit RST é inserido.
7. Opções de implementação de políticas do TCP 
Os padrões do protocolo TCP permitem uma série de implementações em seu uso. As implementações do protocolo são: 
Política de Envio
Política de Entrega
Política de Aceitação 
Política de Retransmissão
Política de Reconhecimento (Acknowledge)
7.1 Política de Envio
Na ausência de segmentos com bit PSH setado e se permitido pela alocação de crédito, a entidade TCP transmissora é livre para enviar os dados, de acordo com sua conveniência. Os dados recebidos pelo usuário são armazenados no buffer de transmissão. O TCP pode tanto construir segmentos a cada bloco de dados ou aguardar por uma certa quantidade de dados chegarem, antes do segmento ser enviado. Estas políticas serão utilizadas dependendo de fatores de desempenho (tamanho dos dados ou frequência de envio).
7.2 Política de Entrega
Na ausência de segmentos com bit PSH setado, a entidade TCP receptora é livre para entregar os seus dados ao usuário, de acordo com sua conveniência. Os dados podem ser entregues, conforme os segmentos foram recebidos (entrega em ordem) ou armazenar os dados para em um conjunto de segmentos para uma entrega posterior. Estas políticas serão utilizadas dependendo de fatores de desempenho (tamanho dos dados ou frequência de envio).
7.3 Política de Aceitação
Quando os segmentos chegam em ordem para o usuário, não há o que fazer a não ser enviar os dados para o usuário recebê-los. Contudo se os dados chegarem fora de ordem, a entidade TCP receptora tem 2 opções de recebimento:
Em ordem, somente os segmentos que chegarem em ordem são aceitos, os outros são descartados.
Em janela, aceita todos os segmentos dentro de uma janela.
Ambas as políticas tem suas vantagens e desvantagens. Elas impactam diretamente na política de retransmissão, pois se um segmento não for aceito, independente da política utilizada, parte dos dados deverão ser retransmitidos (mediante sinais de reconhecimento (ACKs)).
7.4 Política de Retransmissão
O TCP mantém uma fila de segmentos que ainda não foram reconhecidos (não receberam ACK). O TCP então retransmitirá segmentos se não recebe o ACK depois de um tempo. As implementações de retransmissão funcionam com timers. As implementações são mostradas a seguir:
First-only: Há um timer para toda a fila. Se houver time-out, o TCP retransmite o primeiro segmento da fila e reseta o timer.
Batch: Há um timer para toda a fila. Se houver time-out, o TCP retransmite todos os segmentos da fila e reseta o timer.
Individual: Cada segmento tem um timer. Se houver time-out de um segmento, ele é retransmitido e o timer correspondente deste é resetado.
Em todas as implementações todos os segmentos são colocados na fila de retransmissão e se o ACK for recebido dentro do tempo, o(s) segmento(s) são removidos da fila.
7.5 Política de Reconhecimento
Quando os segmentos chegam em ordem, o TCP tem 2 formas de enviar o sinal de ACK:
Imediata: Quando os dados são aceitos, O TCP envia imediatamente um segmento sem dados, contendo o número do ACK apropriado.
Cumulativa: Ao receber segmentos, espera ter um segmento de dados pronto para ser enviado e mandar o sinal de ACK juntamente com este. Contudo há um timer para evitar longas esperas, se este timer expirar sem ter enviado o sinal do ACK, é enviado um sinal da forma de implementação Imediata.
Devido ao overhead da política imediata, a política Cumulativa é a mais usada. Contudo há um processamento maior ao receber os dados, pois nele há um ACK junto.
8. UDP
O protocolo UDP (User Datagram Protocol) é outro de uso comum dentro da camada de transporte. Ele oferece serviços sem conexão para o nível de aplicação. Basicamente o UDP é um serviço não confiável, pois não garante o recebimento e nem proteção contra duplicatas. Contudo o seu overhead é menor, e pode ser utilizado para testes de gerência de rede. Aplicações com o uso de UDP: leitura de sensores, aplicações de tempo real, etc. 
9. UDP Header
O cabeçalho (header) do UDP possui 8 octetos, conforme mostra a figura a seguir:
Source Port (16 bits): Usuário UDP fonte. 
Destination Port (16 bits): Usuário UDP Destino.
Lenght (16 bits): Contém todo o tamanho do segmento UDP, incluindo o header e os dados. 
Checksum (16 bits) (opcional): Se não for utilizado é preenchido com zero.
Bibliografia
VELLASCO, M. M. B. R. Transport Protocol. Cap 15 – Notas de Aula
STALLINGS, W. Data and Computer Communications. 8ª Edição
KUROSE, J. F.; ROSS, K. W. Redes de Computadores e a Internet 5ª Edição

Outros materiais