Programação de sistema Linux C (13) Programação de rede protocolo TCP e UDP

1 Introdução aos conceitos básicos de redes de computadores

1.1 Introdução à arquitetura de redes de computadores

A arquitetura da rede de computadores é implementada de acordo com um método de design altamente estruturado, usando o princípio em camadas. As vantagens das camadas são: boa flexibilidade, fácil manutenção e implementação, propícias à colaboração entre várias camadas e padronização.

Dois padrões para redes de computadores:

  1. OSI / RM (Open_Systems_Interconnection_Reference_Model): Um padrão internacional que foi alcançado em teoria. As sete camadas da arquitetura OSI: camada de aplicativo, camada de apresentação, camada de sessão, camada de transporte, camada de rede, camada de enlace de dados e camada física.
  2. TCP / IP: padrão internacional na prática. Ou seja, o padrão TCP / IP é adotado na realidade. As quatro camadas da arquitetura TCP / IP: camada de aplicativo, camada de aplicativo, camada de transporte, IP da camada da Internet e camada de interface de rede.

1.2 Introdução ao modelo TCP / IP

  • Camada de interface de rede: responsável pela recepção e transmissão de datagramas IP; responsável pelo protocolo da camada de interface de rede.
  • IP da camada da Internet: roteamento, controle de fluxo e controle de congestionamento; protocolo da camada de rede para fornecer serviços sem conexão.
  • Camada de transporte: estabeleça uma conexão ponta a ponta; execute os protocolos TCP e UDP.
  • Camada de aplicação: protocolo para executar a comunicação entre processos; processamento de dados.

1.3 Serviços orientados a conexão e serviços sem conexão

Os tipos de serviços são divididos em duas categorias: serviços orientados a conexão e serviços orientados a conexão.

  1. Serviços orientados a conexão: Antes de transmitir dados, uma conexão deve ser estabelecida e, quando a transmissão de dados estiver concluída, a conexão será liberada. É caracterizado por três processos: estabelecimento da conexão, transmissão de dados e liberação da conexão; cada pacote de dados carrega o IP de origem e o IP de destino dos dados do pacote; a transmissão é confiável, mas o protocolo é mais complicado.
  2. Serviço sem conexão: nenhum estabelecimento ou liberação de conexão é necessário durante a comunicação. A característica é que não há necessidade de estabelecer um processo de conexão, transmissão de dados e liberação de conexão; a transmissão não é confiável, mas o protocolo é relativamente simples.

2 Introdução ao CS (cliente / servidor)

Na rede TCP / IP, a comunicação do processo entre os dois hosts adota o modo CS, onde o cliente e o servidor se referem ao processo. A descrição do cliente e servidor é a seguinte:

@ 1 cliente: a parte que iniciou a solicitação de conexão primeiro. O processo do cliente é o seguinte:

//1 运行一个客户进程,向服务器特定端口发送请求连接报文;
//2 等待并接收服务器的应答;
//3 继续提出请求;
//4 通信结束后关闭通信通道。

@ 2 server: a parte que aceita a solicitação e fornece o serviço. O processo do lado do servidor é o seguinte:

//1 开启服务器进程;
//2 loop:等待并检测客户/下一个客户的连接请求;
//3     如果接收到客户的连接请求,则处理该请求;
//4     goto loop

3 Protocolo de datagrama de usuário UDP (User Data Protocal)

3.1 Formato de datagrama do usuário

Datagrama de usuário O UDP possui dois campos: campo de cabeçalho (pseudo cabeçalho de datagrama de usuário + cabeçalho de datagrama de usuário) e campo de dados.

@ 1 O formato do pseudo cabeçalho do datagrama do usuário é mostrado na figura:

Entre eles:

  • Endereço IP de origem: 4 bytes, usado para marcar o endereço IP do final do envio.
  • Endereço IP de destino: 4 bytes, usado para marcar o endereço IP da extremidade receptora.
  • 0: 1 byte, indicando bits de preenchimento.
  • Protocolo: 1 byte, o número do protocolo UDP é 17.
  • Comprimento do datagrama UDP: 2 bytes.

@ 2 O cabeçalho do relatório de dados do usuário é mostrado na figura:

Entre eles:

  • Número da porta de origem: o número da porta de origem usado para marcar o datagrama.
  • Número da porta de destino: o número da porta de destino usado para marcar o datagrama.
  • Comprimento do datagrama UDP: contém o comprimento do cabeçalho do datagrama + o comprimento da parte dos dados.
  • Campo Checksum: evita erros de datagrama do usuário durante a transmissão.

Nota: O pseudo cabeçalho do datagrama do usuário é uma estrutura de dados virtual, usada principalmente para calcular a soma de verificação e conectar-se aos dados do usuário UDP para obter um datagrama temporário para calcular a soma de verificação do datagrama do usuário UDP.

3.2 Inspeção e cálculo do datagrama do usuário

