Buscar

Unidade_05_redes_computadores

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
Você viu 3, do total de 19 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

Você também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
Você viu 6, do total de 19 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

Você também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
Você viu 9, do total de 19 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

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Redes de Computadores 
Prof. M.Sc Fabiano Costa Teixeira 
U N I D A D E 5 
 5 Camada de Transporte 
 5.1 Considerações Iniciais 
Nesse ponto do curso já foram apresentados alguns conceitos sobre os meios físicos para 
transmissão de dados entre computadores, mecanismos e tecnologias para a comunicação entre nós 
adjacentes e o protocolo que permite que computadores em redes distintas e espalhadas por todo 
mundo possam trocar dados entre si. 
Serão apresentados aqui dois protocolos de transporte: TCP e UDP. É interessante observar 
que é comum que redes sejam tratadas como TCP/IP. Qual o motivo dessa notação? Se o modelo de 
camadas for observado, nota-se que a camada de transporte está localizada acima da camada de 
rede. Dessa forma, a notação TCP/IP deve ser entendida como TCP sobre IP. 
Na camada de transporte será visto como é possível realizar o controle fim-a-fim em uma 
transmissão de dados, como é possível auxiliar a redução de congestionamentos, permitir que 
diversas aplicações sejam executadas simultaneamente utilizando um único endereço IP, entre 
outros. 
Essa é a última camada antes de iniciar os estudos sobre as aplicações propriamente ditas. 
Isso significa que até esse ponto os conceitos são os mesmos para as aplicações que estejam 
utilizando a mesma tecnologia de enlace e protocolos de rede e transporte, caracterizando um 
estudo fundamental que deve ser muito bem assimilado. 
Essa unidade foi escrita de forma conjunta pelos professores Fabiano Costa Teixeira e Iran 
Calixto Abrão tendo como base os livros citados nas referências bibliográficas abaixo. Dessa forma, 
é de grande importância a leitura dessas obras para aprofundamento no tema. 
 
 5.2 Protocolo de Portas 
É comum que em uma mesma máquina diversas aplicações estejam trocando dados com a 
rede ao mesmo tempo. Se for observada a máquina de um usuário em um determinado momento é 
fácil verificar, por exemplo, que ele está com uma janela do navegador acessando o site da PUC e 
outra janela acessando a página do UOL, além de estar conversando com algum contato por meio 
do MSN. Nesse cenário, existem três computadores (PUC Minas, UOL e MSN) enviando dados 
para a mesma máquina que possui um único endereço IP. Aqui cabe uma questão: Todos os 
datagramas são destinados ao mesmo endereço IP. Como o sistema operacional sabe para qual 
aplicação o dado deve ser entregue? 
Uma situação parecida com essa ocorre na vida real com pessoas que moram em prédios. 
Todas elas possuem o mesmo endereço como, por exemplo, Rua Assis Figueiredo – 18.599, Centro, 
Poços de Caldas. Todas as cartas destinadas a essas pessoas são entregues na portaria do mesmo 
prédio, mas como elas são encaminhadas ao destinatário correto? Por meio do número do 
apartamento. 
Algo semelhante a isso é realizado pela camada de transporte por meio da multiplexação de 
portas. Para cada aplicação que faça uso da rede é associada um número de porta. Dessa forma, as 
mensagens que são recebidas pela camada de transporte possuem um campo informando para qual 
porta a mensagem está endereçada. Com isso, sabe-se para qual aplicação o conteúdo da mensagem 
deve ser entregue. 
 
Figura 1: Multiplexação de portas 
A figura 1 ilustra um exemplo da execução concorrente de 5 aplicações. Note que cada uma 
delas está associada a uma porta diferente. Dessa forma, quando o dado chegar na camada de 
transporte essa sabe para quem entregá-lo. 
Os números de portas até 1024 são reservados para aplicações “bem conhecidas”. A tabela 
abaixo (baseada em [1]) ilustra algumas dessas portas. Se uma nova aplicação é desenvolvida, pode-
se utilizar um número acima desse especificado para identificá-la junto à camada de transporte. 
Porta Protocolo Uso 
21 FTP Transferência de Arquivos 
23 Telnet Login remoto 
25 SMTP Envio de correio eletrônico 
80 HTTP WWW 
110 POP-3 Recebimento de correio eletrônico 
 
