ifconfig RX 패킷 출력의 "errors:", "dropped:", "overruns:" 및 "frame:" 필드 간의 차이점은 무엇입니까?

ifconfig RX 패킷 출력의 "errors:", "dropped:", "overruns:" 및 "frame:" 필드 간의 차이점은 무엇입니까?

RX packets누군가 출력의 다양한 필드 간의 차이점을 자세히 설명해 주시겠습니까 ?ifconfig

예를 들어, 실행하여 ifconfig다음을 본다고 가정해 보겠습니다.

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 

errors: dropped: overruns차이점은 무엇 입니까?frame:

이 시점에서 내 추측은(모호한 인터넷 검색을 기반으로) frame:네트워크 카드가 들어오는 프레임을 분석할 때 발생하는 CRC 오류와 특히 관련이 있다는 것입니다. 이는 errors:더 넓은 일반 범주입니다. 그렇다면 다시... 그렇다면 두 필드 모두 숫자를 표시하고 싶습니다.

답변1

이 정보는 제대로 문서화되어 있지 않습니다. 제 경험을 통해 제가 아는 것을 말씀드리겠습니다.

  • frame정렬되지 않은 프레임만 계산됩니다. 즉, 길이가 8로 나누어지지 않는 프레임을 의미합니다. 길이가 유효한 프레임이 아니므로 폐기됩니다.

  • 또한 errorsCRC 오류, 너무 짧은 프레임, 너무 긴 프레임을 계산합니다.

  • overruns버퍼가 가득 차서 커널이 버퍼를 지울 수 없는 속도로 인해 FIFO가 오버플로된 횟수를 계산합니다.

  • 마지막으로 dropped인터페이스가 IPv6로 구성되지 않은 경우 예기치 않은 VLAN 태그 또는 수신된 IPv6 프레임 등을 계산합니다.

답변2

1년 된 질문이라는 건 알지만 Google에서 1위를 차지했으므로 5센트를 추가할 수도 있습니다.

우선 프레임 필드에 이런 Mod 8 규칙이 있는지 몰랐네요... 드라이버 규칙인가요, 커널 규칙인가요?

내 경험에 따르면 이 숫자는 매우 일반적이며 (드라이버가 지원하는 경우) 예: 명령 ethtool에서 더 많은 정보를 얻을 수 있습니다 .watch

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 

드라이버에 따라 다양한 필드가 있으며 필드 ethtoolifconfig소형/대형 프레임을 가리킬 수도 있습니다.

네트워크 카드와 드라이버가 이를 지원하는 경우 다음을 수행할 수 있습니다.

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

자세한 내용은 ethtool에 정보 표시를 허용하세요. 여기서는 macb 드라이버를 사용하고 있으니 확인해 보세요 ethtool.

ethtool -i eth1

이는 일반적으로 무슨 일이 일어나고 있는지 이해하는 데 도움이 됩니다.

때로는 오류가 없지만 패킷이 손상되었습니다... 그러면 물리적 또는 드라이버 문제에 더 가깝습니다... 때로는 스니퍼가 모든 것이 정확하다고 표시하지만 드라이버/커널에 도달한 후 실제로 뭔가 잘못되었습니다(위의 경우입니다). ).

자세한 내용은 에서 얻 netstat -s거나 스크립트에 입력하면 얻을 수 있습니다(소형 임베디드 시스템의 경우).

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

netstat -s이용이 불가능할 수도 있기 때문입니다 .

관련 정보