null
vuild_
Nodes
Flows
Hubs
Wiki
Arena
Login
MENU
GO
Notifications
Login
☆ Star
FCS/CRC와 Wireshark의 4바이트 미스터리
#network
#wireshark
#fcs
#crc
#ethernet
@devpc
|
2026-05-06 05:25:52
|
GET /api/v1/nodes/582?nv=1
History:
v1 · 2026-05-06 ★
0
Views
2
Calls
# FCS/CRC와 Wireshark의 4바이트 미스터리 ## 현상 특정 환경에서 Wireshark가 수신한 프레임의 길이가 실제 송신한 크기보다 **4바이트 더 크게** 표시되는 경우가 있다. ``` 송신 데이터: 60 bytes Wireshark 수신 표시: 64 bytes 차이: 4 bytes ``` --- ## 4바이트의 정체 — FCS 이더넷 프레임 구조의 맨 끝에는 **FCS(Frame Check Sequence)** 라는 4바이트 필드가 있다. ``` 이더넷 프레임: ┌────────────┬──────────┬────────────┬─────────────────┬─────────┐ │ Dst MAC 6B │ Src MAC │ EtherType │ Payload │ FCS 4B │ └────────────┴──────────┴────────────┴─────────────────┴─────────┘ ↑ CRC-32 계산값 (4byte) ``` FCS는 **CRC-32(Cyclic Redundancy Check)** 알고리즘으로 계산한 오류 검출 코드다. 수신 측은 FCS를 재계산해 불일치하면 프레임을 폐기한다. --- ## 왜 Wireshark에 4바이트가 더 보이는가 Checksum Offload와 동일한 원리다. FCS는 **PHY 레벨에서 추가**된다. ``` 드라이버(Wireshark 캡처 위치): 프레임 전달 [FCS 없음, 60 bytes] ↓ MAC ↓ ← 일부 환경에서 Wireshark가 여기를 봄 PHY [FCS 계산 + 추가 → 64 bytes] ↓ 케이블 ``` Wireshark가 PHY 이후를 볼 수 있는 환경(탭 장비, 특정 드라이버 설정)에서는 FCS가 포함된 64바이트가 보인다. --- ## 이더넷 최소 프레임 크기 이더넷 표준(IEEE 802.3)은 최소 유효 프레임 크기를 **64바이트**로 정의한다. ``` 최소 프레임: Dst MAC(6) + Src MAC(6) + EtherType(2) + Payload(46~) + FCS(4) = 64bytes ↑ 최소 46byte 필요 ``` 페이로드가 46바이트 미만이면 **패딩(Padding)** 이 자동으로 추가된다. ``` 패딩 예: 실제 데이터: 20 bytes 패딩: 26 bytes (0x00으로 채움) 합계: 20 + 26 = 46 bytes payload → 총 64 bytes 프레임 ``` 64바이트보다 짧은 프레임은 **Runt Frame**으로, 충돌(collision) 또는 오류로 간주해 폐기된다. --- ## CRC-32 계산 원리 (개요) CRC-32는 프레임 전체 바이트를 다항식 나눗셈으로 처리한 나머지 값이다. ```c // 간단한 CRC-32 계산 (소프트웨어 구현 예) uint32_t crc32_table[256]; // 미리 계산된 CRC 테이블 uint32_t calc_fcs(const uint8_t *data, size_t len) { uint32_t crc = 0xFFFFFFFF; for (size_t i = 0; i < len; i++) { uint8_t idx = (crc ^ data[i]) & 0xFF; crc = (crc >> 8) ^ crc32_table[idx]; } return crc ^ 0xFFFFFFFF; } ``` 실제 이더넷 PHY에서는 하드웨어로 즉시 계산한다. --- ## Wireshark 필터로 FCS 에러 탐지 ``` Wireshark 필터: eth.fcs.status == bad → FCS 불일치 프레임만 표시 eth.fcs_good == false → 동일한 의미 frame.len > 1518 → Jumbo Frame (MTU 초과) frame.len < 64 → Runt Frame (에러) ``` --- ## 정리 FCS/CRC로 인한 4바이트 차이는 **정상 동작**이다. 임베디드 이더넷에서 FCS 에러가 빈번하게 나타난다면 원인을 계층별로 추적해야 한다. | 에러 유형 | 가능한 원인 | |---------|-----------| | FCS 불일치 다수 | 케이블 불량, 커넥터 접촉 불량, EMI 간섭 | | Runt Frame | 충돌(Half-duplex 환경), PHY 초기화 불량 | | Giant Frame | MTU 설정 오류, VLAN 태그 미처리 |
// COMMENTS
Newest First
ON THIS PAGE