Cada protocolo de transporte realiza a sua multiplexação de portas de forma independente. 
Isso significa que a porta 100 do protocolo TCP é diferente da porta 100 do protocolo UDP. Jamais 
duas aplicações podem utilizar a mesma porta de um mesmo protocolo, no entanto duas aplicações 
diferentes que utilizam protocolos de transporte diferentes podem utilizar o mesmo número de 
porta. 
 5.3 Protocolo TCP 
O protocolo TCP (Transmission Control Protocol) é um protocolo de transporte que 
implementa alguns mecanismos que disponibilizam um ambiente adequado para a transmissão de 
dados de determinadas aplicações pela Internet (e também em redes locais), pois são oferecidos 
garantia de entrega e ordenação de dados, controle de fluxo e congestionamento, entre outros. 
As aplicações que comunicam entre si trocam os dados em formato de segmentos [1]. Cada 
segmento possui um cabeçalho de 20 bytes e a área de dados. Muitas vezes diversas requisições de 
transmissão diferentes tem seus dados inseridos em um único segmento, ao passo que também é 
possível que os dados de uma única requisição sejam inseridos em segmentos diferentes. Isso 
significa que o TCP implementa uma transmissão por fluxo de bytes onde não há uma demarcação 
que diferencie as diversas solicitações de transmissão feitas pelo transmissor, sendo necessário 
algum protocolo na camada de aplicação que seja responsável por esse tratamento. 
O tamanho dos segmentos é calculado em função do tamanho da carga útil do protocolo IP 
(onde o segmento é inserido na seqüência de encapsulamentos) e do MTU da rede. Dessa forma, é 
comum que os segmentos TCP possuam o tamanho de 1460 bytes, considerando o MTU da 
tecnologia Ethernet que é de 1500 bytes e os tamanhos dos cabeçalhos IP e TCP que possuem 20 
bytes cada. 
Uma vez que a camada de rede implementada pelo protocolo IP não oferece um ambiente 
confiável de transmissão, pacotes podem ser perdidos como também entregues fora de ordem por 
problemas como, por exemplo, congestionamento de partes da rede que fazem com que 
determinados pacotes sejam atrasados e entregues fora de ordem (lembre-se da forma de comutação 
do IP que permite uma rota diferente para cada datagrama). O protocolo TCP tem a missão de 
solucionar essas questões. 
A questão da garantia de entrega é resolvida por meio do estabelecimento de uma mensagem 
de confirmação de recebimento (ack) e de um timer que determina qual o tempo máximo que o 
receptor deve aguardar pelo recebimento dessa confirmação. Caso ela não chegue o dado é 
retransmitido. 
O problema da ordenação dos dados é realizado inserindo um número de seqüência em cada 
segmento. Se segmentos são entregues fora de ordem o TCP observa esse número de seqüência e os 
colocam na ordem original novamente. Esse número de seqüência tem uma função adicional: pode 
acontecer de um datagrama IP ter um retardo muito grande um uma parte da rede, demorar a chegar 
no receptor e ocasionar uma retransmissão dos dados. No entanto, os dados retransmitidos serão 
recebidos pelo receptor como também os dados atrasados, que são idênticos. Para evitar a 
duplicidade o TCP observa que foram recebidos dois segmentos com o mesmo número de 
seqüência e descarta a duplicata. 
5.3.1 Conexões 
O protocolo TCP adota o modelo de cliente/servidor. Uma aplicação assume um papel 
passivo (servidor) e outra o papel ativo (cliente). Antes de iniciar a transmissão dos dados 
propriamente ditos o cliente precisa realizar a requisição de conexão junto ao servidor que deve 
aceitá-la ou rejeitá-la. 
Esse processo conexão, entre outros, tem um papel muito importante relacionado ao número 
de seqüência de mensagens. A questão das mensagens atrasadas gera um problema a ser tratado. 
Imagine que uma cliente estabeleceu uma conexão Ca com um servidor e enviou três segmentos 
com as seqüências 0, 1 e 2. A mensagem 1 se atrasou muito e foi retransmitida, sendo que o 
segmento da retransmissão foi entregue a atrasadacontinuou presa em um roteador. A transmissão 
termina e a conexão é encerrada. Após isso, o cliente realiza outra conexão Cb com o servidor e 
envia três mensagens também de seqüência 0, 1, 2 e 3. A mensagem 0 é entregue e logo após isso a 
mensagem atrasada da conexão anterior é “liberada” e chega ao receptor, que “pensa” que essa 
mensagem faz parte da conexão atual (pois não existe identificador de conexões nos segmentos) e a 
aceita. Quando a seqüência 1 da conexão atual é recebida, o receptor considera como mensagem 
repetida e a descarta. Note que nesse caso houve o processamento equivocado dos dados. 
Como é fácil de ser percebido, começar a transmissão de dados de uma conexão pela 
seqüência zero gera problemas. Uma maneira de solucionar esse problema é fazer com que as 
conexões utilizem intervalos distintos de seqüência de segmentos. No entanto, ambas as partes 
(cliente e servidor) precisam saber com qual seqüência a outra parte irá começar para que o controle 
possa ser estabelecido. Essa é uma das principais funções do processo de estabelecimento de 
conexões. 
Conforme ilustrado pela figura 2, o processo de conexão é estabelecido em três etapas, por 
isso é denominado de Handshake em 3 vias. 
 
