Por que um cliente UDP envia uma velocidade de 1Gbit para um servidor de 100 Mbits?

0

Acabei de descobrir que em um aplicativo cliente / servidor UDP simples que escrevi no userspace do Linux, o cliente UDP (interface Ethernet de 1 Gbit) envia os dados com velocidade de 1 Gbit para um servidor UDP que tem apenas 100 Mbit Interface Ethernet. Claro que isso leva a uma perda maciça de pacotes no lado do servidor.

Eu preciso ajustar as configurações da NIC fazendo isso no lado do cliente:

ethtool -s eth0 velocidade 100 full autoneg duplex em

Por que eu tenho que fazer isso? Não deve ser tratado automaticamente?

    
por JohnnyFromBF 21.01.2018 / 17:06

3 respostas

3

UDP é um transporte de “ignorar e esquecer”, por isso não importa o que acontece com os pacotes uma vez eles são enviados. Isso significa que você pode enviar a taxa de saída do sistema de origem, independentemente das características do caminho até o destino; obviamente, isso leva à perda de pacotes se a interface de origem puder enviar pacotes mais rapidamente do que a rede pode suportar.

Se você precisar que isso seja tratado automaticamente, será necessário alternar para TCP ou SCTP. Alternativamente, você pode construir seu próprio protocolo de tratamento de erros sobre o UDP ...

No seu caso específico, se você puder confiar 100Mbits / s no destino, seria melhor usar o traffic shaping no cliente, em vez de limitar todo o tráfego a uma velocidade de interface de 100Mbits / s.

    
por 21.01.2018 / 17:14
1

Como Stephen já apontou: o UDP não tem os meios que você quer.

Se o aplicativo for tão estúpido quanto parece, você poderá impor uma velocidade menor configurando uma interface ipip virtual ( ip link ) entre os hosts e usando a modelagem de tráfego ( tc ) para limitar a largura de banda usada .

    
por 21.01.2018 / 18:21
0

Como outras respostas apontam corretamente, o controle de tráfego UDP precisa ser gerenciado no nível de camada 7.

Se você é o único autor do aplicativo, pode definir uma opção para ele que:

  • define o número de mensagens enviadas por segundo;
  • ou a velocidade da qual gera o tráfego para versões futuras;
  • ou se não for multicast, aguardando algum tipo de confirmação no lado do cliente para enviar mais dados.
por 22.01.2018 / 03:27