Introdução da camada de transporte

Com o aprendizado da camada de rede IP, sabemos que o protocolo IP pode enviar os pacotes enviados pelo host de origem A para o host de destino B de acordo com o endereço de destino no cabeçalho. Então, por que precisamos de uma camada de transporte?
Na camada IP, as duas extremidades da comunicação são dois hosts, geralmente chamados de comunicação ponto a ponto . Mas a verdadeira entidade de comunicação na rede de computadores é o processo em execução no computador host e é a interação dos dados. Portanto, a camada de rede IP entrega apenas o pacote ao host, mas não o entrega ao processo de comunicação real, portanto, a camada de transporte é necessária para indicar que o pacote de dados recebido da rede deve ser entregue ao processo. Isso geralmente é chamado de comunicação de ponta a ponta .
Como o host pode estar executando vários aplicativos de rede ao mesmo tempo, é necessário que a camada de transporte seja capaz de distinguir os pacotes da camada de rede que devem ser entregues a esse aplicativo. No momento, é necessário um sinal para indicar que ele é entregue a um aplicativo e o número da porta é usado para identificação na rede de computadores . Vários processos de aplicativos podem usar o protocolo da camada de transporte para transmitir dados, ou seja, a camada de transporte possui funções de multiplexação e, depois de remover o cabeçalho do pacote após receber o pacote, os dados podem ser entregues corretamente ao processo de aplicação de destino, portanto, a camada de transporte Ele também deve ter uma função de desmultiplexação . A figura a seguir é o processo de entrega de informações entre processos em dois hosts.
Insira a descrição da imagem aqui
A camada de transporte no TCP / IP usa um número de porta de 16 bits para marcar uma porta.O número da porta é dividido em: número da porta do sistema (0-1023), número da porta de registro (1024-49151), número da porta usada pelo usuário final (49152-65535 ) A seguir, são comumente usados ​​números de porta conhecidos:
Insira a descrição da imagem aqui
onde a camada de transporte fornece comunicação lógica entre os processos do aplicativo.A comunicação lógica refere-se a: a camada do aplicativo precisa apenas entregar pacotes de aplicativos para a seguinte camada de transporte e a camada de transporte pode transmitir esses pacotes para A camada de transporte da outra parte parece comunicar dados diretamente na direção horizontal. Mas, de fato, não há conexão física horizontal entre as duas camadas de transporte.
A camada de transporte protege os usuários de alto nível dos detalhes do núcleo da rede abaixo e faz com que o processo de aplicação veja como se houvesse um canal de comunicação lógica de ponta a ponta entre as duas entidades da camada de transporte . A camada de transporte precisa verificar as mensagens recebidas quanto a erros. Quando o pacote IP chega ao host de destino e é entregue na camada superior, se for constatado que o número da porta está incorreto (ou seja, não há processo dessa porta), ele enviará uma mensagem de controle de erro "porta inacessível" ao remetente.
Os dois principais protocolos na camada de transporte: User Datagram Protocol UDP e Transmission Control Protocol .

Protocolo UDP

Principais características do UDP :

  • O UDP não possui conexão, ou seja, não há necessidade de estabelecer uma conexão antes de enviar dados
  • O UDP utiliza o melhor esforço de entrega, o que não garante a entrega confiável
  • UDP éOrientado a mensagensOu seja, a mensagem UDP enviada pelo remetente ao aplicativo é entregue à camada IP após a adição do cabeçalho (a mensagem não é mesclada nem dividida)
  • O UDP não possui controle de congestionamento, ou seja, a presença de congestionamento na rede não reduzirá a taxa de envio do host de origem
  • O UDP suporta comunicação interativa um para um, um para muitos, muitos para um e muitos para muitos
  • UDP cabeçalho sobrecarga é pequeno, apenas oito bytes
    UDP maiores vantagens é a sua elevada em tempo real e simples , formato de cabeçalho UDP como mostrado abaixo:
    Insira a descrição da imagem aqui
  • O pseudo cabeçalho não é o cabeçalho real do datagrama do usuário UDP, é usado apenas para cálculo e verificação e não é enviado para cima ou para baixo.
  • O número da porta é usado para marcar o processo de comunicação
  • Length: o comprimento de todo o datagrama do usuário
  • Soma de verificação: verifique todo o datagrama do usuário .