Figura 2: Handshake em 3 vidas 
 
Considere o Host 1 como cliente e o Host 2 como servidor. Para realizar a requisição de 
conexão o cliente envia um segmento TCP contendo o flag SYN do cabeçalho definido com o valor 
1. Ao receber essa mensagem o servidor identifica que é um pedido de conexão e pode rejeitá-lo 
(enviando uma mensagem TCP com o flag RST com valor 1 para o cliente) ou aceitar respondendo 
ao cliente com uma nova mensagem com o flag SYN também ativo. 
Quando o cliente envia o pedido de conexão ele já informa ao servidor qual será é o número 
de seqüência inicial (SEQ=x) e o mesmo é feito pelo servidor (SEQ=Y). 
A mensagem de pedido de conexão é transportada por um datagrama IP normalmente, 
podendo ser atrasada, perdida, etc. Dessa forma, é importante que quem recebe uma mensagem 
confirme seu recebimento. Nessa situação seriam, em um primeiro momento, necessárias quatro 
mensagens: o envio do SYN do cliente para o servidor, a confirmação do recebimento pelo servidor, 
o envio do SYN do servidor para o cliente e a confirmação do recebimento pelo cliente. No entanto, 
repare que quando o servidor envia o SYN para o cliente ele já envia junto a notificação ACK, o 
que economiza uma mensagem. Dessa forma, apenas o cliente precisa enviar uma mensagem 
exclusiva de confirmação do recebimento do SYN enviado pelo servidor, gerando um processo 
constituído por três mensagens. 
Quando uma mensagem de confirmação (ACK) é enviada sempre se notifica o número se 
seqüência recebido mais um, isso porque o TCP não “diz” qual seqüência ele recebeu”. Mas sim, 
quem é a próxima seqüência que ele espera receber. Isso será melhor detalhado a seguir. 
As conexões TCP são full-duplex, dessa forma pode-se imaginá-las como um canal no 
sentido cliente/servidor e outro no sentido servidor/cliente. Cada um desses canais pode ser 
encerrado de maneira independente. Sendo assim, se o cliente não deseja mais enviar informações 
para o servidor ele envia uma mensagem com o flag FIN ativo e aguarda por uma confirmação 
(ack). Nesse caso, o servidor ainda pode continuar enviando dados para o cliente até que seja 
enviada uma mensagem de FIN encerrando esse canal também. Quando ambos os canais são 
encerrados, a conexão se dá por finalizada. Por isso, para encerrar uma conexão são necessárias 
quatro mensagens: duas de FIN e duas confirmações (ack). 
A figura 3 apresenta um diagrama de estados finitos que demonstra os processos de conexão 
e desconexão do TCP. A aplicação servidora (com as ações representadas pela linha tracejada) 
quando executada está com a conexão fechada. A aplicação, por meio de uma chamada de sistema, 
entra em estado de “listen” e começa a aguardar pelos pedidos de conexões. Quando um segmento 
com o flag SYN (passo 1 do handshake) é recebido o servidor responde com a mensagem SYN + 
Ack (passo 2 do handshake) e entra no estado “SYN RCDV” onde ele aguarda o recebimento do 
ACK que representa o passo 3 do handshake. Quando isso ocorre, a conexão está estabelecida. 
O cliente, representado pela linha contínua mais escura, possui o papel ativo do processo. 
Sendo assim, ele envia a primeira mensagem do processo de handshake (mensagem SYN) e fica no 
estado “SYN-Sent” até que receba a mensagem SYN+Ack do servidor (passo 2 do handshake). 
Quando isso ocorre ele envia o ACK referente ao passo 3 e também entra no estado de conexão 
estabelecida. 
Quando o cliente deseja realizar a desconexão ele envia uma mensagem FIN para o servidor 
solicitando o encerramento de um canal de comunicação. Até que o cliente receba o “ack” dessa 
mensagem ele permanece no estado FIN-Wait 1. Quando a confirmação é recebida ele passa para o 
estado FIN-Wait 2 aguardando que o servidor também solicite o encerramento. Quando isso 
acontece o cliente confirma o recebimento da mensagem do servidor e aguarda alguns instantes 
(estado TIMED Wait) para verificar se ainda existe algum segmento em trânsito. Após isso a 
conexão é encerrada e volta ao estado inicial. 
 
