Como rede de computadores --tcp transmissão de dados confiável

I. Introdução

  Estes dias escreveu quatro TCPséries de blog, este é o quinto capítulo, também é esperado para ser o último desta vez, e eu começo a terminar o estudo desta camada de rede. Porque, se os meus outros TCPaspectos de interesse do blog, ir para o meu blog pessoal podem ser encontrados na rede de computadores que categoria. Este blog apenas para falar sobre TCPé o meio pelo qual para garantir a transmissão de dados confiável.


Em segundo lugar, o texto

 existem 2.1 problemas de transmissão rede

  Research TCPantes como garantir a transmissão de dados confiável, primeiro iremos listar que há um problema de transmissão da rede, apenas para encontrar o problema, pode resolver o problema, encontrar maneiras de lidar. TCPÉ contar com a camada de rede IPprotocolo para enviar dados, enquanto o IPprotocolo é um protocolo não confiável, é apenas melhor transmissão de esforço, mas não a integridade dos dados garantia pode alcançar, não pode sequer garantia de que os dados podem alcançar. Enquanto isso, a unidade de rede máxima (MTU) permitiu a transmissão é limitado, tipicamente 1500bytes. Portanto, TCPa fim de transmitir dados maior do que este, é necessário dividir os dados em um segmento de dados é transmitida. Por estas razões, a rede irá transmitir os seguintes problemas:

  1. Os dados são corrompidos durante a transmissão, os bits 0para 1, ou 1em 0;
  2. A perda de dados durante a transmissão não chegar a um destino;
  3. Uma pluralidade de segmentos de ordem pacotes chegam no lado de recepo, o lado de recepção não pode correctamente os dados de composição;

  TCPA realização é basicamente sobre as três perguntas acima, bem como a forma de melhorar a taxa de transferência obtida. Aqui nós temos que falar TCP, a fim de lidar com esses problemas acima do que tinha sido coisa feita.


 2.2 TCP resolver a corrupção de dados

  Nós primeiro discutir a primeira pergunta, os dados estão danificados. Verifique se os dados é o modo de verificação de dados corrompidos, o seguinte é um formato de pacote TCP, que pode ser visto um 16campo de bits, chamados de soma de verificação , que é usado se o erro destinatário parte de dados de verificação.

  O nome do campo é chamado a soma de verificação , porque TCPda maneira é verificar o algoritmo de soma de verificação de dados, o processo do algoritmo é a seguinte:

  1. O campo de soma de verificação é definida 0, em seguida, as partes de dados para 16bits como uma unidade, de divisão;
  2. Depois de várias unidades dividir adição binária, se o resultado além dos primeiros transportar 17os bits, os 17bits para o primeiro bit (de facto, do complemento e de cálculo de resultados, também conhecidos como rebobinagem), a final adicionou invertido ( 0transformado em 1, 1torna-se 0), e depois para o campo de soma de verificação;
  3. Depois do segmento é enviado para o destino, o destino de acolhimento também acima de dois passos, em seguida, o resultado da operação com o campo de cabeçalho de soma de verificação são adicionados, e em seguida, negada se o resultado é 0que os dados de erro é não;

  Isto é como jogar um papel em verificar isso? É muito simples, é assumido no processo de transmissão de dados, os dados não está em erro, o fim de transmissão e fim de recepção, o resultado obtido é o mesmo. O campo checksum é o resultado do anti-código, ou seja, o resultado é 1a posição, é no anti-código 0, eo resultado para 0a posição, isto é, anti-código 1. Ou seja, no caso em que há erro nos dados, e um campo de soma de verificação resultados são adicionados, deve estar cheio 1, e então re-invertida, isto é, 0a. Enquanto o resultado final não é obtido 0, o destinatário é considerado erros de dados (após erro como lidar com, eu não encontrar a informação relevante, vergonha).

  No entanto, o algoritmo acima será capaz de verificar se os dados é um erro? A resposta é não. Devido a esta verificação fundamental, mas é na verdade os dados soma, e então determinar que não há nenhuma mudança nele. E todos nós sabemos que 1+2 == 2+1, 1 + 4 == 2 + 3confiando unicamente na soma, não há garantia de que não há nenhuma mudança nos dados. Contanto que ocorreram muitos erros de dados, e se anulam mutuamente, este algoritmo não vai detectar. Mas TCPainda usando esse algoritmo, eu pessoalmente acho que a razão é simples, e a probabilidade de erro na rede de dados não é alta, mas muitos da probabilidade de erro e cancelam um ao outro ainda menor, de modo que a confiabilidade deste algoritmo ainda é relativamente alta a.


 2.3 TCP perda de pacotes problema para resolver

  TCPA solução é a perda de dados retransmissão tempo . TCPManterá um timer, e definindo um tempo limite, ao enviar um TCPsegmento traseiro, não foi pacote ACK dentro do tempo limite, o remetente que os dados são perdidos, então a retransmissão do segmento em falta, até recepção. Devido ao TCPuso de uma transmissão gasoduto , ao mesmo tempo, pode haver mais foram enviados, mas não recebeu ACKsegmento, então logicamente falando, TCPmanter vários temporizadores, uma ligação para cada segmento, mas isso vai ter um custo maior, mas também muito complexa para a gestão timer. Então, TCPna verdade, só vai manter um timer, o registro atual é o primeiro a ser enviado, mas ainda não recebeu ACKpacotes segmento. Quando este segmento de tempo limite, o remetente irá retransmitir segmento, e reiniciar o temporizador; se o segmento recebeu do ACKpacote, também reiniciar o timer, mas desta vez é o mais antigo enviado, mas ainda não reconhecida pacotes segmento mudou, desta vez registrado é o momento da transmissão deste novo segmento de. Além disso, desencadeando rápido retransmitir , o temporizador será reiniciado. Sobre TCPa transmissão gasoduto, posso referir a este post: https://www.cnblogs.com/tuyang1129/p/12450978.html .

  Aqui não é um problema complexo, o tempo limite será como definir? Não é difícil pensar que o tempo limite deve ser ligeiramente maior do que os dados de tempo de ida e volta (RTT), por exemplo, os dados do emissor para o receptor à ACKmensagem, a parcela 200msque o tempo limite deve ser ligeiramente maior do que esse valor, por exemplo 400ms. Mas a rede é instável, para cada pacote, porque diferentes caminhos através dos diferentes níveis de congestionamento da rede, o tempo mais ou menos de ida e volta vai mudar. Portanto, para este tempo limite, ele deve ser calculado com base na média RTT. Mas a média estatística directa apenas muito difícil para TCPele, um conjunto de algoritmos complexos para calcular o período de tempo limite.

  Para calcular a RTTmédia aproximada, é preciso primeiro ter o valor da amostra, assumindo amostra RTT definido SampleRTT. TCPDurante os procedimentos de operação, pode ser medido em qualquer momento SampleRTT, isto é, uma medida do pacote enviado para o receptor a partir ACKdo tempo utilizado, em seguida, ele é usado para calcular RTTa média ponderada. Em seguida, ao longo de um período de tempo mais uma vez, ea nova medida SampleRTTpara atualizar a média ponderada. Supondo que a média ponderada RTTé definida como EstimatedRTTna TCPespecificação, o cálculo EstimatedRTTfórmula é:

EstimatedRTT = (1- α)*EstimatedRTT + α * SampleRTT(A fórmula)

  Em que SampleRTTé a mais recente amostra medido RTTpode ser determinada de forma dinâmica pela fórmula acima RTTmédia ponderada. Devido à medida depois SampleRTT, mais perto da rede na situação atual, então a atualização EstimatedRTTprocesso, o mais recente SampleRTTdeveria ocupar mais peso, então na TCPespecificação, recomenda-se αdefinir o valor 1/8, então a fórmula é:

EstimatedRTT = 0.875 * EstimatedRTT + 0.125 * SampleRTT

  E SampleRTTa EstimatedRTTflutuação da FIG segue:

  Além de buscar RTTa média ponderada das redes RTTmudanças também são necessárias, afinal de contas, pode ser visto a partir da figura, a amostra RTTflutuação é muito grave, única EstimatedRTT, não o suficiente para nos fazer uma estimativa do tempo limite exato. Então, precisamos encontrar SampleRTTo EstimatedRTTgrau de desvio, que é semelhante à variância , a variância para dinamicamente set timeout. Assumindo que a variância é definido como DevRTTé TCPdefinido na especificação DevRTTé calculado como se segue:

DevRTT = (1 - β)* DevRTT + β * | SampleRTT - EstimatedRTT |(D Oficial)

  Como pode ser visto a partir da equação acima, se a SampleRTTvariação for grande, DevRTTuma grande valor será, e vice-versa será pequeno. Na TCPespecificação de βvalor recomendado é 0.25. Sabemos agora que a RTTmédia ponderada, mas também saber RTTas flutuações, é hora de considerar como definir o tempo limite. Não é difícil de pensar, o tempo limite deve ser exigido do que RTTa média ponderada, que é EstimatedRTTmaior, por isso que a maioria dos segmentos de RTTmenor que esse valor, de modo a evitar a retransmissão timeout frequente. Esse número deve ser grande? Considere isso, quando o agitado rede, representa o real RTTdeve ser de EstimatedRTTmais longe, embora menos volátil, o real RTTdeve ser próximo EstimatedRTT, mas esta flutuações de valor, temos calculado, que é uma fórmula DevRTT, então assumido que o tempo limite é definido como TimeoutInterval, TCPespecificação recomenda o seu valor é calculado usando:

TimeoutInterval = EstimatedRTT + 4 * DevRTT(Fórmula III)

  Assim, se uma média ponderada ou uma flutuação em uma rede são levados em conta. O TCPpadrão recomendado inicial TimeoutIntervalpara o 1s(então ver a partir desta parte do livro, só para entender profundamente matemática poderosas, teoria Barbara em prática). Claro, o cálculo para o período de tempo limite, há duas exceções:

  • Quando um tempo limite do segmento, o remetente vai retransmitir este segmento, enquanto para trás no temporizador, o tempo limite será ajustado para as últimas duas vezes , em vez de utilizar o valor calculado com a fórmula 3; ou se limite, continuação retransmissão tempo para triplicar novamente até que a mensagem foi recebida com sucesso, enquanto que recebeu com sucesso, é recalculada utilizando a fórmula de três tempo limite. O objectivo é evitar que várias pistas de tempo de espera para uma retransmissão contínua, resultando na congestão de rede é mais grave, apesar de tudo, o tempo de espera é o resultado da congestão da rede.
  • registros da amostra RTT, a seleção não será retransmitido segmento como uma amostra, é porque, quando o evento de tempo limite ocorre, o remetente não sabe ou porque os dados são perdidos devido à latência de rede e tempos de espera. Se o segmento está atrasado por causa de um tempo limite, o pacote de retransmissão, o tempo de atraso do ACKpacote chega, o pacote remetente erro retransmitido é recebido corretamente, então um erro será detectado SampleRTT.

  Em, curta TCPo mecanismo de retransmissão timeout, uma boa solução para o problema da perda de dados ocorre na rede. Além disso, a fim de melhorar a eficácia, TCPexiste uma retransmissão rápido mecanismo, dependendo das circunstâncias particulares, antes do limite de tempo para determinar o segmento é perdida, e em seguida retransmitidos, mas não descritos em detalhe aqui.


 2,4 TCP como resolver chegam os dados fora de ordem

  O terceiro problema é que os dados chegam fora de problema ordem. Devido às limitações da rede, TCPo maior dos dados deve ser dividido em segmentos de pacotes mais pequenos, encapsulados em TCPsegmentos, uma por uma transmissão. Devido à incerteza da rede de transporte (tal como através de caminho diferente, um pacote é então retransmitido segmento é perdida, etc), estes segmentos podem não ser inteiramente na ordem de chegada. Portanto, a fim de ser capaz de receber os dados completos no receptor, e pode sequencialmente combinar estas mensagens, TCPdeve haver um mecanismo para resolver este problema.

  TCPO método utilizado é o de que cada TCPsegmento é atribuído um número de série, número de série de cada segmento é sequencialmente aumentado, de modo que o lado de recepo de acordo com o número de série, o segmento recebido é determinada a qual parte dos dados, e se recebeu todas as peças. Vai do acima TCPpodemos ver a estrutura de pacote figura, que tem um 32位campo de número de sequência. No entanto, o TCPnúmero de segmentos de não 0,1,2,3.... tão simples, aqui estamos preocupados que TCPé como conseguir um tal número de mecanismos.

  Primeiro temos que esclarecer um ponto, o TCP é um byte são numerados, ao invés de segmentos são numerados . TCPOs dados a serem transmitidos para cada byte de um dado número, tal como o primeiro byte de 0número, o segundo é um 1número, e assim por diante. E cada segmento é geralmente embalado mais do que um byte de dados, de modo que TCPo segmento, os dados são encapsulados neste segmento, o primeiro byte do número de sequência. Por exemplo, digamos que um remetente para enviar 250bytes de dados, supomos que o número de sequência inicial a partir 0do início, então este 250número de bytes, respectivamente 0-249. Suponha-se cada segmento permite que pacotes 100de bytes de dados, de modo que o primeiro segmento do pacote 1para o 100número de sequência de bytes de estes bytes 0-99, o primeiro segmento será 0colocar nele No. parte de cabeçalho, e um segundo segmento encapsulado 100-199número de bytes, por isso, o seu número de série 100, e o terceiro segmento encapsulado 200-249número de bytes, por isso, o seu número de série 200. A descrição acima é TCPo método de processamento de um número do remetente.

  Vamos falar sobre TCPcomo isso funciona no mecanismo número do destinatário. De modo semelhante ao acima três exemplo de segmento, assumindo que o remetente envia a acima três segmentos, o primeiro receptor recebe um segmento, descobriram que o número de pacotes é 0, contém 100bytes de dados, então o receptor irá confirmar ao remetente que a mensagem foi recebida, eo reconhecimento é usar TCPo cabeçalho do número de reconhecimento de campo. Destinatário recebe o número de sequência 0, o comprimento de 100segmentos de byte, irá ACKpreencher o número de reconhecimento de sequência de pacote 100, disse que recebeu é menos do que o número 100de todos os bytes, os próximos pacotes recebidos desejados os números de grupo é 100; e os segundos segmentos de chegar fora de ordem, número de sequência 100, um comprimento 100de byte, em seguida, enviado de volta para o receptor ACKde mensagens, desta vez para o número de reconhecimento 200, disse que recebeu 200todos byte anterior, é desejável o próximo número de sequência da mensagem é 200; e o número sequencial recebido 200, o comprimento 50de volta segmento de bytes, o número de sequência de reconhecimento é enviada 250pacotes ACK.

  Estes são sequencialmente recebe o segmento, presume-se, no caso acima, a ordem de chegada dos pacotes é três 0 -> 200 -> 100, isto é, de reabastecimento, em seguida, ocorre o seguinte:

  1. Destinatário recebe o número 0, o comprimento dos 100bytes do segmento, o número de reconhecimento de auto-retorno 100da ACKmensagem;
  2. De receber um número de sequência 200, de um comprimento de 50segmentos de byte, em seguida, os desejos receptores para receber o 100número de pacotes chegam fora de ordem assim determinada situação ocorre, ela não fornece dados para a secção superior, mas em receber tamp;
  3. número sequencial recebido 100, o comprimento do 100segmento, 100ele está ansioso para os números de segmento destinatário recebeu, pelo que é recebido e entregues à camada superior, ao passo que o número de série é encontrada no buffer de recepção 200segmento, que é positiva o receptor está esperando a próxima mensagem é recebida, então retirado, a entrega superior, enquanto o remetente para enviar ACKa mensagem, ACKo número de sequência de confirmação 250indicando que receberam 250todos os bytes do anterior, a chegada próxima mensagem esperada o número é o texto 250;

  Através do mecanismo acima, o destinatário resolvido com sucesso o problema de dados que chegam fora de ordem. Claro, o uso deste mecanismo números, na verdade, mais do que simples, que envolve também o mecanismo de transporte gasoduto TCP, se você quer saber, pode se referir a meu outro post - https://www.cnblogs.com /tuyang1129/p/12450978.html .

  Há também um problema, no exemplo acima, eu assumo esse número é de 0início, mas não é o caso. Em uma implementação real, o número é geralmente calculado por um valor especial aleatório algoritmo, existem duas razões para isso:

  1. Suponha que cada TCPnúmero está conectado a partir do 0início, ele assume que o servidor Xianxiang cliente envia uma mensagem, não há nenhuma confirmação for recebida, imediatamente desconexão, mas depois de desligar, e eles imediatamente estabelecida uma conexão e neste momento, pela primeira vez enviou o segmento apenas alcançar o servidor, o que aconteceria. O servidor vai pensar que este é os dados enviados através da conexão seja estabelecida, e porque os dois números iniciais são conectados 0, o receptor vai colocar esta recepção segmento. A fim de reduzir a probabilidade de ocorrência de situações semelhantes, TCPo número de sequência inicial aleatória, de modo a que dois números de sequência inicial diferente ligado a uma grande probabilidade, em seguida, quando esta situação ocorre, o receptor não pode receber o segmento;
  2. A segunda razão é por razões de segurança, se os números iniciais são fixos, que cada segmento do número de série pode-se especular desenhada, por isso há hackers pode usá-lo para simular o remetente envia um pacote de TCP, fazer ataques, como o envio de um grande número de solicitações de conexão, ocupando os recursos do servidor;


 de controlo de fluxo de 2,5 TCP e de controlo do congestionamento

  controle e congestionamento controle de fluxo, estritamente falando, não é um TCPmecanismo de transporte confiável, mas, tipo de relacionamento, então eu mencionar.

  • O controle de fluxo: TCPreceber um tampão de receber Fangkuai Wei segurando para receber os dados enviados pelo emissor. No entanto, o buffer de recepção não é infinito, se a receber buffer é preenchido, o mais receber dados, neste momento, não será capaz de receber, ele só pode ser descartada. Assim, a fim de reduzir a ocorrência desta situação, TCPa necessidade destinatário a informar o remetente que ele pode até a quantidade de dados é recebido, TCPo remetente com base nesta informação, tem a opção de enviar os dados, que é o controle de fluxo;
  • controle de congestionamento: controle de fluxo e similares, mas não limitar a quantidade de dados é enviado ao destinatário, mas o roteador. Routers também receber tampão, se demasiado os dados estão presentes no tampão de recepção do router, também afecta a rede de transmissão, que é por isso que a taxa de perda de pacotes de rede e de controlo do congestionamento é para controlar a transmissão de dados de acordo com o estado de congestionamento da rede;

  Estes dois mecanismos, de controlo de fluxo é relativamente simples. Podemos ver que TCPno formato da mensagem, há uma seção chamada o tamanho da janela, que faz parte do receptor informa o remetente que ele pode apresentar um máximo de quanto os dados são recebidos, eo remetente irá enviar comprimento de dados é menor que o tamanho da janela . No entanto, não é um caso especial, se o tamanho da janela é 0, para a janela atual está cheio, o remetente não vai enviar dados em circunstâncias normais, mas, na realidade, o remetente ainda transmite um byte de dados para o lado de recepção, como um tipo de tentação. Porque o destinatário não costuma enviar a mensagem para o remetente, o tamanho da janela é geralmente realizado em ACKpacote, se o tamanho da janela é, neste momento 0, o remetente não envia dados, o destinatário não será capaz de enviar ao remetente ACKrelatório Wen, desta vez, mesmo se o cache é limpo, o remetente não sabe. Portanto, mesmo se o tamanho da janela 0, o remetente ainda precisa enviar dados, exploratório, se o cache foi liberado pela tentações mensagem ACKpacote, o remetente será capaz de saber.

  controle de congestionamento é TCPum mecanismo relativamente complexo, não poucas palavras para dizer claramente, essa parte eu especificamente escreveu um blog explicou, interessados podem ler sobre: https://www.cnblogs.com/tuyang1129 /p/12439862.html .


Em terceiro lugar, o resumo

  Para a TCPdescrição da transmissão confiável descrito aqui. O conteúdo de cima é TCPuma introdução básica para os princípios da transmissão de confiança, mas a implementação específica pode ser melhorada e optimizada sobre estas fundações. TCPUma variedade de mecanismos complementares, pois se TCPnão há muito para entender, pode haver algumas apresentações não entende, por isso, se você quiser realmente conhecer TCPo conhecimento relevante e outras redes de computador, recomenda-se comprar um estudo do livro sistematicamente. Espero que este blog ajuda as pessoas ver se o conteúdo do blog é errado, corrija-me esperança.


Em quarto lugar, a referência

  "Computer Network - abordagem top-down (sétima edição do livro original)"

Acho que você gosta

Origin www.cnblogs.com/tuyang1129/p/12458592.html
Recomendado
Clasificación