Protocolo TCP

Principais características do TCP

  • O TCP é um protocolo da camada de transporte orientado a conexão, ou seja, um aplicativo deve estabelecer uma conexão TCP antes de usar o protocolo TCP Após transmitir dados, a conexão TCP estabelecida deve ser liberada.
  • Cada conexão TCP pode ter apenas dois pontos de extremidade e cada conexão TCP pode ser ponto a ponto .
  • TCP fornece serviços de entrega confiáveis
  • O TCP é orientado a bytes . Na comunicação TCP, o número de bytes que um pacote deve conter é determinado com base no valor da janela fornecido pela outra parte e no grau atual de congestionamento da rede .
    Cada conexão TCP possui dois pontos de extremidade; então, qual é o ponto de extremidade da conexão TCP? O ponto final de uma conexão TCP é chamado de soquete ou soquete. O soquete é emendado do número da porta para o endereço IP. No Linux, os protocolos TCP e UDP usam soquetes para comunicação.

Formato do cabeçalho do segmento TCP

Insira a descrição da imagem aqui
Cabeçalho do segmento TCPOs primeiros 20 bytes são corrigidos, Os próximos 4N bytes são opções adicionadas de acordo com as necessidades. A seguir, é apresentado brevemente o significado de cada campo.

  • Número da porta: escreva a porta de origem e a porta de destino separadamente, usadas para marcar o tipo de aplicativo da camada superior.
  • Número de sequência: o número de sequência é calculado usando o mod 2 32. O valor do campo de número de sequência no cabeçalho refere-se ao número de sequência do primeiro byte dos dados enviados neste segmento . O TCP é orientado a bytes. Cada byte no fluxo de bytes transmitido em uma conexão TCP é numerado em sequência.O número de sequência inicial de todo o fluxo de bytes a ser transmitido deve ser definido quando a conexão é estabelecida.
  • Número de confirmação:Espere receber o número de sequência do primeiro byte de dados do próximo segmento da outra parte
  • Deslocamento de dados: indica a que distância o início dos dados do segmento TCP está desde o início do segmento TCP. Esse é o comprimento do cabeçalho do pacote TCP .
  • URG de emergência: Quando URG = 1, indica que o campo do ponteiro de emergência é válido. Diz ao sistema que existem dados urgentes nesse segmento, que devem ser transmitidos o mais rápido possível . O remetente insere os dados de emergência na frente dos dados da mensagem e os dados após os dados de emergência ainda são dados comuns. No momento, ele deve ser usado em conjunto com o campo do ponteiro de emergência no cabeçalho.
  • Confirmar confirmação: o campo do número de confirmação é válido apenas quando ACK = 1, caso contrário, o número de confirmação é inválido. O TCP estipula que todos os segmentos transmitidos devem definir ACK após a conexão ser estabelecida.
  • Push PUH: o TCP usa a operação push push. Nesse momento, o remetente define PSH como 1 e cria imediatamente um segmento para enviar. Da mesma forma, o destinatário entrega o processo de recebimento do aplicativo o mais rápido possível após o recebimento do segmento PSH = 1. Em vez de esperar que o cache inteiro seja preenchido antes de entregá-lo para cima.
  • Redefinir RST: RST = 1, indicando que ocorreu um erro grave na conexão TCP, a conexão deve ser liberada e, em seguida, restabeleça a conexão de transporte. Este campo também é usado para rejeitar um segmento ilegal ou se recusar a abrir uma conexão.
  • SYN síncrono: usado para sincronizar o número de série quando a conexão é estabelecida. Quando SYN = 1, ACK = 0, indica que este é um segmento de solicitação de conexão. Se você concordar em estabelecer uma conexão, SYN = 1 e ACK = 1 no segmento de resposta.
  • Finalizar FIN: É usado para liberar uma conexão.Quando FIN = 1, indica que os dados do remetente deste segmento foram enviados e solicita a liberação da conexão de transporte.
  • Janela: a janela refere-se à janela de recebimento da parte que está enviando este segmento. O valor da janela informa à parte oposta a quantidade de dados (em bytes) que o destinatário atualmente permite que a outra parte envie a partir do número de confirmação no cabeçalho deste segmento.
  • Soma de verificação: o escopo da verificação de soma de verificação é a mensagem TCP inteira (ou seja, incluindo o cabeçalho e os dados). Semelhante ao UDP, um pseudo cabeçalho de 12 bytes precisa ser adicionado .
  • Ponteiro urgente: Este campo é significativo apenas quando URG = 1. Indica o número de bytes de dados urgentes nesse segmento ( dados normais após o final dos dados urgentes ).Observe que os dados de emergência podem ser enviados mesmo quando a janela é zero
  • Opções: comprimento variável, até 40 bytes. Existem MSS com comprimento máximo de segmento de mensagem, expansão de janela, registro de data e hora, confirmação de seleção e outras opções.