Figura 3: Máquina de estados finitos de uma conexão TCP 
5.3.2 Janela Deslizante 
Conforme já foi visto anteriormente, o mecanismo de garantia de entrega do TCP é baseado 
na confirmação (ack) que o receptor de uma mensagem envia ao emissor, o qual, após enviar um 
segmento, aguarda um determinado tempo pela confirmação. Caso a confirmação não chegue 
dentro do tempo esperado o segmento é retransmitido. 
Se o protocolo fosse implementado de tal forma que toda vez que o emissor enviasse uma 
mensagem ele tivesse que aguardar pelo recebimento da confirmação para continuar seu trabalho, o 
modo de transmissão seria logicamente transformado em half-duplex. Veja o exemplo da figura 4: o 
emissor envia o pacote 1 e permanece esperando a confirmação. Somente ao receber essa 
confirmação que ele envia o pacote 2. 
 
Figura 4: Exemplo de protocolo onde o emissor fica parado esperando a chegada do "ack" 
 
Esse tipo de protocolo tornaria a transmissão muito lenta, o que precisou ser melhor 
elaborado. Para isso, utiliza-se no protocolo TCP o conceito de janela deslizante, que define o 
número de segmentos que podem ficar com o “ack” pendente. Quando um segmento é enviado, o 
transmissor também dispara um temporizador (timer). Quando o segmento chega ao destino, a 
entidade TCP receptora retorna um segmento com um número de confirmação igual ao próximo 
número de seqüências que espera receber. Se o timer expirar antes da confirmação a ser recebida, o 
segmento será retransmitido. Este protocolo utiliza melhor a largura de banda da rede, pois permite 
que o transmissor transmita pacotes múltiplos antes de esperar uma confirmação. 
O mecanismo de janelas deslizantes TCP opera em nível de octetos, e não de pacotes ou 
segmentos. Os octetos do stream de dados (fluxo a ser transmitido) são enumerados 
seqüencialmente, e um transmissor mantém três ponteiros associados a cada conexão. Segundo 
Comer, O desempenho dos protocolos de janelas deslizantes depende do tamanho da janela e da 
velocidade com que a rede aceita os pacotes. 
O primeiro ponteiro marca a esquerda da janela deslizante, separando os octetos que tenham 
sido enviados e confirmados, dos octetos ainda por enviar. Um segundo ponteiro à direita da janela 
deslizante define o maior octeto da seqüência que pode ser enviado antes que mais confirmações 
sejam recebidas. O terceiro ponteiro marca o limite interno da janela que separa os octetos já 
enviados daqueles que ainda não o foram. 
 
