I. Introdução
Estes dias escreveu quatro TCP
sé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 TCP
aspectos 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 TCP
antes 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 IP
protocolo para enviar dados, enquanto o IP
protocolo é 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 1500
bytes. Portanto, TCP
a 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:
- Os dados são corrompidos durante a transmissão, os bits
0
para1
, ou1
em0
; - A perda de dados durante a transmissão não chegar a um destino;
- 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;
TCP
A 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 16
campo 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 TCP
da maneira é verificar o algoritmo de soma de verificação de dados, o processo do algoritmo é a seguinte:
- O campo de soma de verificação é definida
0
, em seguida, as partes de dados para16
bits como uma unidade, de divisão; - Depois de várias unidades dividir adição binária, se o resultado além dos primeiros transportar
17
os bits, os17
bits para o primeiro bit (de facto, do complemento e de cálculo de resultados, também conhecidos como rebobinagem), a final adicionou invertido (0
transformado em1
,1
torna-se0
), e depois para o campo de soma de verificação; - 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 é
0
que 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 é 1
a posição, é no anti-código 0
, eo resultado para 0
a 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 é, 0
a. 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 + 3
confiando 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 TCP
ainda 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
TCP
A solução é a perda de dados retransmissão tempo . TCP
Manterá um timer, e definindo um tempo limite, ao enviar um TCP
segmento 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 TCP
uso de uma transmissão gasoduto , ao mesmo tempo, pode haver mais foram enviados, mas não recebeu ACK
segmento, então logicamente falando, TCP
manter 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, TCP
na verdade, só vai manter um timer, o registro atual é o primeiro a ser enviado, mas ainda não recebeu ACK
pacotes segmento. Quando este segmento de tempo limite, o remetente irá retransmitir segmento, e reiniciar o temporizador; se o segmento recebeu do ACK
pacote, 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 TCP
a 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 à ACK
mensagem, a parcela 200ms
que 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 TCP
ele, um conjunto de algoritmos complexos para calcular o período de tempo limite.
Para calcular a RTT
média aproximada, é preciso primeiro ter o valor da amostra, assumindo amostra RTT definido SampleRTT
. TCP
Durante os procedimentos de operação, pode ser medido em qualquer momento SampleRTT
, isto é, uma medida do pacote enviado para o receptor a partir ACK
do tempo utilizado, em seguida, ele é usado para calcular RTT
a média ponderada. Em seguida, ao longo de um período de tempo mais uma vez, ea nova medida SampleRTT
para atualizar a média ponderada. Supondo que a média ponderada RTT
é definida como EstimatedRTT
na TCP
especificação, o cálculo EstimatedRTT
fórmula é:
EstimatedRTT = (1- α)*EstimatedRTT + α * SampleRTT
(A fórmula)
Em que SampleRTT
é a mais recente amostra medido RTT
pode ser determinada de forma dinâmica pela fórmula acima RTT
média ponderada. Devido à medida depois SampleRTT
, mais perto da rede na situação atual, então a atualização EstimatedRTT
processo, o mais recente SampleRTT
deveria ocupar mais peso, então na TCP
especificação, recomenda-se α
definir o valor 1/8
, então a fórmula é:
EstimatedRTT = 0.875 * EstimatedRTT + 0.125 * SampleRTT
E SampleRTT
a EstimatedRTT
flutuação da FIG segue:
Além de buscar RTT
a média ponderada das redes RTT
mudanças também são necessárias, afinal de contas, pode ser visto a partir da figura, a amostra RTT
flutuação é muito grave, única EstimatedRTT
, não o suficiente para nos fazer uma estimativa do tempo limite exato. Então, precisamos encontrar SampleRTT
o EstimatedRTT
grau de desvio, que é semelhante à variância , a variância para dinamicamente set timeout. Assumindo que a variância é definido como DevRTT
é TCP
definido 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 SampleRTT
variação for grande, DevRTT
uma grande valor será, e vice-versa será pequeno. Na TCP
especificação de β
valor recomendado é 0.25
. Sabemos agora que a RTT
média ponderada, mas também saber RTT
as flutuações, é hora de considerar como definir o tempo limite. Não é difícil de pensar, o tempo limite deve ser exigido do que RTT
a média ponderada, que é EstimatedRTT
maior, por isso que a maioria dos segmentos de RTT
menor 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 RTT
deve ser de EstimatedRTT
mais longe, embora menos volátil, o real RTT
deve 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
, TCP
especificaçã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 TCP
padrão recomendado inicial TimeoutInterval
para 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 doACK
pacote chega, o pacote remetente erro retransmitido é recebido corretamente, então um erro será detectadoSampleRTT
.
Em, curta TCP
o 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, TCP
existe 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, TCP
o maior dos dados deve ser dividido em segmentos de pacotes mais pequenos, encapsulados em TCP
segmentos, 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, TCP
deve haver um mecanismo para resolver este problema.
TCP
O método utilizado é o de que cada TCP
segmento é 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 TCP
podemos ver a estrutura de pacote figura, que tem um 32位
campo de número de sequência. No entanto, o TCP
nú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 . TCP
Os dados a serem transmitidos para cada byte de um dado número, tal como o primeiro byte de 0
número, o segundo é um 1
número, e assim por diante. E cada segmento é geralmente embalado mais do que um byte de dados, de modo que TCP
o 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 250
bytes de dados, supomos que o número de sequência inicial a partir 0
do início, então este 250
número de bytes, respectivamente 0-249
. Suponha-se cada segmento permite que pacotes 100
de bytes de dados, de modo que o primeiro segmento do pacote 1
para o 100
número de sequência de bytes de estes bytes 0-99
, o primeiro segmento será 0
colocar nele No. parte de cabeçalho, e um segundo segmento encapsulado 100-199
número de bytes, por isso, o seu número de série 100
, e o terceiro segmento encapsulado 200-249
número de bytes, por isso, o seu número de série 200
. A descrição acima é TCP
o método de processamento de um número do remetente.
Vamos falar sobre TCP
como 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 100
bytes de dados, então o receptor irá confirmar ao remetente que a mensagem foi recebida, eo reconhecimento é usar TCP
o cabeçalho do número de reconhecimento de campo. Destinatário recebe o número de sequência 0
, o comprimento de 100
segmentos de byte, irá ACK
preencher o número de reconhecimento de sequência de pacote 100
, disse que recebeu é menos do que o número 100
de 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 100
de byte, em seguida, enviado de volta para o receptor ACK
de mensagens, desta vez para o número de reconhecimento 200
, disse que recebeu 200
todos byte anterior, é desejável o próximo número de sequência da mensagem é 200
; e o número sequencial recebido 200
, o comprimento 50
de volta segmento de bytes, o número de sequência de reconhecimento é enviada 250
pacotes 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:
- Destinatário recebe o número
0
, o comprimento dos100
bytes do segmento, o número de reconhecimento de auto-retorno100
daACK
mensagem; - De receber um número de sequência
200
, de um comprimento de50
segmentos de byte, em seguida, os desejos receptores para receber o100
nú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; - número sequencial recebido
100
, o comprimento do100
segmento,100
ele 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ção200
segmento, que é positiva o receptor está esperando a próxima mensagem é recebida, então retirado, a entrega superior, enquanto o remetente para enviarACK
a mensagem,ACK
o número de sequência de confirmação250
indicando que receberam250
todos os bytes do anterior, a chegada próxima mensagem esperada o número é o texto250
;
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 0
iní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:
- Suponha que cada
TCP
número está conectado a partir do0
iní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 conectados0
, o receptor vai colocar esta recepção segmento. A fim de reduzir a probabilidade de ocorrência de situações semelhantes,TCP
o 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; - 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 TCP
mecanismo de transporte confiável, mas, tipo de relacionamento, então eu mencionar.
- O controle de fluxo:
TCP
receber 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,TCP
a necessidade destinatário a informar o remetente que ele pode até a quantidade de dados é recebido,TCP
o 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 TCP
no 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 ACK
pacote, 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 ACK
relató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 ACK
pacote, o remetente será capaz de saber.
controle de congestionamento é TCP
um 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 TCP
descrição da transmissão confiável descrito aqui. O conteúdo de cima é TCP
uma 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. TCP
Uma variedade de mecanismos complementares, pois se TCP
não há muito para entender, pode haver algumas apresentações não entende, por isso, se você quiser realmente conhecer TCP
o 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)"