Gerenciamento de conexões de transporte TCP

O TCP é um protocolo orientado a conexões e as conexões de transporte são usadas para transmitir mensagens TCP. Há três estágios no processo de transporte TCP e na interação do circuito, a saber, estabelecimento de conexão, transmissão de dados e liberação de conexão. O orientado à conexão refere-se à comunicação TCP, cada canal TCP pode conectar apenas duas portas; durante o processo de comunicação, essas duas portas (incluindo os recursos correspondentes: bloco de controle de transmissão TCB) foram atribuídas ao processo de comunicação Use, outros aplicativos não podem ser usados . Corrigido aqui, ainda existem alguns mal-entendidos sobre o entendimento orientado à conexão anterior.Orientado a conexão significa que o TCP precisa estabelecer uma conexão antes de transmitir dados, determinar o número de série de ambas as partes e similares. Na transmissão subsequente, esses valores são necessários para julgar se a transmissão é bem-sucedida. O bloco de controle de transmissão TCB mencionado anteriormente não é o ponto: toda vez que um kernel de conexão é estabelecido, ele aloca alguns recursos para o aplicativo.. Agora, o entendimento é assim: se o leitor tiver um entendimento melhor, por favor me corrija.

Estabelecer uma conexão

O TCP usa um handshake de três vias para estabelecer uma conexão.Os seguintes problemas precisam ser resolvidos durante o processo de estabelecimento da conexão:

  • Para permitir que cada parte saiba a existência da outra parte
  • Permita que ambas as partes negociem alguns parâmetros (como número de série, valor máximo da janela, se deseja usar opções etc.)
  • O processo de alocação de
    handshake (tamanho do buffer) para os recursos da entidade de transporte é o seguinte: A conexão é estabelecida usando o campo SYN.O TCP exige que o segmento SYN não possa transportar dados, mas consome um número de sequência.O segmento ACK pode transportar dados, mas se não transportar dados Nenhum número de série é consumido. Observe que o segundo handshake também pode ser dividido em dois segmentos, primeiro envie um pacote de confirmação (ou seja, ACK = 1, ack = x + 1) e depois envie um segmento de sincronização (SYN = 1, seq = y ) Esse processo se torna um aperto de mão de quatro pacotes com o mesmo efeito. O ACK acima é o campo de cabeçalho ACK e ack é o número de confirmação.
    Insira a descrição da imagem aqui
    Depois que B retorna os dados para A., isso pode indicar que AB existe. Por que A precisa finalmente enviar uma confirmação?Isso é principalmente para impedir que a mensagem de solicitação de conexão inválida seja enviada repentinamente para B, o que causa um erro. Por exemplo, a primeira mensagem de solicitação de conexão enviada por A permanece por um longo tempo em um nó da rede, e A não recebe a mensagem de confirmação e continua a enviar uma solicitação de conexão.Comunicação normal ... libere a conexão. Depois que a conexão foi liberada, a solicitação que ficou presa na rede por um longo tempo foi enviada para B. Isso ocorre porque B erroneamente pensou que A enviou uma nova solicitação de conexão, então ele enviou um segmento de confirmação A para A e concordou em estabelecer uma conexão. Se o terceiro handshake de mensagem não for usado, depois que B enviar uma confirmação, uma nova conexão será estabelecida. No momento, B acha que uma nova conexão de transporte foi estabelecida e estava aguardando o envio de dados por A. Muitos recursos de B são desperdiçados. Usando esse recurso, ele pode causar um ataque ao servidor. Muitos hosts enviam solicitações SYN ao servidor apenas uma vez e, em seguida, encerram o processo. O servidor sempre espera pela resposta de A. e desperdiça recursos. Cada escuta na meia tem um comprimento de fila. , Será descartado se exceder. Portanto, uma solicitação normal não pode ser estabelecida. Isso geralmente é chamado de ataque SYN .