Figura 5: Três ponteiros da janela deslizante 
Imagine uma seqüência de pacotes a serem transmitidos, conforme mostra a figura 6, onde um 
protocolo de janeladeslizante com oito pacotes na janela ( a ) e ( b ) a janela deslizando de modo 
que o pacote nove possa ser enviado quando for recebida uma confirmação para o pacote um, 
somente os pacotes que não forem confirmados serão retransmitidos. 
 
Figura 6: Exemplo de deslocamento da janela 
De forma geral, um protocolo de janela deslizante sempre se lembra de quais pacotes foram 
confirmados e mantém um timer separado para cada pacote confirmado. Se um pacote for perdido, 
o timer termina e o transmissor retransmite esse pacote. Quando o transmissor desliza sua janela, 
ele move para trás todos os pacotes confirmados. Na extremidade do receptor, o protocolo mantém 
uma janela análoga que aceita e confirma os pacotes à medida que chegam. Desta forma, a janela 
particiona a seqüência de pacotes em três conjuntos: 
• Os pacotes à esquerda da janela que foram transmitidos com êxito, recebidos e confirmados; 
• Aqueles à direita ainda não transmitidos; e 
• Os pacotes que permanecem na janela e que estão sendo transmitidos. 
Para entender melhor o funcionamento do protocolo de janelas deslizantes, utilize o aplicativo 
web: http://www2.rad.com/networks/2004/sliding_window/, link: Sliding Window Demo. 
 
5.3.3 Seqüência dos pacotes 
Cada segmento TCP enviado tem um número de seqüência para que o TCP no nó destino 
possa reordená-los na chegada. 
 
 Quando o nó destino recebe um segmento, envia uma confirmação através de um segmento 
TCP com o campo Acknowledge preenchido. Neste campo está o número de seqüência do próximo 
segmento esperado, indicando para o nó origem o correto recebimento, pelo nó destino, dos pacotes 
anteriores. 
O seqüenciamento dos pacotes TCP é orientado a byte. O número de seqüência do segmento é 
sempre igual ao numero de seqüência do segmento anteriormente transmitido, somado ao número 
de bytes transmitidos. O primeiro número de seqüência é gerado randomicamente, e é determinado 
no estabelecimento da conexão TCP, conforme visto na sub-seção que tratou do processo de 
conexão. 
 
 
A confirmação de entrega dos segmentos TCP é também orientada a byte. O valor do campo 
acknowledgement de um segmento é sempre igual ao número de seqüência do segmento que está 
sendo confirmado somado ao número de bytes recebidos. 
 
Este valor indica para o nó origem o número de seqüência do próximo segmento que o nó 
destino espera receber. 
O ACK pode ser cumulativo, sendo enviado após o recebimento de todos os segmentos. Neste 
caso, o valor do campo acknowledgement será a soma do ultimo número de seqüência confirmado 
com o número de bytes recebidos. 
 
Ao enviar um ACK para todo um conjunto de dados, se ganha tempo e se diminui a 
quantidade de pacotes transmitidos. Uma forma de não desperdiçar um pacote somente com um 
ACK é fazer com que este sejam acompanhado de dados, denominado ack piggybacking. 
 
5.3.4 Controle de Fluxo 
Muitas vezes a capacidade de um receptor não é suficiente para realizar o processamento de 
todos os dados recebidos. Muitas vezes é preciso que o emissor diminua o fluxo de dados enviados 
para que seja possível recebê-los corretamente. 
Como exemplo disso, pode-se citar uma situação onde há uma obra e um fornecedor de areia. 
Esse fornecedor transporta o material e o coloca na calçada em frente à obra. Se a taxa de transporte 
do fornecedor for maior que a capacidade que os funcionários tem para armazenar a areia no 
interior da obra, chegará um ponto que não caberá mais material em frente a obra, ocorrendo a 
perda do mesmo. 
Para resolver essa situação um funcionário da obra deve se encarregar de controlar o fluxo de 
transporte de areia. Dessa forma se ele nota que a calçada está ficando cheia ele pede para o 
caminhão trazer menos areia de cada vez e se mesmo assim continuar enchendo ele pode pedir para 
suspender a entrega por um tempo e depois reiniciar novamente. 
No ambiente computacional a areia são os dados, o caminhão os segmentos, a calçada o buffer 
de entrada do receptor e o funcionário que controla o fluxo o protocolo TCP. 
Para realizar esse controle o TCP utiliza o tamanho da janela, a qual está sempre relacionada 
ao tamanho do buffer de recepção do destinatário, e o seu valor inicial é informado quando do 
estabelecimento da conexão TCP. No diagrama a seguir, a estação de trabalho só poderá enviar ate 
2.000 bytes de dados ao servidor sem que haja recebimento de confirmação dos pacotes enviados. 
 