A soma de verificação do datagrama UDP é calculada duas vezes, uma na extremidade de envio e outra na extremidade de recebimento. (Código inverso + código-fonte = 0x11111111 ... usado aqui)

  1. No final do envio: defina o campo de soma de verificação no cabeçalho do datagrama UDP para 0; considere o pseudo cabeçalho e o datagrama do usuário UDP conectados por várias cadeias 16b (se a parte de dados do datagrama do usuário não for igual Bytes, você precisa adicionar um byte de todos os 0s, ou seja, os últimos 16b são todos os 0s e esse 16b se refere ao bit inferior), calcule a soma desses 16b de acordo com o código binário inverso; finalmente, inverta esse número, o resultado Essa é a soma de verificação do primeiro byte do datagrama enviado.
  2. No final do recebimento: o datagrama do usuário UDP recebido junto com o pseudo cabeçalho (e possível preenchimento de todos os 0 bytes) e a soma dessas palavras de 16 bits em inverso binário. Quando não há erros, o resultado deve ser 1. Caso contrário, indica que ocorreu um erro, e o terminal receptor deve descartar esse datagrama de usuário UDP (ele também pode ser entregue à camada de aplicativo, mas com um aviso de erro).

3.3 Características e usos de datagramas de usuário UDP

Recursos de datagramas de usuário UDP:

  1. Para protocolos sem conexão, nenhuma conexão é estabelecida antes da transferência dos dados.
  2. A confiabilidade da entrega não é garantida, apenas o melhor esforço de entrega.

Embora o UDP seja um protocolo não confiável, ele possui grandes vantagens na transmissão de certos aspectos dos dados.Os aplicativos do UDP são os seguintes:

  1. Conversão de nome de domínio
  2. Protocolo de link
  3. Gerenciamento de rede
  4. Serviço de arquivo remoto
  5. Telefone IP

4 Protocolo de controle de transmissão TCP (Protocal Control Transmission)

4.1 Introdução ao TCP

O TCP fornece serviços orientados a conexão e é um canal full-duplex confiável. Comparado com o UDP, o protocolo TCP é mais complexo, mas também é mais confiável, principalmente porque a conexão é orientada e os números TCP e confirma os dados transmitidos.

4.2 Cabeçalho do segmento TCP

O segmento de mensagem TCP também é dividido em duas partes: cabeçalho e dados.O formato do cabeçalho é mostrado na figura:

Entre eles:

  • Número da porta de origem: o número da porta de origem usado para marcar o datagrama.
  • Número da porta de destino: o número da porta de destino usado para marcar o datagrama.
  • Número de sequência: o número de sequência do primeiro byte nos dados enviados neste segmento.
  • Confirmar número de sequência: o número de sequência do primeiro byte dos próximos dados do segmento.
  • Deslocamento de dados: ocupa 4 bits, a unidade de deslocamento é de 4 bytes; portanto, o deslocamento máximo que pode ser expresso é de 60 bytes.
  • Reservado: o valor é 0.
  • 6 bits.
  • Janela: usada para controlar a quantidade de informações enviadas pela outra parte, a unidade é byte, usada principalmente no controle de fluxo e controle de congestionamento.
  • Soma de verificação: o método de soma de verificação é o mesmo que UDP, apenas o número do protocolo é diferente.
  • Opcional: Usado para lidar com algumas situações especiais. O campo de opção usado atualmente pode ser usado para definir o tamanho máximo do pacote no processo de comunicação e só pode ser usado quando a conexão for estabelecida.
  • Preenchimento: usado para preencher o segmento de pacote TCP, o conteúdo do preenchimento deve ser 0; usado para garantir que a opção seja um múltiplo inteiro de 32b.  

Os 6 bits a seguir são explicados em detalhes aqui:

  1. URG de bit urgente: quando URG é 1, indica que há dados urgentes na mensagem e devem ser transmitidos o mais rápido possível, em vez de estar de acordo com a sequência de enfileiramento original.
  2. Bit de confirmação ACK: usado ao estabelecer uma conexão; o sinalizador de confirmação no cabeçalho do pacote TCP confirma a mensagem TCP recebida.
  3. Bit PSH de envio: Quando PSH é 1, o remetente enviará a mensagem o mais rápido possível e, quando o receptor receber a mensagem com o bit de envio 1, ele será retirado do buffer de recebimento o mais rápido possível e entregue ao processo de aplicação.
  4. Reset bit RST: Quando RST é 1, indica que ocorreu um erro grave na conexão TCP, a conexão deve ser liberada e, em seguida, restabelecida.
  5. Bit de sincronização SYN: usado para sincronizar o número de sequência ao estabelecer uma conexão.
  6. Bit de finalização FIN: usado para liberar uma conexão. Quando FIN é 1, indica que os dados na extremidade de envio deste segmento foram enviados e a conexão deve ser liberada; FIN = 0 é inválido.