Liberação de conexão TCP

O bit de controle de terminação FIN no cabeçalho do segmento de conexão de envio / liberação deve ser definido como 1 e o mesmo TCP estipula que o segmento FIN consome um número de sequência, mesmo que não transporte dados .
Insira a descrição da imagem aqui
O processo é:

  • O processo de aplicação de A envia primeiro um segmento de mensagem de liberação de conexão para o TCP, para de enviar dados e fecha ativamente a conexão TCP. Envie a mensagem (FIN está definido como 1, seq = u, u é o número de sequência do último byte dos dados transmitidos anteriormente mais 1), insira o estado FIN-WAIT-1, aguardando a confirmação de B.
  • Após receber a mensagem de liberação da conexão, B envia uma confirmação (ACK = 1, seq = u, ack = u + 1) e entra no estado CLOSE-WAIT. O processo do servidor TCP deve informar o processo de aplicativo de alto nível neste momento que a conexão de A a B. Nesse momento, a conexão TCP está em um estado semi-fechado.
  • Depois de receber a confirmação de B, A entra no estado FIN-WAIT-2 e aguarda a mensagem de liberação da conexão de B.
  • Se B não tiver dados para enviar para A, seu processo de aplicativo notificará o TCP para liberar a conexão. Nesse momento, B envia uma mensagem de liberação e B entra no estado LAST-ACK, aguardando a confirmação de A.
  • Após receber o segmento de mensagem de liberação da conexão B, A deve confirmar isso, enviar a mensagem e entrar no estado TIME-WAIT. Observe que a conexão TCP ainda não foi liberada e o tempo deve aguardar o tempo definido pelo temporizador 2MSL antes de A entrar no estado CLOSE. Cada vez que um ACK é emitido, o temporizador de espera é redefinido.
  • B entra imediatamente no estado CLOSE após receber a confirmação de A.
    Por que A tem que esperar 2MSL no estado TIME-WAIT?
    Para garantir que a última mensagem ACK enviada por A possa chegar a BEste ACK pode ser perdido. B não retransmitirá a mensagem FIN se não receber a confirmação da mensagem ACK dentro do tempo correspondente.B precisa retransmitir a confirmação dentro desse tempo de espera. Caso contrário, B não pode entrar no estado CLOSE.Além disso, ele pode impedir que o segmento de solicitação de conexão inválido mencionado no handshake de três vias apareça nesta conexãoComo após 2MSL, todos os segmentos gerados durante a duração dessa conexão desaparecerão da rede.
    Após liberar a conexão, a AB cancelará o bloco de controle de transmissão TCB correspondente. A vida útil mais longa do segmento de mensagens MSL acima é basicamente definida como 2 minutos. Além do cronômetro de tempo de espera no protocolo TCP , também existe um cronômetro de manutenção , usado para impedir o mau funcionamento do dispositivo e não se comunicar normalmente durante o processo de comunicação, fazendo com que o terminal receptor espere e desperdice recursos. O timer de manutenção de funcionamento geralmente é definido como 2 horas. Se nenhum datagrama for recebido dentro de 2 horas, um segmento de sonda será enviado. A cada 75 segundos, se ainda não houver respostas após o envio contínuo de 10 segmentos de sonda, Em seguida, feche a conexão diretamente.

Como a transmissão confiável de TCP funciona