No entanto, o tamanho da janela do TCP é ajustado dinamicamente (a cada ack de 
confirmação é informado o novo tamanho de janela que o emissor precisa respeitar) de acordo com 
a disponibilidade de buffers no receptor. Este mecanismo implementa o controle de fluxo fim-a-fim: 
se o servidor detectar que a estação está enviando um número de pacotes maior do que sua 
capacidade de recepção, ele sinalizará no segmento de ACK ou de dados um valor menor para a 
janela TCP, forçando uma diminuição na taxa de transferência de pacotes. 
Essa janela pode ir sendo diminuída até o ponto de ser zerada, situação em que o emissor para 
de transmitir dados. Nesse caso, quando o receptor ver que a situação foi normalizada ele repete o 
segmento utilizado para zerar a janela para informar o novo tamanho. 
Uma pergunta pode ser feita nesse momento? E se esse segmento informando o novo tamanho 
de janela for perdido? O emissor fica parado para sempre? 
Para resolver esse problema, quando o emissor recebe um tamanho de mensagem zerada ele 
dispara um temporizador que define o tempo máximo que ele aguardará passivamente pelo novo 
tamanho de janela. Se ele não receber um novo segmento contendo apenas um byte (o que é 
permitido mesmo com a janela zerada) é enviado, o que forçará o receptor a enviar um ack com 
tamanho de janela para o emissor. Se a janela realmente continua zerada, um ack com janela de 
tamanho zero é enviado novamente. Caso o segmento foi realmente perdido, o tamanho da janela é 
enviado novamente, re-estabelecendo a transmissão. 
Esse comportamento da janela caracteriza o TCP como um protocolo com tráfego por rajadas. 
Pois, a janela aumenta e vários segmentos são enviados. Tempo depois ela pode ser diminuída e até 
zerada voltando a ter seu tamanho incrementado posteriormente. 
5.3.5 Controle de Congestionamento 
Até algum tempo atrás os pacotes eram perdidos na internet por muitos motivos: 
interferências, má qualidade dos meios de transmissão, entre outros [1]. Com o advento das 
tecnologias de comunicação (com grande peso da fibra ótica) a taxa de perda de dados em função 
do meio físico diminuiu muito. 
Atualmente, um dos grandes responsáveis pela perda de pacotes na internet é o 
congestionamento. Nesse caso, a taxa de recebimento de pacotes de um roteador é maior que a taxa 
de envio que ele é capaz. Sendo assim, os pacotes começam a entrar em fila, a qual é implementada 
em memória. Chega um ponto que a capacidade da fila se esgota é o roteador começa a descartar 
pacotes, caracterizando a perda. 
O TCP é um protocolo consciente. Quando ele repara que um segmento foi perdido ele 
pressupõe que a taxa de envio de segmentos que ele está operando é maior que aquela suportada 
pela rede. Sendo assim, ele começa a diminuir essa taxa com o objetivo de minimizar a situação de 
congestionamento. 
Para realizar esse controle o TCP opera com uma janela adicional chamada de “Janela de 
Congestionamento”. Essa janela define o fluxo de dados que um emissor pode enviar sem que a 
rede seja congestionada. No entanto, qual é o tamanho dessa janela? 
O protocolo TCP tem por objetivo realizar a transmissão dos dados na maior taxa possível 
sem saturar a rede. Dessa forma, ele parte de um tamanho de janela de congestionamento 
relativamente pequeno e vai aumentando até que algum segmento seja perdido. Quando isso 
acontece, a janela é reduzida novamente.Essa redução e crescimento da janela funciona de uma forma bem interessante. 
Normalmente a janela de congestionamento é iniciada com o tamanho máximo de um segmento. É 
interessante que o limite da rede seja encontrado o mais rápido possível para que a transmissão 
tenha uma boa vazão. Dessa forma, a janela de congestionamento cresce de forma exponencial, ou 
seja, para cada rajada confirmada o tamanho da janela é dobrado. 
Quando um time-out (situação em que o ack não chega dentro do tempo esperado) ocorre o 
TCP chega à conclusão de que o limite da rede para aquele instante está entre o penúltimo tamanho 
de janela e o último (lembre-se do crescimento exponencial). Nesse momento o tamanho da janela é 
reduzido ao valor inicial (o tamanho máximo do segmento) e tudo começa novamente. No entanto 
se ele for crescendo sempre de forma exponencial o limite não será encontrado novamente. 
Considere o exemplo: Uma rede está com uma carga onde o tamanho de janela de 
congestionamento ideal é de 60K. Supondo que a janela de congestionamento comece por 1K, seu 
crescimento exponencial faria com que os próximos tamanhos de janela fossem 2K, 4K, 8K, 16K, 
32K e 64K. Quando esse último fosse utilizado ocorreria o time-out e tudo começaria novamente. 
Se a janela crescesse da mesma forma ela “pularia” de 32K para 64K novamente gerando outro 
time-out. Adotar o último tamanho de janela confirmado (32K) como o ideal seria correto? A 
resposta é não, pois haveria um desperdício, pois a rede suporta 60K. 
Para solucionar isso, é considerada uma variável chamada limiar. Essa variável representa o 
tamanho da janela até onde o crescimento é exponencial, a partir dela o crescimento é realizado de 
forma linear. Qual será o valor do limiar? É simples: Quando ocorre um time-out o limiar é definido 
como a metade da janela atual. 
Veja o exemplo da figura 7. É considerado que nesse momento o limiar está definido com 
32K. Sendo assim, a janela cresce exponencialmente até esse valor e depois cresce linearmente até 
o valor de 40K, onde ocorre um time-out e o limiar é definido como a metade desse valor: 20K. 
Nesse momento é fácil perceber que o TCP trabalha com duas janelas: a janela do receptor 
(que define o controle de fluxo) e a janela de congestionamento. Sendo assim, o TCP sempre utiliza 
a menor das duas para definir o tamanho das rajadas. 
Um detalhe adicional também é importante ser verificado: a janela de congestionamento 
cresce no máximo até o tamanho da janela do receptor. 
 