4.3 Número e confirmação de dados TCP

A razão pela qual o TCP pode obter uma transmissão de dados confiável é através da rotulagem e confirmação dos dados.

  1. O valor do número de sequência no cabeçalho do segmento enviado pelo TCP sempre indica o número de sequência do primeiro byte na parte de dados do segmento (como o número de sequência no cabeçalho do segmento TCP ocupa 4 bytes, pode marcar 4G Bytes de dados), para transmissão geral de dados, ele pode garantir que o número de sequência de cada byte não se sobreponha ao número de sequência de outros bytes.
  2. Confirmação de dados TCP: confirme o número de sequência do último byte nos dados que foram recebidos com sucesso.
  3. O número de sequência de confirmação retornado pelo final de recebimento: o final de recebimento espera o valor do número de sequência do primeiro byte nos próximos dados recebidos (esse valor deve ser igual ao número de sequência do último byte dos dados que foram recebidos corretamente + 1).

O relacionamento entre a sequência de envio e a sequência de recebimento é mostrado na figura:

4.4 Controle de fluxo TCP e gerenciamento de congestionamentos

O protocolo TCP geralmente usa janela deslizante de tamanho variável para controle de fluxo.

  1. Enviar janela: o número máximo de bytes que o remetente pode enviar dados por vez durante a comunicação de dados.O valor do campo da janela no início do segmento TCP é o tamanho da janela atual.
  2. Janela de recebimento: ajuste dinamicamente o tamanho da janela de envio da outra parte de acordo com a situação real durante a comunicação de dados.

Durante a comunicação TCP, o fim do envio mantém um ponteiro que aponta para os próximos dados a serem enviados. Cada vez que o remetente envia uma mensagem, o ponteiro avança pela distância de um segmento da mensagem. O movimento da janela de envio é realizado após o final do envio receber a confirmação do final de recebimento, e o segmento de pacote enviado pelo final do envio sempre que não for maior que o tamanho da janela de envio. A janela deslizante descreve essencialmente o tamanho do buffer de datagrama TCP do receptor e o remetente calcula o comprimento máximo dos dados que podem ser enviados com base nesses dados. Se o remetente receber um datagrama TCP com um tamanho de janela 0 no receptor, ele interromperá o envio de dados até que ele envie um datagrama com um tamanho de janela diferente de 0.
Controle de fluxo variável da janela:

  1. Janela de notificação: o tamanho da janela definida pelo final do recebimento de acordo com a capacidade de receber segmentos TCP naquele momento.
  2. Janela de congestionamento: o tamanho da janela definida pelo remetente de acordo com o congestionamento da rede. (Quanto maior a janela de congestionamento, maior a quantidade de dados que podem ser enviados)

Em circunstâncias normais, o valor da janela de envio é MIN (janela de notificação, janela de congestionamento) Durante o processo de transmissão de dados, o fluxo pode ser controlado alterando a janela. (O controle de fluxo pode não apenas permitir que o destinatário receba tempo suficiente para receber e processar dados, mas também impedir que a rede bloqueie.) O processo de uso de janelas variáveis ​​para controle de fluxo é mostrado na figura:

4.5 Gerenciamento de conexões de transporte TCP

O método de estabelecimento da conexão TCP é o handshake de três vias e o método de desconexão é de quatro wave-hands.Os dois mecanismos são descritos a seguir:

@ 1 O processo de handshake de três direções é mostrado na figura:

A descrição do processo é a seguinte:

  1. O cliente envia um SYN para o servidor e aguarda o servidor enviar uma mensagem de confirmação.
  2. O servidor envia um SYN e ACK ao cliente para confirmar que recebeu a mensagem do cliente.
  3. Depois que o cliente recebe a mensagem de confirmação do servidor, ele retorna um ACK ao servidor e, em seguida, uma conexão confiável pode ser estabelecida com o servidor.

Quatro ondas: Como a conexão TCP / IP é full-duplex, cada direção deve ser fechada individualmente. O processo de acenar quatro vezes é mostrado na figura:
 

A descrição do processo é a seguinte:

  1. Depois que o cliente envia dados para o servidor, ele define FIN como 1 e informa que fecharei a conexão de dados nessa direção.
  2. Depois de receber o FIN, o servidor fecha a conexão de dados nessa direção. Defina ACK como 1 para informar ao cliente que as informações do cliente foram recebidas e processadas.
  3. Ao mesmo tempo, o servidor aplica ao cliente para desconectar a conexão de dados na direção oposta. Defina FIN como 1.
  4. O cliente recebe o aplicativo do servidor, define ACK como 1 e ambas as partes fecham a conexão ao mesmo tempo.
Publicado 289 artigos originais · elogiou 47 · 30.000+ visualizações

Acho que você gosta

Origin blog.csdn.net/vviccc/article/details/105172478
Recomendado
Clasificación