Descoberta do número de pacotes descartados em soquetes brutos

2

Estou desenvolvendo um programa que fareja pacotes de rede usando um soquete bruto ( AF_PACKET, SOCK_RAW ) e os processa de alguma forma.

Não tenho certeza se meu programa é executado com rapidez suficiente e é bem-sucedido para capturar todos os pacotes no soquete. Estou preocupado que o buffer de recebimento para esse soquete fique cheio (devido a rajadas de tráfego) e alguns pacotes sejam descartados.

How do I know if packets were dropped due to lack of space in the socket's receive buffer?

Eu tentei executar ss -f link -nlp .

Isso gera o número de bytes atualmente armazenados no buffer de revisão para esse soquete, mas não sei dizer se algum pacote foi descartado.

Estou usando o Ubuntu 14.04.2 LTS (GNU / Linux 3.13.0-52-genérico x86_64 ).

    
por gabi 09.06.2015 / 12:23

1 resposta

1

Pacotes descartados podem ser vistos no netstat, saídas de ethtool. Para pacotes UDP, verifique a saída de 'netstat -us' . Os pacotes também são descartados na própria camada da NIC, que pode ser vista via 'ethtool -S <device_name>'

Exemplo de saídas:

$ netstat -us
IcmpMsg:
    InType3: 44
    InType8: 5
    InType13: 1
    InType17: 3
    InType37: 1
    OutType0: 5
    OutType3: 599
    OutType8: 4
    OutType14: 1
Udp:
    86942 packets received
    209 packets to unknown port received.
    **0 packet receive errors** <== This indicates packets dropped due to socket buffer full
    213901 packets sent
UdpLite:
IpExt:
    InOctets: 38683476091
    OutOctets: 959938111

Tente usar um espaço de buffer maior (SO_RCVBUF) e aumente o máximo do sistema por meio do controle sysctl net.core.rmem_max

Na camada NIC, você também pode tentar aumentar os buffers de anel para lidar com o tráfego em rajadas (verifique as configurações via ethtool -g )

    
por 10.06.2015 / 16:37