Qual é a diferença entre os campos "errors:" "drop:" "overruns:" e "frame:" na saída de pacotes ifconfig RX?

11

Alguém por favor pode elaborar a diferença entre os vários RX packetscampos na ifconfigsaída?

Por exemplo, digamos que eu corra ifconfige veja o seguinte:

eth0      Link encap:Ethernet  HWaddr AA:BB:CC:DD:EE:FF  
          inet addr:1.1.1.1  Bcast:1.1.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:202723544 errors:0 dropped:4959 overruns:0 frame:37
          TX packets:158354057 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4261083782 (3.9 GiB)  TX bytes:1224803677 (1.1 GiB)
          Interrupt:83 Memory:f6bf0000-f6c00000 

Qual é a diferença entre errors: dropped: overrunseframe:

Meu palpite neste momento (com base em algumas pesquisas vagas) é que frame:pertence especificamente a falhas de CRC quando o nic analisa os quadros de entrada e essa errors:é uma categoria genérica mais ampla. Então, novamente ... se fosse esse o caso, eu esperaria que ambos os campos mostrassem números.

Mike B
fonte

Respostas:

17

Essa informação está mal documentada. Vou lhe contar o que entendi da minha experiência.

  • frame conta apenas quadros desalinhados, significa quadros com um comprimento não divisível por 8. Por esse comprimento, não é um quadro válido e é simplesmente descartado.

  • Enquanto isso, errorsconta erros de CRC, quadros muito curtos e quadros muito longos.

  • overruns conta que as vezes em que há excedentes de FIFO, são causados ​​pela taxa na qual o buffer fica cheio e o kernel não consegue esvaziá-lo.

  • Por fim, droppedconta coisas como tags VLAN não intencionais ou recebimento de quadros IPv6 quando a interface não está configurada para IPv6.

jcbermu
fonte
Obrigado. Eu encontrei post com descobertas semelhantes. blog.hyfather.com/blog/2013/03/04/ifconfig
Mike B
Como você descobriu isso, onde estão suas fontes? Estou curioso, porque estou procurando essas respostas sozinho e não consigo encontrá-las em nenhum outro lugar além de blogs ou postagens como essa. Alguma página de manual ou documentação oficial?
mdo123 29/01
8

Eu sei que esta é uma pergunta de 1 ano de idade, mas é a primeira no Google, então talvez eu possa adicionar 5 centavos a ela.

Primeiro eu não estava ciente desta regra mod 8 no campo de quadro ... É uma regra de driver ou regra de kernel?

Na pouca experiência que tenho, esses números são bastante genéricos e mais informações podem ser obtidas em ethtool(se o driver suportar) ex: this is from watchcommand.

Every 1s: ethtool -S eth1 | grep rx_ && echo  && ifconfig eth1                                                   1970-01-01 00:21:07

 rx_octets: 12635134290
 rx_frames: 8488675
 rx_broadcast_frames: 103
 rx_multicast_frames: 0
 rx_pause_frames: 0
 rx_64_byte_frames: 113
 rx_65_127_byte_frames: 47
 rx_128_255_byte_frames: 186340
 rx_256_511_byte_frames: 1
 rx_512_1023_byte_frames: 0
 rx_1024_1518_byte_frames: 8302174
 rx_greater_than_1518_byte_frames: 0
 rx_undersized_frames: 0
 rx_oversize_frames: 0
 rx_jabbers: 0
 rx_frame_check_sequence_errors: 0
 rx_length_field_frame_errors: 0
 rx_symbol_errors: 0
 rx_alignment_errors: 0
 rx_resource_errors: 283
 rx_overruns: 132
 rx_ip_header_checksum_errors: 0
 rx_tcp_checksum_errors: 0
 rx_udp_checksum_errors: 0

eth1      Link encap:Ethernet  HWaddr AA:BB:CC:DD:20:16  
          inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a8bb:ccff:fedd:2016/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:8488675 errors:415 dropped:4 overruns:132 frame:283
          TX packets:647464 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3892403548 (3.6 GiB)  TX bytes:62273943 (59.3 MiB)
          Interrupt:147 Base address:0xc000 

Dependendo do driver, haverá campos diferentes ethtoole os ifconfigcampos também podem apontar para quadros de tamanho menor ou maior.

Se o seu NIC e driver suportá-lo, você pode (ou deve) fazer o ex:

ifdown eth1 && modprobe -r macb && modprobe macb && ifup eth1 && ethtool -offload  eth1  rx off  tx off && ethtool -K eth1 gso off && ethtool --show-offload eth1

para obter mais informações (permita que as informações sejam mostradas no ethtool). Estou usando o driver macb aqui ... então verifique o ethtoolseu driver.

ethtool -i eth1

Isso é o que me ajuda a entender normalmente o que está acontecendo.

Às vezes, não há erros, mas os pacotes estão corrompidos ... então é mais um problema PHYsical ou de driver ... e às vezes os sniffers mostram que tudo está correto, mas há um problema depois de chegar ao driver / kernel (é o caso acima na realidade).

Um pouco mais pode ser obtido em netstat -s, ou se você colocar isso em um script (para pequenos sistemas embarcados):

awk '(f==0) { i=1; while ( i<=NF) {n[i] = $i; i++ }; f=1; next} (f==1){ i=2; while ( i<=NF){ printf "%s = %d\n", n[i], $i; i++}; f=0}'  /proc/net/netstat

pois netstat -spode não estar disponível.

Tomasz Janicki
fonte
1
Obrigado pelo heads-up emethtool -S
kostix 17/17/17