Figura 7: Exemplo de comportamento da janela de congestionamento. Baseado em [1]. 
5.3.6 Temporizadores 
Durante essa unidade tem sido visto a utilização de um temporizador para definir o tempo 
que o TCP aguarda para retransmitir um segmento caso não receba a confirmação (ack). Esse tempo 
tem uma influência bastante grande no desempenho da transmissão. Se ele é definido com um valor 
muito pequeno pode acontecer de muitos segmentos serem recebidos corretamente, o ack ser 
enviado e o tempo expirar antes desse chegar, gerando muitas retransmissões desnecessárias, o que 
causa tráfego redundante. 
Por outro lado, se o tempo for muito grande haverá uma demora para que um segmento 
perdido seja retransmitido, gerando atrasos que também comprometeriam o desempenho da rede. 
De maneira a procurar o tempo mais próximo possível daquele existente entre o envio do 
segmento e o recebimento do ack (considerando as condições atuais da rede), o TCP trabalha com 
algumas variáveis. O RTT (Round Trip Time) é uma variável que tem o função de armazenar esse 
tempo. Toda vez que um segmento é enviado o TCP calcula o tempo gasto entre o envio e o 
recebimento da confirmação, o armazena na variável M e recalcula o RTT utilizando a fórmula [1]: 
RTT=αRTT + (1-α)M. A variável α tem a função de determinar o peso a ser dado para o tempo 
calculado em função das transmissões passadas (RTT) e o tempo gasto na última transmissão (M). 
Normalmente essa variável tem o valor de 7/8. 
O simples cálculo do RTT não é suficiente para determinar o tempo de retransmissão, pois a 
rede utilizada para transmitir os segmentos pode ser bastante instável e possuir uma variação 
considerável do tempo. Para resolver isso, o TCP faz algo parecido com uma estimativa do desvio 
médio existente no tempo de confirmação das transmissões dos segmentos. Esse desvio é 
representado pela variável D e é calculada, a cada transmissão de um novo segmento, pela fórmula: 
D = αD + (1- α) | RTT-M |. 
Uma vez calculadas essas variáveis é possível calcular o valor do temporizador de 
retransmissão pela fórmula: Timeout = RTT + 4D. A multiplicação do desvio (D) por quatro, 
segundo alguns estudos, diminui as retransmissões desnecessárias a um percentual bastante 
pequeno. 
5.3.7 Cabeçalho TCP 
O cabeçalho do protocolo TCP tem seu formato conforme a figura 8. 
 
