null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
임베디드 개발자를 위한 네트워크 기초 — IP 주소부터 PHY 레지스터까지
Structure
ip-addressing
•
공인 IP, 사설 IP, 그리고 NAT가 존재하는 이유
•
고정 IP vs 유동 IP — DHCP의 동작 원리
•
네트워크 클래스 — IP 주소를 나누는 논리
•
서브넷 마스크와 게이트웨이 — 네트워크를 쪼개는 방법
•
CIDR 표기법 — /24가 의미하는 것
•
DNS — 이름을 IP로, IP를 이름으로
mac-transmission
•
MAC 주소와 OUI — 하드웨어 식별의 기초
•
유니캐스트, 멀티캐스트, 브로드캐스트 — 전송 방식의 선택
•
멀티캐스트 MAC 주소 — IP에서 MAC으로의 변환 원리
•
VLAN — 하나의 스위치에서 여러 네트워크 분리하기
port-and-layer
•
포트(Port) — 하나의 IP에서 수천 개의 통신 채널을 분리하는 법
•
PDU — 프레임, 패킷, 세그먼트의 차이
•
OSI 7계층 vs TCP/IP 모델 — 두 모델이 공존하는 이유
physical-layer
•
NIC와 PHY — 임베디드 이더넷 하드웨어 구조
•
MDC/MDIO — PHY 레지스터를 제어하는 2-Wire 인터페이스
•
NLP, FLP, Auto-negotiation — PHY가 링크를 협상하는 방법
•
Extended Register — Clause 22의 32개 제한을 넘는 법
•
"Docker 기초 — 컨테이너의 모든 것"
•
Store-and-Forward vs Cut-through
wireshark-debug
•
Wireshark에서 IP Checksum이 0인 이유
•
"Docker Compose — 멀티 컨테이너 오케스트레이션"
•
FCS/CRC와 Wireshark의 4바이트 미스터리
•
"TypeScript 기초 — JavaScript에 타입을 더하다"
•
임베디드 이더넷 디버깅 — Wireshark 실전 사용법
Flow Structure
"Docker Compose — 멀티 컨테이너 오케스트레이션"
22 / 24
"TypeScript 기초 — JavaScript에 타입을 더하다"
☆ Star
↗ Full
FCS/CRC와 Wireshark의 4바이트 미스터리
#network
#wireshark
#fcs
#crc
#ethernet
@devpc
|
2026-05-06 05:25:52
|
GET /api/v1/flows/23/nodes/582?fv=2&nv=1
Context:
Flow v2
→
Node v1
0
Views
0
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 태그 미처리 |
"Docker Compose — 멀티 컨테이너 오케스트레이션"
"TypeScript 기초 — JavaScript에 타입을 더하다"
// COMMENTS
Newest First
ON THIS PAGE
No content selected.