Wednesday 9 August 2017

Exponencial Moving Average Rtt


Você nunca receberá um emprego se você não tiver uma boa resposta para esta pergunta de entrevista de emprego mais freqüente Selecione a resposta certa para determinar se você está preparado para uma entrevista de trabalho bem-sucedida. Por que você quer este trabalho Selecione a resposta certa: Gostaria de ganhar conhecimento e experiência nesta linha de trabalho Este trabalho oferece desenvolvimento de carreira a longo prazo Este trabalho é uma oportunidade real para eu crescer e desenvolver Eu posso causar um impacto e Trazer benefícios para a empresa Este trabalho me ajudará a assumir outro nível na minha carreira Teste suas habilidades de entrevista de trabalho Obrigado por ter tido tempo para entrevistar conosco, mas nós decidimos contratar outra pessoa. Nenhum candidato a emprego quer ouvir essas palavras após sua entrevista. Observação Responder a esta pergunta de entrevista de trabalho incorreta pode custar-lhe o seu novo trabalho. Protocolos TCP e UDP de redes de comunicação. Os protocolos TCP e UDP são dois protocolos diferentes que manipulam comunicações de dados entre terminais em uma rede IP (a Internet). Esta página irá falar sobre o que são TCP e UDP e quais são as diferenças entre eles. No modelo OSI, TCP e UDP são Transport Layer Protocols. where TCP é protocolo de conexão orientada e UDP é protocolo sem conexão. Orientação orientada por conexão versus sem conexão Depois de passar pelas várias camadas do modelo, é hora de examinar o protocolo TCP e estudar sua funcionalidade. Esta seção ajudará o leitor a conhecer os conceitos e características do TCP e, em seguida, mergulhar gradualmente nos detalhes de TCP como conexão de conexão, comunicação em TCP e por que o protocolo TCP é chamado de um protocolo confiável e adaptativo . Esta seção terminará com uma comparação entre UDP e TCP seguido de um bom exercício que incentivaria os leitores a resolver mais e mais problemas. Antes de escrever esta seção, a informação foi estudada de fontes variadas, como guia TCP, RFCs, livro tanenbaum e as notas da aula. Em teoria, um protocolo de camada de transporte pode ser uma rotina de software muito simples, mas o protocolo TCP não pode ser chamado de simples. Por que usar uma camada de transporte que é tão complexa quanto a TCP A razão mais importante depende da falta de confiabilidade dos IPs. Na verdade, todas as camadas abaixo TCP não são confiáveis ​​e entregam o datagram hop-by-hop. A camada de IP entrega o datagram hop-by-hop e não garante a entrega de um datagrama é um sistema sem conexão. O IP simplesmente lida com o roteamento de datagramas e, se ocorrerem problemas, o IP descarta o pacote sem um segundo pensamento, gerando uma mensagem de erro de volta para o remetente no processo. A tarefa de verificar o status dos datagramas enviados através de uma rede e manipular o reenvio de informações se as peças tiverem sido descartadas cai no TCP. A maioria dos usuários pensa em TCP e IP como um par bem tricotado, mas TCP pode ser, e freqüentemente, usado com outros protocolos de transporte. Por exemplo, o TCP ou partes dele são usados ​​no Protocolo de Transferência de Arquivos (FTP) e no Protocolo SMTP (Simple Mail Transfer Protocol), que não utilizam o IP. O Protocolo de Controle de Transmissão fornece um número considerável de serviços para a camada IP e as camadas superiores. Mais importante ainda, ele fornece um protocolo orientado a conexão para as camadas superiores que permitem que um aplicativo tenha certeza de que um datagrama enviado pela rede foi recebido na íntegra. Nessa função, o TCP atua como um protocolo de validação de mensagens que fornece comunicações confiáveis. Se um datagrama está corrompido ou perdido, normalmente é TCP (não as aplicações nas camadas mais altas) que lida com a retransmissão. O TCP não é um software. É um protocolo de comunicação. O TCP gerencia o fluxo de datagramas das camadas mais altas, bem como datagramas recebidos da camada de IP. Tem que garantir que as prioridades e a segurança sejam respeitadas. O TCP deve ser capaz de lidar com o término de um aplicativo acima dele que esperava datagramas recebidos, bem como falhas nas camadas inferiores. O TCP também deve manter uma tabela de estado de todos os fluxos de dados dentro e fora da camada TCP. O isolamento desses serviços em uma camada separada permite que as aplicações sejam projetadas sem considerar controle de fluxo ou confiabilidade de mensagens. Sem a camada TCP, cada aplicação teria que implementar os próprios serviços, o que é um desperdício de recursos. O TCP reside na camada de transporte, posicionada acima do IP, mas abaixo das camadas superiores e suas aplicações, conforme mostrado na Figura abaixo. O TCP reside apenas em dispositivos que realmente processam datagramas, garantindo que o datagrama tenha passado da fonte para as máquinas alvo. Ele não reside em um dispositivo que simplesmente rooteia datagramas, portanto, não há camada TCP em um gateway. Isso faz sentido, porque em um gateway o datagrama não precisa ser mais alto no modelo em camadas do que a camada de IP. Figura 1: TCP fornecendo comunicação End-to-End confiável Como o TCP é um protocolo orientado a conexão responsável por assegurar a transferência de um datagrama da máquina de origem para destino (comunicações de ponta a ponta), TCP deve receber mensagens de comunicação a partir do Máquina de destino para confirmar a recepção do datagrama. O termo circuito virtual geralmente é usado para se referir ao handshaking que acontece entre as duas máquinas finais, a maioria das quais são mensagens de confirmação simples (confirmação de recebimento ou código de falha) e números de seqüência de datagrama. É análogo a uma conversa telefônica que alguém a inicia tocando um número que é respondido, uma conversa bidirecional ocorre e, finalmente, alguém termina a conversa. Um par de soquete identifica as duas extremidades de uma conexão, ou seja, o circuito virtual. Pode-se lembrar que o soquete consiste no endereço IP e no número da porta para identificar a localização. Os Servidores usam números de porta bem conhecidos (lt 1K) para serviços padronizados (Listen). Os números acima de 1024 estão disponíveis para que os usuários possam usar livremente. Os números de portas para alguns dos serviços padrão são apresentados abaixo na tabela abaixo. Números de porta de alguns serviços padrão Transmissão de bytes ou fluxo de mensagens Bem, os limites da mensagem não são preservados de ponta a ponta no TCP. Por exemplo, se o processo de envio faz quatro escritas de 512 bytes em um fluxo TCP, esses dados podem ser entregues ao processo de recebimento como quatro pedaços de 512 bytes, dois pedaços de 1024 bytes, um pedaço de 2048 bytes ou algum outro caminho. Não há nenhuma maneira para o receptor detectar a (s) unidade (s) em que os dados foram escritos. Uma entidade TCP aceita fluxos de dados do usuário a partir de processos locais, os quebra em partes que não excedem 64 KB (na prática, geralmente 1460 bytes de dados, para caber em uma única trama Ethernet com os cabeçalhos IP e TCP) e envia cada peça como Um datagrama IP separado. Quando os datagramas que contêm dados TCP chegam a uma máquina, eles são fornecidos à entidade TCP, que reconstrói os fluxos de bytes originais. Por simplicidade, às vezes, usaremos apenas TCP para significar a entidade de transporte TCP (um pedaço de software) ou o protocolo TCP (um conjunto de regras). Do contexto, será claro o que significa. Por exemplo, no usuário dá TCP os dados, a entidade de transporte TCP é claramente pretendida. A camada de IP não garante que os datagramas sejam entregues corretamente, por isso é necessário que TCP atinja e retransmite-os conforme necessário. Datagramas que chegam podem muito bem fazê-lo na ordem errada, também é compatível com TCP para remontá-los em mensagens na seqüência apropriada. Em suma, o TCP deve fornecer a confiabilidade que a maioria dos usuários quer e que o IP não fornece. As características do TCP TCP fornecem um canal de comunicação entre processos em cada sistema host. O canal é confiável, full-duplex e streaming. Para alcançar essa funcionalidade, os drivers TCP dividem o fluxo de dados da sessão em segmentos discretos e anexam um cabeçalho TCP a cada segmento. Um cabeçalho IP é anexado a este pacote TCP, e o pacote composto é então passado para a rede para entrega. Esse cabeçalho TCP possui vários campos que são usados ​​para suportar a funcionalidade TCP pretendida. O TCP possui as seguintes características funcionais: protocolo Unicast: TCP é baseado em um modelo de rede unicast e suporta troca de dados entre precisamente duas partes. Não suporta modelos de rede de difusão ou multicast. Estado de conexão: em vez de impor um estado dentro da rede para suportar a conexão, o TCP usa estado sincronizado entre os dois pontos finais. Esse estado sincronizado é configurado como parte de um processo de conexão inicial, portanto TCP pode ser considerado como um protocolo orientado a conexão. Grande parte do design do protocolo destina-se a garantir que cada transição de estado local seja comunicada e reconhecida pela parte remota. Confiável: a confiabilidade implica que o fluxo de octetos passado para o driver TCP em uma extremidade da conexão será transmitido pela rede para que o fluxo seja apresentado ao processo remoto como a mesma seqüência de octetos, na mesma ordem que gerada Pelo remetente. Isso implica que o protocolo detecta quando os segmentos do fluxo de dados foram descartados pela rede, reordenados, duplicados ou corrompidos. Quando necessário, o remetente retransmirá os segmentos danificados de modo a permitir que o receptor reconstrua o fluxo de dados original. Isso implica que um remetente TCP deve manter uma cópia local de todos os dados transmitidos até receber uma indicação de que o receptor concluiu uma transferência precisa dos dados. Full duplex: TCP é um protocolo full-duplex que permite que ambas as partes enviem e recebam dados no contexto da conexão TCP única. Streaming: Embora o TCP use uma estrutura de pacotes para transmissão de rede, o TCP é um verdadeiro protocolo de transmissão e as operações de rede no nível do aplicativo não são transparentes. Alguns protocolos encapsulam explicitamente cada transação de aplicativo para cada gravação. Deve haver uma leitura correspondente. Desta forma, a segmentação derivada do aplicativo do fluxo de dados em uma estrutura de registro lógico é preservada em toda a rede. O TCP não preserva essa estrutura implícita imposta no fluxo de dados, de modo que não há emparelhamento entre operações de gravação e leitura dentro do protocolo de rede. Por exemplo, um aplicativo TCP pode escrever três blocos de dados em seqüência na conexão de rede, que podem ser coletados pelo leitor remoto em uma única operação de leitura. O tamanho dos blocos de dados (segmentos) usados ​​em uma sessão TCP é negociado no início da sessão. O remetente tenta usar o maior tamanho de segmento que pode para a transferência de dados, dentro das restrições do tamanho máximo do segmento do receptor, do tamanho máximo do segmento do remetente configurado e do tamanho de pacote não fragmentado suportável maxi-mum do Caminho de rede (MTU de unidade de transmissão máxima do caminho). O caminho MTU é atualizado periodicamente para se ajustar a quaisquer alterações que possam ocorrer na rede enquanto a conexão TCP estiver ativa. Adaptação de taxa: o TCP também é um protocolo adaptável à taxa, na medida em que a taxa de transferência de dados destina-se a se adaptar às condições de carga prevalecentes dentro da rede e a se adaptarem à capacidade de processamento do receptor. Não existe uma taxa de transferência de dados TCP predeterminada se a rede e o receptor tiverem capacidade disponível adicional, um remetente TCP tentará injetar mais dados na rede para ocupar esse espaço disponível. Por outro lado, se houver congestionamento, um remetente TCP reduzirá sua taxa de envio para permitir que a rede se recupere. Esta função de adaptação tenta alcançar a taxa de transferência de dados mais alta possível sem desencadear a perda consistente de dados. Estrutura do cabeçalho TCP Edit Os segmentos TCP são enviados como datagramas da Internet. O cabeçalho do protocolo Internet contém vários campos de informações, incluindo os endereços de host de origem e de destino. Um cabeçalho TCP segue o cabeçalho da Internet, fornecendo informações específicas para o protocolo TCP. Esta divisão permite a existência de protocolos de nível de host diferentes do TCP. Porta de Origem: 16 bits O número da porta de origem. Porta de destino: 16 bits O número da porta de destino. Número de seqüência: 32 bit O número de seqüência do primeiro octeto de dados neste segmento (exceto quando o SYN está presente). Se SYN estiver presente, o número de seqüência é o número de seqüência inicial (ISN) e o primeiro octeto de dados é ISN1. Número de confirmação: 32 bits Se o bit de controle ACK estiver configurado, esse campo contém o valor do próximo número de seqüência que o remetente do segmento espera receber. Uma vez que uma conexão é estabelecida, isso sempre é enviado. Deslocamento de dados: 4 bits O número de palavras de 32 bits no cabeçalho TCP. Isso indica onde os dados começam. O cabeçalho TCP (mesmo um que inclui opções) é um número integral de 32 bits de comprimento. Reservado: 6 bits Reservado para uso futuro. Deve ser zero. Bits de controle: 6 bits (da esquerda para a direita): URG: Urgente Campo do ponteiro significativo ACK: Campo de confirmação significativo PSH: Pressionar Função RST: Redefinir a conexão SYN: Sincronizar números de seqüência FIN: Não há mais dados do remetente Janela: 16 bits O número De octetos de dados começando com o indicado no campo de reconhecimento que o remetente deste segmento está disposto a aceitar. Checksum: 16 bits O campo checksum é o complemento de 16 bit da soma complementar de todas as palavras de 16 bits no cabeçalho e no texto. Se um segmento contiver um número ímpar de cabeçalho e octetos de texto a serem verificados, o último octeto é preenchido à direita com zeros para formar uma palavra de 16 bits para fins de verificação. O pad não é transmitido como parte do segmento. Ao calcular a soma de verificação, o campo de soma de verificação é substituído por zeros. A soma de verificação também abrange um pseudo cabeçalho de 96 bits conceitualmente prefixado para o cabeçalho TCP. Este pseudo cabeçalho contém o endereço de origem, o endereço de destino, o protocolo e o comprimento de TCP. Isso dá a proteção do TCP contra segmentos mal direcionados. Esta informação é transportada no Protocolo da Internet e é transferida através da interface TCPNetwork nos argumentos ou resultados das chamadas pelo TCP no IP. O comprimento do TCP é o comprimento do cabeçalho TCP mais o comprimento dos dados nos octetos (esta não é uma quantidade explicitamente transmitida, mas é calculada) e não conta os 12 octetos do pseudo cabeçalho. Ponteiro urgente: 16 bits Este campo comunica o valor atual do ponteiro urgente como um deslocamento positivo do número de seqüência neste segmento. O ponteiro urgente aponta para o número de seqüência do octeto seguindo os dados urgentes. Este campo só pode ser interpretado em segmentos com o conjunto de bits de controle URG. Opções: variável As opções podem ocupar espaço no final do cabeçalho TCP e são um múltiplo de 8 bits de comprimento. Todas as opções estão incluídas na soma de verificação. Uma opção pode começar em qualquer limite de octeto. Existem dois casos para o formato de uma opção: Caso 1: Um único octeto de opção-tipo. Caso 2: Um octeto de opção-tipo, um octeto de duração da opção e os octetos de dados de opções reais. A opção-comprimento conta os dois octetos de opção-tipo e duração da opção, bem como os octetos de dados de opção. Observe que a lista de opções pode ser menor do que o campo de deslocamento de dados pode implicar. O conteúdo do cabeçalho além da opção de fim de opção deve ser preenchimento de cabeçalho (isto é, zero). Um TCP deve implementar todas as opções O pacote TCP pode ser visto usando a captura Ethereal. Um desses pacotes TCP é capturado e mostrado abaixo. Veja se o sinalizador ACK e PUSH-flag estão definidos como 1. Comunicação em TCP Editar Antes de TCP pode ser empregado para qualquer utilidade útil, o envio de dados uma conexão deve ser configurada entre os dois dispositivos que desejam se comunicar. Esse processo, geralmente chamado de estabelecimento de conexão, envolve uma troca de mensagens que transita os dois dispositivos do seu estado inicial de conexão (FECHADO) para o estado operacional normal (ESTABELECIDO). Funções de estabelecimento de conexão O processo de estabelecimento de conexão realmente realiza várias coisas, pois cria uma conexão adequada para troca de dados: Contato e comunicação: o cliente e o servidor fazem contato e estabelecem a comunicação enviando-se mensagens. O servidor geralmente nem sabe o cliente com o qual ele estará falando antes deste ponto, então ele descobrirá isso durante o estabelecimento da conexão. Sincronização de número de seqüência: cada dispositivo permite que o outro conheça o número de seqüência inicial que deseja usar para sua primeira transmissão. Troca de parâmetros: certos parâmetros que controlam a operação da conexão TCP são trocados pelos dois dispositivos. Mensagens de controle usadas para estabelecimento de conexão: SYN e ACK TCP usa mensagens de controle para gerenciar o processo de contato e comunicação. Não há, no entanto, qualquer mensagem de controle TCP especial digita todas as mensagens TCP usar o mesmo formato de segmento. Um conjunto de sinalizadores de controle no cabeçalho TCP indica se um segmento está sendo usado para fins de controle ou apenas para transportar dados. Os sinalizadores seguintes são alterados ao usar mensagens de controle. SYN: Este bit indica que o segmento está sendo usado para inicializar uma conexão. SYN significa sincronização, em referência à sincronização do número de sequência que mencionei acima. ACK: Este bit indica que o dispositivo que envia o segmento está transmitindo uma confirmação para uma mensagem que recebeu (como um SYN). Instalação de conexão normal: o aperto de mão de três vias Para estabelecer uma conexão, cada dispositivo deve enviar uma SYN e receber uma ACK para ela do outro dispositivo. Assim, conceitualmente, quatro mensagens de controle precisam ser passadas entre os dispositivos. No entanto, é ineficiente enviar um SYN e um ACK em mensagens separadas quando se pode comunicar simultaneamente. Assim, na sequência normal de eventos no estabelecimento de conexão, um dos SYN e um dos ACKs são enviados juntos, definindo ambos os bits relevantes (uma mensagem às vezes chamada de SYNACK). Isso faz um total de três mensagens e, por esse motivo, o procedimento de conexão é chamado de handshake de três vias. O cliente envia uma mensagem SYN, o servidor envia uma mensagem que combina um ACK para os clientes SYN e contém os servidores SYN e, em seguida, o cliente envia uma ACK para os servidores SYN. Isso é chamado de handshake de três vias TCP. Uma conexão progride através de uma série de estados durante sua vida. Os estados são: LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT e o estado ficcional CLOSED. FECHADO é ficcional porque representa o estado quando não há TCB e, portanto, sem conexão. Resumidamente, os significados dos estados são: LISTEN - representa a espera de uma solicitação de conexão de qualquer TCP e porta remota. SYN-SENT - representa a espera de uma solicitação de conexão correspondente depois de ter enviado uma solicitação de conexão. SYN-RECEIVED - representa a espera de uma confirmação de confirmação do pedido de conexão depois de ter recebido e enviado uma solicitação de conexão. ESTABELECIDO - representa uma conexão aberta, os dados recebidos podem ser entregues ao usuário. O estado normal para a fase de transferência de dados da conexão. FIN-WAIT-1 - representa a espera de uma solicitação de terminação de conexão do TCP remoto, ou uma confirmação da solicitação de terminação de conexão enviada anteriormente. FIN-WAIT-2 - representa a espera de uma solicitação de terminação de conexão do TCP remoto. CLOSE-WAIT - representa a espera de uma solicitação de terminação de conexão do usuário local. ENCERRAMENTO - representa a espera de uma confirmação do pedido de terminação da conexão do TCP remoto. LAST-ACK - representa a espera de uma confirmação da solicitação de terminação de conexão enviada anteriormente para o TCP remoto (que inclui uma confirmação de sua solicitação de terminação de conexão). TIME-WAIT - representa a espera de tempo suficiente para passar para ter certeza de que o TCP remoto recebeu a confirmação de sua solicitação de terminação de conexão. FECHADO - não representa nenhum estado de conexão. Uma conexão TCP progride de um estado para outro em resposta a eventos. Os eventos são chamadas de usuário, ABRIR, ENVIAR, RECEBER, FECHAR, ABORTE e STATUS os segmentos recebidos, particularmente aqueles que contêm os sinalizadores SYN, ACK, RST e FIN e os tempos limite. O diagrama de estados na figura 6 ilustra apenas mudanças de estado, juntamente com os eventos causadores e as ações resultantes, mas não aborda condições de erro nem ações que não estão conectadas com mudanças de estado. Em uma seção posterior, é oferecido mais detalhes sobre a reação do TCP aos eventos. Gerenciamento de buffer Quando o remetente (assumir o cliente no nosso caso) tem uma conexão para estabelecer, o pacote vem para o buffer de transmissão. O pacote deve ter algum número de sequência ligado a ele. Este remetente escolhe o número de sequência para minimizar o risco de usar o número de sequência já utilizado. O cliente envia o pacote com esse número de sequência e dados junto com o campo de comprimento do pacote. O servidor ao receber o pacote envia ACK do próximo número de seqüência esperado. Ele também envia o SYN com seu próprio número de seqüência. O cliente ao receber ambas as mensagens (SYN e ACK), envia ACK ao receptor com o próximo número de seqüência esperado do Receptor. Assim, o número de seqüência é estabelecido entre o Cliente e o Servidor. Agora, eles estão prontos para a transferência de dados. Mesmo ao enviar os dados, o mesmo conceito do número de seqüência é seguido. Política de transmissão TCP O gerenciamento de janelas no TCP não está diretamente vinculado a confirmações como é na maioria dos protocolos de ligação de dados. Por exemplo, suponha que o receptor tenha um buffer de 4096 bytes, conforme mostrado na Figura abaixo. Se o remetente transmitir um segmento de 2048 bytes que seja recebido corretamente, o receptor reconhecerá o segmento. No entanto, uma vez que agora tem apenas 2048 bytes de espaço de buffer (até que o aplicativo remova alguns dados do buffer), anunciará uma janela de 2048 começando no próximo byte esperado. Agora, o remetente transmite outros 2048 bytes, que são reconhecidos, mas a janela anunciada é 0. O remetente deve parar até que o processo do aplicativo no host receptor tenha removido alguns dados do buffer, momento em que o TCP pode anunciar uma janela maior. Quando a janela é 0, o remetente normalmente não pode enviar segmentos, com duas exceções. Primeiro, dados urgentes podem ser enviados, por exemplo, para permitir que o usuário mate o processo em execução na máquina remota. Em segundo lugar, o remetente pode enviar um segmento de 1 byte para fazer o destinatário reiniciar o próximo byte esperado e o tamanho da janela. O padrão TCP fornece explicitamente esta opção para impedir o impasse se um anúncio de janela se perder. Os remetentes não são obrigados a transmitir dados assim que eles vierem da aplicação. Nem os receptores são obrigados a enviar confirmações o mais rápido possível. Quando os primeiros 2 KB de dados vieram, o TCP, sabendo que tinha uma janela de 4 KB disponível, teria sido completamente correto em apenas armazenar os dados até chegar outro 2 KB, para poder transmitir um segmento com um 4 - KB carga útil. Essa liberdade pode ser explorada para melhorar o desempenho. Considere uma conexão telnet para um editor interativo que reage em cada pressionamento de tecla. No pior caso, quando um personagem chega à entidade TCP emissora, o TCP cria um segmento TCP de 21 bytes, que ele dá ao IP para enviar como um datagrama IP de 41 bytes. No lado de recepção, o TCP envia imediatamente uma confirmação de 40 bytes (20 bytes de cabeçalho TCP e 20 bytes de cabeçalho IP). Mais tarde, quando o editor leu o byte, o TCP envia uma atualização de janela, movendo a janela 1 byte para a direita. Este pacote também é de 40 bytes. Finalmente, quando o editor processou o personagem, ele ecoa o caractere como um pacote de 41 bytes. Ao todo, são utilizados 162 bytes de largura de banda e são enviados quatro segmentos para cada caractere digitado. Quando a largura de banda é escassa, esse método de fazer negócios não é desejável. Uma abordagem que muitas implementações TCP usam para otimizar esta situação é atrasar confirmações e atualizações de janelas por 500 ms, com a esperança de adquirir alguns dados para criar um passeio gratuito. Assumindo que o editor ecoa dentro de 500 ms, apenas um pacote de 41 bytes agora precisa ser enviado de volta ao usuário remoto, cortando a contagem de pacotes e o uso da largura de banda pela metade. Embora esta regra reduza a carga colocada na rede pelo receptor, o remetente ainda está operando ineficientemente enviando pacotes de 41 bytes contendo 1 byte de dados. Uma maneira de reduzir esse uso é conhecida como algoritmo Nagles (Nagle, 1984). O que Nagle sugeriu é simples: quando os dados entram no remetente, um byte de cada vez, basta enviar o primeiro byte e armazenar o resto até que o byte pendente seja reconhecido. Em seguida, envie todos os caracteres armazenados em buffer em um segmento TCP e comece o buffer novamente até que todos estejam reconhecidos. Se o usuário estiver digitando rapidamente e a rede estiver lenta, um número substancial de caracteres pode entrar em cada segmento, reduzindo significativamente a largura de banda usada. O algoritmo adicionalmente permite que um novo pacote seja enviado se dados suficientes tiverem goteado para preencher metade da janela ou um segmento máximo. O algoritmo Nagles é amplamente utilizado pelas implementações TCP, mas há momentos em que é melhor desativá-lo. Em particular, quando um aplicativo X Windows está sendo executado pela Internet, os movimentos do mouse devem ser enviados para o computador remoto. (O sistema X Window é o sistema de janelas usado na maioria dos sistemas UNIX.) Reunindo-os para enviar em explosões faz com que o cursor do mouse se mova de forma errática, o que faz para usuários infelizes. Outro problema que pode degradar o desempenho do TCP é a síndrome da janela boba. Esse problema ocorre quando os dados são passados ​​para a entidade TCP de envio em grandes blocos, mas um aplicativo interativo no lado de recepção lê dados de 1 byte de cada vez. Para ver o problema, veja a figura abaixo. Inicialmente, o buffer TCP no lado de recepção está cheio e o remetente sabe disso (isto é, tem uma janela de tamanho 0). Em seguida, o aplicativo interativo lê um caractere do fluxo TCP. Esta ação torna o TCP receptor feliz, então ele envia uma atualização de janela para o remetente dizendo que está tudo certo enviar 1 byte. O remetente obriga e envia 1 byte. O buffer está cheio, então o receptor reconhece o segmento de 1 byte, mas define a janela como 0. Esse comportamento pode continuar para sempre. A solução Clarks é evitar que o receptor envie uma atualização de janela para 1 byte. Em vez disso, é forçado a esperar até ter uma quantidade razoável de espaço disponível e anunciar isso. Especificamente, o receptor não deve enviar uma atualização de janela até que ele possa manipular o tamanho máximo de segmento anunciado quando a conexão foi estabelecida ou até que seu buffer esteja meio vazio, o que for menor. Além disso, o remetente também pode ajudar por não enviar pequenos segmentos. Em vez disso, ele deve tentar aguardar até ter acumulado espaço suficiente na janela para enviar um segmento completo ou pelo menos um contendo metade do tamanho do buffer do destinatário (que deve estimar a partir do padrão de atualizações de janela que recebeu no passado) . O algoritmo Nagles e a solução Clarks para a síndrome da janela boba são complementares. Nagle estava tentando resolver o problema causado pelo aplicativo de envio entregando dados para TCP um byte de cada vez. Clark estava tentando resolver o problema do aplicativo de recebimento sugando os dados de TCP um byte de cada vez. Ambas as soluções são válidas e podem funcionar juntas. O objetivo é que o remetente não envie pequenos segmentos e o receptor não para pedir. O TCP de recepção pode avançar na melhoria do desempenho do que apenas fazer atualizações de janelas em grandes unidades. Como o envio de TCP, ele também pode armazenar dados, portanto, pode bloquear uma solicitação READ do aplicativo até ter um grande número de dados a fornecer. Isso reduz o número de chamadas para TCP e, portanto, a sobrecarga. Claro, também aumenta o tempo de resposta, mas para aplicativos não-interativos como a transferência de arquivos, a eficiência pode ser mais importante do que o tempo de resposta para pedidos individuais. Outro problema de recebimento é o que fazer com segmentos fora de ordem. Eles podem ser mantidos ou descartados, a critério dos receptores. Claro, os agradecimentos só podem ser enviados quando todos os dados até o byte reconhecido foram recebidos. Se o receptor receber os segmentos 0, 1, 2, 4, 5, 6 e 7, pode reconhecer tudo até e incluindo o último byte no segmento 2. Quando o remetente expirar, ele retransmite o segmento 3. Se o receptor Tem os segmentos 4 a 7 armazenados em buffer, após o recebimento do segmento 3, pode confirmar todos os bytes até o final do segmento 7. Explicado Exemplo: Estabelecimento de conexão e edição de terminação Estabelecimento de conexão Uma conexão pode ser estabelecida entre duas máquinas somente se uma conexão entre a Não existem dois soquetes, ambas as máquinas concordam com a conexão, e ambas as máquinas possuem recursos TCP adequados para atender a conexão. Se alguma dessas condições não for cumprida, a conexão não pode ser feita. A aceitação de conexões pode ser desencadeada por um aplicativo ou uma rotina de administração do sistema. Quando uma conexão é estabelecida, é dada certas propriedades que são válidas até a conexão estar fechada. Normalmente, estes serão um valor de precedência e um valor de segurança. Essas configurações são acordadas pelos dois aplicativos quando a conexão está em processo de criação. Na maioria dos casos, uma conexão é esperada por duas aplicações, de modo que eles emitem solicitações abertas ativas ou passivas. A figura abaixo mostra um diagrama de fluxo para um TCP aberto. O processo começa com o Machine As TCP recebendo uma solicitação de conexão de sua ULP, para a qual envia uma primitiva aberta ativa para a Máquina B. O segmento que está construído terá o sinalizador SYN ativado (definido como 1) e terá uma Número de sequência atribuído. O diagrama mostra isso com a notação SYN SEQ 50, indicando que o sinalizador SYN está ativado eo número de seqüência (número inicial de envio ou ISS) é 50. (Qualquer número poderia ter sido escolhido.) O aplicativo na máquina B emitirá um Instruções passivas abertas para o seu TCP. Quando o segmento SYN SEQ 50 é recebido, o Machine Bs TCP enviará uma confirmação para a Máquina A com o número de seqüência de 51. A Máquina B também definirá um número de Seqüência de Envio Inicial próprio. O diagrama mostra esta mensagem como ACK 51 SYN 200 indicando que a mensagem é uma confirmação com número de seqüência 51, possui o sinalizador SYN marcado e possui ISS de 200. Após a recepção, a Máquina A envia sua própria mensagem de confirmação com a seqüência Número configurado para 201. Este é ACK 201 no diagrama. Então, tendo aberto e reconhecido a conexão, Máquina A e Máquina B enviam mensagens de conexão aberta através da ULP para os aplicativos solicitantes. Não é necessário que a máquina remota tenha uma instrução aberta passiva, como mencionado anteriormente. Nesse caso, a máquina enviadora fornece os números de soquete de envio e recebimento, bem como valores de precedência, segurança e tempo limite. É comum que duas aplicações solicitem uma abertura ativa ao mesmo tempo. Isso é resolvido com bastante facilidade, embora isso envolva um pouco mais de tráfego de rede. A transferência de informações é direta, como mostrado na Figura abaixo. Para cada bloco de dados recebido pela Machine As TCP da ULP, o TCP encapsula e envia para a Máquina B com um número de seqüência cada vez maior. Depois que a Máquina B recebe a mensagem, ela a reconhece com uma confirmação de segmento que incrementa o próximo número de seqüência (e, portanto, indica que recebeu tudo com esse número de seqüência). A figura mostra a transferência de apenas um segmento de informação - um a cada caminho. O serviço de transporte de dados TCP incorpora seis subservices diferentes: Full duplex: permite que ambas as extremidades de uma conexão sejam transmitidas a qualquer momento, mesmo em simultâneo. Prazo: o uso de temporizadores garante que os dados sejam transmitidos dentro de um período razoável de tempo. Ordenado: Os dados enviados de um aplicativo serão recebidos na mesma ordem na outra extremidade. This occurs despite the fact that the datagrams may be received out of order through IP, as TCP reassembles the message in the correct order before passing it up to the higher layers. Labeled: All connections have an agreed-upon precedence and security value. Controlled flow: TCP can regulate the flow of information through the use of buffers and window limits. Error correction: Checksums ensure that data is free of errors (within the checksum algorithms limits). To close a connection, one of the TCPs receives a close primitive from the ULP and issues a message with the FIN flag set on. This is shown in Figure 8. In the figure, Machine As TCP sends the request to close the connection to Machine B with the next sequence number. Machine B will then send back an acknowledgment of the request and its next sequence number. Following this, Machine B sends the close message through its ULP to the application and waits for the application to acknowledge the closure. This step is not strictly necessary TCP can close the connection without the applications approval, but a well-behaved system would inform the application of the change in state. After receiving approval to close the connection from the application (or after the request has timed out), Machine Bs TCP sends a segment back to Machine A with the FIN flag set. Finally, Machine A acknowledges the closure and the connection is terminated. An abrupt termination of a connection can happen when one side shuts down the socket. This can be done without any notice to the other machine and without regard to any information in transit between the two. Aside from sudden shutdowns caused by malfunctions or power outages, abrupt termination can be initiated by a user, an application, or a system monitoring routine that judges the connection worthy of termination. The other end of the connection may not realise an abrupt termination has occurred until it attempts to send a message and the timer expires. To keep track of all the connections, TCP uses a connection table. Each existing connection has an entry in the table that shows information about the end-to-end connection. The layout of the TCP connection table is shown below - The meaning of each column is as follows: State: The state of the connection (closed, closing, listening, waiting, and so on). Local address: The IP address for the connection. When in a listening state, this will set to 0.0.0.0. Local port: The local port number. Remote address: The remotes IP address. Remote port: The port number of the remote connection. TCP Retransmission and Timeout Edit We know that the TCP does provide reliable data transfer. But, how does it know when to retransmit the packet already transmitted. It is true that the receiver does acknowledges the received packets with the next expected sequence number. But what if sender does not receive any ACK. Consider the following two scenarios: ACK not received: In this case the receiver does transmit the cumulative ACK, but this frame gets lost somewhere in the middle. Sender normally waits for this cumulative ACK before flushing the sent packets from its buffer. But for that it has to develop some mechanism by which the sender can take some action if the ACK is not received for too long time. The mechanism used for this purpose here is the timer. The TCP sets a timer as soon as it transfers the packet. If before the time-out the ACK comes, then the TCP flushes those packets from its buffer to create a space. If the ACK does not arrive before the time-out, then in this case the TCP retransmits the packet again. But from where this time-out interval is chosen. Well we will be seeing the procedure to find out this shortly. Duplicate ACK received: In this case the receiver sends the ACK more than one time to the sender for the same packet received. But, ever guessed how can this happen. Well, such things may happen due to network problem sometimes, but if receiver does receive ACK more than 2-3 times there is some sort of meaning attached to this problem. All this problem starts from the receiver side. Receiver keeps on sending ACK to the received frames. This ACK is of the cumulative nature. It means that the receiver is having a buffer with it. The algorithm used for sending cumulative ACK can depend on amount of buffer area filled or left or it may depend upon the timer. Normally, timer is set so that after specific interval of time, receiver sends the cumulative ACK. But what if the sender rate is very high. In this case the receiver buffer becomes full amp after that it looses capacity to store any more packets from the sender side. In this case receiver keeps on sending the duplicate ACK, meaning that the buffer is full and no more packets after that have been accepted. This message helps the sender to control the flow rate. This whole process makes TCP a adaptive flow control protocol. Means that in case of congestion TCP adapts its flow rate. More on this will be presented in the Congestion control topic. Also there is no thing like the negative ACK in the TCP. Above two scenarios convey the proper message to the sender about the state of the receiver. Lets now concentrate on how the TCP chooses the time-out-interval. Choosing the Time out interval: The timer is chosen based on the time a packet takes to complete a round-trip from a sender to the receiver. This round trip time is called as the RTT. But the conditions i. e. the RTT cannot remain same always. In fact RTT greatly varies with the time. So some average quantity is to be included into the calculation of the time-out interval. The following process is followed. 1. Average RTT is calculated based on the previous results.(Running average) 2. For that particular time RTT is measured and this value depends on the conditions amp the congestion in a network at that time.(Measured) 3. To calculate a time out interval: The value 0.8 may be changed as required but it has to be less than 1. 4. To arrive at more accurate result this procedure may be repeated many times. Thus, we have now arrived at the average value a packet takes to make a round trip. In order to choose a time-out interval, this value needs to be multiplied by some factor so as to create some leeway. Time-out interval 2(value arrived in 4th step) If we go on plotting a graph for the running average and a measured value at that particular time we see that the running average value remains almost constant and the measured value fluctuates more. Below is the graph drawn for both the values. This explains why a running average is multiplied by a value greater than value used for multiplying a measured time. Comparison: TCP and UDP Edit The User Datagram Protocol (UDP) and Transmission Control Protocol (TCP) are the siblings of the transport layer in the TCPIP protocol suite. They perform the same role, providing an interface between applications and the data-moving capabilities of the Internet Protocol (IP), but they do it in very different ways. The two protocols thus provide choice to higher-layer protocols, allowing each to select the appropriate one depending on its needs. Below is the table which helps illustrate the most important basic attributes of both protocols and how they contrast with each other: Exercise Questions Edit The exercise questions here include the assignment questions along with the solutions. This will help students to grab the concept of TCP and would encourage them to go for more exercise questions from the Kurose and the Tanenbaum book. 1) UDP and TCP use 1s complement for their checksums. Suppose you have the following three 8-bit bytes: 01010101, 01110000, 01001100. What is the 1s complement of the sum of these 8-bit bytes (Note that although UDP and TCP use 16-bit words in computing the checksum, for this problem you are being asked to consider 8-bit summands.) Show all work. Why is it that UDP takes the 1s complement of the sum that is, why not just use the sum With the 1s complement scheme, how does the receiver detect errors Is it possible that a 1-bit error will go undetected How about a 2-bit error Solution: 01010101 01110000 11000101 110001010 Ones complement of 10001010 Checksum 01110101. At the receiver end, the 3 messages and checksum are added together to detect an error. Sum should always contain only binary 1. If the sum contains 0 term, receiver knows that there is an error. Receiver will detect 1-bit error. But this may not always be the case with 2-bit error as two different bits may change but the sum may still be same. 2) Answer true or false to the following questions and briefly justify your answer: a) With the SR protocol, it is possible for the sender to receive an ACK for a packet that falls outside of its current window. Verdade. Consider a scenario where a first packet sent by sender doesnt receive ACK as the timer goes down. So it will send the packet again. In that time the ACK of first packet is received. so the sender empties its buffer and fills buffer with new packect. In the meantime, the ACK of second frame may be received. So ACK can be received even if the packet falls outside the current window. b) With GBN, it is possible for the sender to receive an ACK for a packet that falls outside of its current window. Verdade. Same argument provided for (a) holds here. c) The alternating bit protocol is the same as the SR protocol with a sender and receiver window size of 1. True. Alternating bit protocol deals with the 0 amp 1 as an alternating ACK. Here, the accumulative ACK is not possible as ACK needs to be sent after each packet is received. So SR protocol starts behaving as Alternating bit protocol. d) The alternating bit protocol is the same as the GBN protocol with a sender and receiver window size of 1. True. Same argument holds here. 3)Consider the TCP positions for estimating RTT. Suppose that a0.1 Let sample RTT1 be the most recent sample RTT, Let sample RTT2 be the next most recent sample RTT, and so on. a) For a given TCP connection, suppose four acknowledgments have been returned with corresponding sample RTTs Sample RTT4, SampleRTT3, SampleRTT2, SampleRTT1. Express EstimatedRTT in terms of four sample RTTs. b) Generalize your formula for n sample RTTs. c) For the formula in part (b) let n approach infinity. Comment on why this averaging procedure is called an exponential moving average. EstimatedRTT2 (1-a)EstimatedRTT1 aSampleRTT2 (1-a)SampleRTT1 aSampleRTT2 EstimatedRTT3 (1-a)EstimatedRTT2 aSampleRTT3 (1-a) 2 SampleRTT1 (1-a)aSampleRTT2 aSampleRTT3 EstimatedRTT4 (1-a)EstimatedRTT3 aSampleRTT4 (1-a) 3 SampleRTT1 (1-a) 2 aSampleRTT2 (1-a)aSampleRTT3 aSampleRTT4 EstimatedRTTn (1-a) (n-1) SampleRTT1 (1-a) (n-2) aSampleRTT2 (1-a) (n-3) aSampleRTT3 . (1-a)aSampleRTTn-1 aSampleRTTn 4) We have seen from text that TCP waits until it has received three duplicate ACKs before performing a fast retransmit. Why do you think that TCP designers chose not to perform a fast retransmit after the first duplicate ACK for a segment is received Solution: Suppose a sender sends 3 consecutive packets 1,2 amp 3. As soon as a receiver receives 1, it sends ACK for it. Suppose if instead of 2 receiver receives 3 due to reordering. As receiver hasnt received 2, it again sends ACK for 1. So the sender has received 2nd ACK for 1. Still it continues waiting. Now when the receiver receives 2, it sends ACK 2 amp then 3. So it is always safe to wait for more than 2 ACKs before re-transmitting packet. 5) Why do you think TCP avoids measuring the SampleRTT for retransmitted segments Solution: Lets look at what could wrong if TCP measures SampleRTT for a retransmitted segment. Suppose the source sends packet P1, the timer for P1 expires, and the source then sends P2, a new copy of the same packet. Further suppose the source measures SampleRTT for P2 (the retransmitted packet). Finally suppose that shortly after transmitting P2 an acknowledgment for P1 arrives. The source will mistakenly take this acknowledgment as an acknowledgment for P2 and calculate an incorrect value of SampleRTT. Unlike TCP, UDP doesnt establish a connection before sending data, it just sends. Because of this, UDP is called Connectionless. UDP packets are often called Datagrams. An example of UDP in action is the DNS service. DNS servers send and receive DNS requests using UDP. Introduction Edit In this section we have to look at User Datagram protocol. Its a transport layer protocol. This section will cover the UDP protocol, its header structure amp the way with which it establishes the network connection. As shown in Figure 1,the User Datagram Protocol (UDP) is a transport layer protocol that supports Network Application. It layered on just below the Session and sits above the IP(Internet Protocol) in open system interconnection model (OSI). This protocol is similar to TCP (transmission control protocol) that is used in client server programs like video conference systems expect UDP is connection less. Figure 1:UDP in OSI Layer Model What is UDP Edit UDP is a connectionless and unreliable transport protocol. The two ports serve to identify the end points within the source and destination machines. User Datagram Protocol is used, in place of TCP, when a reliable delivery is not required. However, UDP is never used to send important data such as web-pages, database information, etc. Streaming media such as video, audio and others use UDP because it offers speed. Why UDP is faster than TCP The reason UDP is faster than TCP is because there is no form of flow control. No error checking, error correction, or acknowledgment is done by UDP. UDP is only concerned with speed. So when, the data sent over the Internet is affected by collisions, and errors will be present. UDP packets called as user datagrams with 8 bytes header. A format of user datagrams is shown in figur 3. In the user datagrams first 8 bytes contains header information and the remaining bytes contains data. Figure 3:UDP datagrams Source port number . This is a port number used by source host, who is transferring data. It is 16 bit longs. So port numbers range between 0 to 65,535. Destination port number . This is a port number used by Destination host, who is getting data. It is also 16 bits long and also same number of port range like source host. length . Length field is a 16 bits field. It contains the total length of the user datagram, header and data. Checksum . The UDP checksum is optional. It is used to detect error fro the data. If the field is zero then checksum is not calculated. And true calculated then field contains 1. Characteristics of UDP The characteristics of UDP are given below. End-to-end. UDP can identify a specific process running on a computer. Unreliable, connectionless delivery (e. g. USPS):: UDP uses a connectionless communication setup. In this UDP does not need to establish a connection before sending data. Communication consists only of the data segments themselves Same best effort semantics as IP No ack, no sequence, no flow control Subject to loss, duplication, delay, out-of-order, or loss of connection Fast, low overhead 1.Suit for reliable, local network 2.RTP(Real-Time Transport Protocol) Use of ports in Communication Edit After receiving the data, computer must have some mechanism what to do with it. Consider that user has three application open say a web browser, a telnet session and FTP session. All three application are moving data over the network. So, there should be some mechanism for determining what piece of traffic is bound for which application by operating system. To handle this situation. network ports are used. Available ports range is 0 to 65535.In them 0 to 1023 are well-known ports, 1023 to 49151 are registered ports and 49152 to 65535 are dynamic ports. List of well-known ports used by UDP: Figure 5:List of ports used by UDP UDP Header structure Edit It contains four section. Source port, Destination port, Length and Checksum. Figure 6: UDP Header Source port is an optional field. When used, it indicates the port of the sending process and may be assumed to be the port to which a reply should be addressed in the absence of any other information. If not used, a value of zero is inserted. It is the port number on which the data is being sent. It include the length of UDP Header and Data. The length in octets of this user datagram, including this header and the data. The minimum value of the length is eight. The main purpose of checksum is error detection. It guarantees that message arrived at correct destination. To verify checksum, the receiver must extract this fields from IP Header .12-byte psuedo header is used to compute checksum. It is the application data. or Actual message. The UDP packet can be viewed using Ethereal capture. One such UDP packet is captured and shown below. Figure 7: ethereal capture Communication in UDP Edit In UDP connection, Client set unique source port number based on the program they started connection. UDP is not limited to 1-to-1 interaction. A 1-to-many interaction can be provided using broadcast or multi-cast addressing. A many-to-1 interaction can be provided by many clients communicating with a single server. A many-to-many interaction is just an extension of these techniques. UDP Checksum and Pseudo-Header Edit The main purpose of UDP checksum is to detect errors in transmitted segment. UDP Checksum is optional but it should always be turned on. To calculate UDP checksum a pseudo header is added to the UDP header. The field in the pseudo header are all taken from IP Header. They are used on receiving system to make sure that IP datagram is being received by proper computer. Generally. the pseudo-header includes: Figure 8. UDP Pseudo Header IP Source Address 4 bytes IP Destination Address 4 bytes Protocol 2 bytes UDP Length 2 bytes Checksum Calculation Edit 1. It treats segment contents as sequence of 16-bit integers. 2. All segments are added. Lets call it sum. 3. Checksum. 1s complement of sum.(In 1s complement all 0s are converted into 1s and all 1s are converted into 0s). 4. Sender puts this checksum value in UDP checksum field. 1. Calculate checksum 2. All segments are added and then sum is added with senders checksum. 3. Check that any 0 bit is presented in checksum. If receiver side checksum contains any 0 then error is detected. So the packet is discarded by receiver. Here we explaine a simple checksum calculation. As an example, suppose that we have the bitstream 0110011001100110 0110011001100110 0000111100001111: This bit stream is divided into segments of 16-bits integers. So, it looks like this: 0110011001100110 (16-bit integer segment) The sum of first of these 16-bit words is: Adding the third word to the above sum gives 1100101011001010 (sum of all segments) Now to calculate checksum 1s complement of sum is taken. As I mentioned earlier. 1s complement is achieved by converting all 1s into 0s and all 0s into 1s. So, the checksum at sender side is. 0011010100110101. Now at the receiver side, again all segments are added. and sum is added with senders checksum. If no error than check of receiver would be. 1111111111111111. If any 0 bit is presented in the header than there is an error in checksum. So, the packet is discarded. You may wonder why UDP provides a checksum in the first place, as many link-layer protocols (including the popular Ethernet protocol) also provide error checking The reason is that there is no guarantee that all the links between source and destination provide error checking -- one of the links may use a protocol that does not provide error checking. Because IP is supposed to run over just about any layer-2 protocol, it is useful for the transport layer to provide error checking as a safety measure. Although UDP provides error checking, it does not do anything to recover from an error. Some implementations of UDP simply discard the damaged segment others pass the damaged segment to the application with a warning. Summary Edit UDP is a transport layer protocol. UDP is a connectionless and unreliable protocol. UDP does not do flow control, error control or retransmission of a bad segment. UDP is faster then TCP. UDP is commonly used for streaming audio and video. UDP never used for important documents like web-page, database information, etc. UDP transmits segments consisting of an 8-byte header. Its contains Source port, Destination port, UDP length and Checksum. UDP checksum used for detect errors in transmitted segment. Exercise Questions Edit 1. Calculate UDP checksum of the following sequence: 11100110011001101101010101010101. Answer. To calculate checksum follow the following steps: 2. What is the advantage of keeping checksum field turned off and when it is appropriate to keep checksum field turned off Congestion occurs when the source sends more packets than the destination can handle. When this congestion occurs performance will degrade. Congestion occurs when these buffers gets filled on the destination side. The packets are normally temporarily stored in the buffers of the source and the destination before forwarding it to their upper layers. What is Congestion Let us assume we are watching the destination. If the source sends more number of packets than the destination buffer can handle, then this congestion occurs. When congestion occurs, the destination has only two options with the arriving packets, to drop it or keep it. If the destination drops the new arriving packets and keeps the old packets then this mechanism is called Y model. If the destination drops the old packets and fills them with new packet, then this mechanism is called Milk model. In both the cases packets are dropped. Two common ways to detect congestion are timeout and duplicate acknowledgement. Congestion control can be used to calculate the amount of data the sender can send to the destination on the network. Determining the amount of data is not easy, as the bandwidth changes from time to time, the connections get connected and disconnected. Based on these factors the sender should be able to adjust the traffic. TCP congestion control algorithms are used to detect and control congestion. The following are the congestion algorithms we will be discussing. Additive Increase Multiplicative Decrease. Slow Start Congestion Avoidance Fast Retransmit Fast recovery Additive Increase Multiplicative Decrease This algorithm is used on the sender side of the network. The congestion window SSIZE is the amount of data the sender can send into the network before receiving the ACK. Advertised window RSIZE is the amount of data the receiver side can receive on the network. The TCP source set the congestion window based on the level of congestion on the network. This is done by decreasing the congestion window when the congestion increases and increases the congestion window if the congestion decreases. This mechanism is commonly called as Additive Increase Multiplicative Decrease. The source determines the congestion based on packet loss. The packet loss is determined when the timeout happens. The source waits until the timeout time for the acknowledge to arrive. In normal cases packets are not lost, so the source assumes congestion has occurred when timeout happens. Whenever the timeout happens the source sets the SSIZE to half of the previous value. This mechanism is called Multiplicative Decrease. If timeout happens continuously, the window size is decreased until the size becomes 1. This is because the minimum value for congestion window is 1. When the sender determines that congestion has not happened, it increases the congestion window by one. This increase happens after every successful ACK received by the sender as shown below. 600px The main disadvantage in the Additive Increase Multiplicative Decrease method is the sender decreases the congestion by half when it detects congestion and increase only by one for each successful ACK received. If the window size is large andor the congestion window size is increased from 1, then we waste many congestion windows. The slow start algorithm is used to solve this problem of increment by one. The SSIZE is the amount of data the sender can send into the network before receiving the ACK. RSIZE is the amount of data the receiver side can receive on the network. The SSTHOLD is the slow start threshold used to control the amount of data flow on the network. The slow start algorithm is used when the SSIZE is less than the threshold SSTHOLD. In the beginning the sender does not know how much data to send. It has to find how much data to send. Initially the SSIZE much be less than or equal to 2SMSS bytes and must not be more than 2 segments. As the packets are sent the SSIZE is increased exponentially until SSIZE become greater than SSTHOLD or when congestion is detected. When the sender detects congestion, then it decreases the congestion window by half of the previous value. Again, the slow start algorithm is used for increasing the congestion window. The SIZE is the amount of data the sender can send into the network before receiving the ACK. RSIZE is the amount of data the receiver side can receive on the network. The SSTHOLD is the slow start threshold used to control the amount of data flow on the network. The congestion avoidance algorithm is used when the SSIZE is greater than the threshold SSTHOLD. As the packets are sent the SSIZE is increased by one full size segment per roundtrip rime. This continues until congestion is detected. Both the above three algorithms use timeout for detecting the congestion. The disadvantage here is the sender need to wait for the timeout to happen. To improve the congestion detection the sender uses duplicate ACK. Every time a packet arrives at the receiving side, the receiver sends an ACK to the sender. When a packet arrives out of order at the receiving side, TCP cannot yet acknowledge the data the packet contains because the earlier packet has not yet arrived. The receiver sends the same ACK which it sent last time resulting in duplicate ACK. This is illustrated below. From the senders point of view Duplicate ACKs can arise from number of network problems. The sender cannot assume the packet sent was lost, the Duplicate ACKs may be triggered by reorder the segments, Replication of the ACK or segment. So the sender waits for 3 duplicate ACKs to determine the packet loss. TCP performs a retransmission of what appears to be the missing segment, without waiting for the retransmission timer to expire. Fast recovery algorithm governs the transmission of new data until a non-duplicate ACK arrives. The reason for not performing slow start is that the receipt of the duplicate ACKs not only indicates that a segment has been lost, but also that segments are most likely leaving the network The fast retransmit and fast recovery algorithms are usually implemented together as follows. 1. When the third duplicate ACK is received, set STHOLD no more than STHOLD max (FlightSize 2, 2SMSS), where FlightSize is the amount of outstanding data in the network 2. Retransmit the lost segment and set SSIZE to STHOLD plus 3SMSS. This artificially inflates the congestion window by the number of segments (three) that have left the network and which the receiver has buffered. 3. For each additional duplicate ACK received, increment SSIZE by SMSS. This artificially inflates the congestion window in order to reflect the additional segment that has left the network. 4. Transmit a segment, if allowed by the new value of SSIZE and the receivers advertised window. 5. When the next ACK arrives that acknowledges new data, set SSIZE to STHOLD (the value set in step 1). This is termed deflating the window. This ACK should be the acknowledgment elicited by the retransmission from step 1, one RTT after the retransmission (though it may arrive sooner in the presence of significant out-of-order delivery of data segments at the receiver).Additionally, this ACK should acknowledge all the intermediate segments sent between the lost segment and the receipt of the third duplicate ACK, if none of these were lost. What causes this congestion Congestion occurs when the source sends more packets than the destination can handle. When this congestion occurs performance will degrade. Congestion occurs when these buffers gets filled on the destination side. The packets are normally temporarily stored in the buffers of the source and the destination before forwarding it to their upper layers. Let us assume we are watching the destination. If the source sends more number of packets than the destination buffer can handle, then this congestion occurs. What happens when congestion occurs When congestion occurs, the destination has only two options with the arriving packets, to drop it or keep it. If the destination drops the new arriving packets and keeps the old packets then this mechanism is called Y model. If the destination drops the old packets and fills them with new packet, then this mechanism is called Milk model. In both the cases packets are dropped How do you detect congestion Two common ways to detect congestion are timeout and duplicate acknowledgement.

No comments:

Post a Comment