Figura 8: Formato do cabeçalho TCP 
Os campos source port e destination port do cabeçalho contém respectivamente os endereços 
dos processos origem e destino. 
Cada segmento tem um número de seqüência (sequence number) para que o TCP destino 
possa ordenar a mensagem na chegada. No campo acknowledgement number tem-se o número do 
segmento esperado, que servirá para o nó origem identificar os segmentos anteriores que foram 
enviados com sucesso. 
O campo hlen indica o tamanho, em palavras de 32 bits, do cabeçalho TCP. Os seguintes bits, 
quando ligados, indicam o tipo de segmento: 
• URG - sinaliza eventos assíncronos. 
• ACK - indica que este segmento confirma a recepção de outro. 
• PSH - indica que este segmento requer urgência. 
• SYN - indica segmento de pedido de estabelecimento de sessão TCP. 
• RST - indica segmento de término de sessão TCP de forma abrupta. 
• FIN - indica segmento de termino de sessão TCP de forma natural. 
O campo checksum contém o resultado do cálculo do checksum do segmento TCP. O campo 
window define o tamanho, em bytes, da janela. Já o campo urgent pointer é usado para sinalizar 
eventos assíncronos através do envio de caracteres de controle ou de outros comandos de 
interrupção. 
 5.4 Protocolo UDP 
O UDP é um protocolo de transporte não orientado à conexão. Possui um cabeçalho, 
conforme ilustrado pela figura 9, menor que o TCP (8 bytes) e não faz o seqüenciamento dos 
pacotes, deixando esta tarefa a cargo da aplicação. 
Algumas características do UDP: 
• Não realiza confirmação fim-a-fim; 
• Não possui controle de fluxo. 
• Aplicações: SNMP, TFTP, DNS. 
• Formato do cabeçalho: Note na figura a seguir que o cabeçalho UDP é muito simples e por isso 
pequeno. Esta característica permite a flexibilidade necessária por algumas aplicações, como 
jogos em rede, por exemplo. 
 
Figura 9: Cabeçalho UDP 
Os endereços, ou ports UDP funcionam de forma similar aos ports TCP, pois ambos foram 
implementados para prover a camada de transporte do modelo TCPIP. 
 5.5 Considerações Finais 
Conforme deve ter sido notado, nessa unidade o enfoque maior foi TCP, pois ele é o 
protocolo de transporte de maior uso na internet atualmente, principalmente por ser aquele utilizado 
na Web. Por oferecer controles de fluxo, congestionamento, garantia de entrega, ordenação de 
pacotes, entre outros, seu mecanismo é muito mais complexo do que o UDP, cabendo assim mais 
estudo sobre ele. 
Nesse ponto as camadas do modelo TCP/IP responsáveis por permitir que aplicações 
troquem dados utilizando uma rede de computadores já foram abordadas. Sendo assim, na próxima 
unidade de ensino são abordadas as aplicações propriamente ditas, ilustrando como elas podem 
fazer uso de toda essa estrutura apresentada para oferecer ao usuários os serviços que eles precisam. 
Referências Bibliográficas 
[1] Tanenbaum, A.S.: “Redes de Computadores”, Terceira Edição, Elsevier, 2003. 
[2] Kurose, F., Ross, K: “Redes de Computadores e a Internet: UmaAbordagem Top-Down”, 
Quinta Edição, Addison-Wesley, 2010.

Outros materiais