Sabemos que os pacotes enviados pelo TCP são entregues à camada IP para transmissão, mas a camada IP só pode fornecer serviços de melhor esforço, portanto, o TCP deve tomar as medidas apropriadas para tornar a comunicação entre as duas camadas de transporte confiável. O mecanismo de confirmação e retransmissão usado aqui também é chamado de solicitação de retransmissão automática ARQ

  • Protocolo de parada de espera O protocolo de
    parada de espera é parar o envio toda vez que um pacote é enviado, aguardar a confirmação da outra parte e enviar o próximo pacote depois de receber a confirmação. O remetente define um cronômetro de tempo limite após o envio de um pacote e, após expirar, reenvia o último pacote enviado. Antes de receber a confirmação da outra parte antes que o cronômetro expire, o cronômetro de tempo limite definido é cancelado. Protocolos de transmissão confiáveis ​​como esse geralmente são chamados de protocolos de solicitação de retransmissão automática e ARQ
    Insira a descrição da imagem aqui
    para de aguardar.As vantagens são simples, mas a desvantagem é que a taxa de utilização do canal é muito baixa. Para melhorar a eficiência da transmissão, o remetente pode usar a transmissão do pipeline em vez do protocolo ineficiente de interrupção e espera . Ou seja, o remetente pode enviar vários pacotes sucessivamente, sem ter que fazer uma pausa toda vez que um pacote é enviado e aguardar a confirmação da outra parte. Como mostrado na figura a seguir:
    Insira a descrição da imagem aqui
    Este é o protocolo ARQ contínuo.O remetente mantém a janela de envio e, em seguida, move a janela de envio em um pacote depois de receber a confirmação do pacote. O receptor geralmente adota o método de reconhecimento cumulativo.Depois de receber vários pacotes, ele envia um reconhecimento ao último pacote que chega em sequência .

No protocolo TCP, existem muitos mecanismos para garantir a operação estável dos dados, o mais importante dos quais é o controle da janela deslizante . Semelhante à transmissão de pipeline descrita acima, os pacotes de dados são enviados continuamente quando as condições o permitem. O destinatário informará ao remetente o status do buffer (tamanho da porta) do destinatário e o remetente envia dados ao destinatário de acordo com a janela.
Na comunicação de rede, a camada de aplicativo entrega os dados que precisam ser enviados para a camada de transporte e, em seguida, lida com outras coisas.Como o TCP é orientado à transmissão de fluxo de bytes, quando o cache TCP receberá os dados da camada de aplicativo quando forem enviados O que?
Existem três oportunidades de envio de TCP: TCP mantém uma variável, que é igual ao tamanho máximo do segmento de mensagem, quando os dados armazenados no buffer atingem o byte MSS, eles são enviados; PUCH push, usado para dados que precisam de processamento urgente, o TCP recebe PUSH da camada de aplicação Após a instrução, o segmento da mensagem é enviado imediatamente; o TCP inicia o cronômetro e o cronômetro é enviado quando o tempo acabar.
O controle de fluxo na comunicação TCP é permitir que o remetente envie a taxa não muito rápido, mas permita que o destinatário tenha tempo para receber. De fato, é controlar o tamanho da janela. Então, para tornar o TCP mais eficiente, o algoritmo Nagle é frequentemente usado para enviar os dados recebidos no cache primeiro, depois de receber o reconhecimento, depois enviar todos os dados no cache e continuar aguardando a confirmação do recebimento ... Se os dados em buffer atingirem metade do tamanho da janela de transmissão ou o comprimento máximo do segmento de mensagem, um segmento de mensagem será enviado imediatamente. O receptor também é o mesmo, o receptor tem espaço suficiente para acomodar um segmento mais longo ou aguarde até que o buffer de recebimento tenha metade do espaço livre . O destinatário enviará uma mensagem de confirmação.
No controle de fluxo, existe um cronômetro de duração de janela zero, desde que a parte receptora do TCP receba a notificação da janela zero da outra parte, ele inicia o cronômetro de duração e o tempo expira. Basta enviar um segmento de mensagem de detecção de janela zero, para que o impasse possa ser quebrado (o remetente estava aguardando uma mensagem de janela diferente de zero, mas esta mensagem é perdida). O
mecanismo de controle de congestionamento TCP é semelhante à implementação do controle de fluxo.Quando o tráfego na rede é muito grande, a taxa de envio de dados será controlada pela janela, reduzindo assim o grau de congestionamento. Mas congestionamento e controle de fluxo não são um conceito.

Publicado 35 artigos originais · Gosto1 · Visitas 1870

Acho que você gosta

Origin blog.csdn.net/lzj_linux188/article/details/104500164
Recomendado
Clasificación