O / proc / net / udp conta todas as interrupções que ocorrem entre o plug ethernet e meu aplicativo?

1

/proc/net/udp no Linux tem uma coluna "drops":

cat /proc/net/udp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
16151: 00000000:CB53 00000000:0000 07 00000000:00000000 00:00000000 00000000  1000        0 39947169 2 ffff88084c108080 0

Se o contador de quedas for 0 para um determinado soquete, posso ter certeza de que qualquer descarte que ocorra entre o remetente de um pacote UDP legítimo e o aplicativo ocorreu fora da minha caixa , digamos em algum comutador ou roteador etc.?

Ou será que, por exemplo, meu driver NIC deixou cair um pacote por qualquer motivo, sem afetar o contador?

Eu sei que em pacotes do Windows podem ser descartados mesmo que ainda haja muito espaço no buffer de recebimento, não tenho certeza se algo similar existe no Linux.

    
por Eugene Beresovsky 22.02.2016 / 07:31

2 respostas

2

Não.

Os pacotes podem ser perdidos antes de serem de-multiplexados em soquetes do usuário.

Isso acontece quando o kernel não consegue ler os pacotes com rapidez suficiente da placa de rede por algum motivo.

As placas de rede não contam os pacotes perdidos por porta ... pelo menos não necessariamente, e eu não acredito que nada disso seja integrado a contagens por soquete em /proc/net/udp .

Há um documento de 2015 que entra em detalhes sobre os drops de pacotes, não sei se você acharia interessante. link

    
por 12.05.2017 / 18:34
1

O UDP é, por definição, um protocolo sem conexão. Por definição, no nível do sistema, o remetente só se preocupa com o envio e não reconhece a recepção. Então, em que toca o remetente, enquanto ele foi capaz de despachar o pacote UDP, foi bem sucedido.

Não há garantias de que o receptor receberá todos esses pacotes, devido a possíveis congestionamentos / erros, ou na ordem em que foram enviados, devido a vários fatores, incluindo roteamento de caminho múltiplo e diferentes graus de congestionamento.

O buffer também tem tamanhos limitados, e se os pacotes ultrapassarem o buffer, eles também serão perdidos.

Para responder à sua resposta, lidando com um protocolo que não é orientado para a conexão, olhando para um pacote contendo 0, no nível do sistema, feito apenas em um lado da conexão, seja o remetente ou o receptor , ou mesmo em ambos os lados, não conta a imagem completa.

Portanto, embora as estatísticas reflitam pacotes descartados de buffers, eles não serão responsáveis por todos os pacotes perdidos na transmissão.

Você pode querer ver o número de pacotes enviados e recebidos além disso, em ambos os tamanhos.

Indo para a camada superior, ou seja, no nível do aplicativo, ou seja, DNS ou NTP, por exemplo, pode haver controles adicionais para obter estatísticas mais significativas do serviço.

De UDP - Wikipedia

UDP uses a simple connectionless transmission model with a minimum of protocol mechanism. It has no handshaking dialogues, and thus exposes the user's program to any unreliability of the underlying network protocol. There is no guarantee of delivery, ordering, or duplicate protection. UDP provides checksums for data integrity, and port numbers for addressing different functions at the source and destination of the datagram.

Relacionar thread no estouro de pilha Como monitorar o espaço disponível do buffer UDP do Linux

    
por 22.02.2016 / 08:37