null
vuild_
Nodes
Flows
Hubs
Wiki
Arena
Login
MENU
GO
Notifications
Login
☆ Star
Wireshark에서 IP Checksum이 0인 이유
#network
#wireshark
#checksum
#offload
#phy
@devpc
|
2026-05-06 05:25:52
|
GET /api/v1/nodes/581?nv=1
History:
v1 · 2026-05-06 ★
0
Views
2
Calls
# Wireshark에서 IP Checksum이 0인 이유 ## 현상 Wireshark를 열고 자신의 PC에서 송신하는 패킷을 분석하면 IP 헤더의 Checksum 값이 `0x0000`으로 나오는 경우가 있다. 수신 쪽에서 보면 올바른 Checksum이 들어있는데 왜 그럴까? ``` 송신 PC Wireshark 캡처: IP Header: Header Checksum: 0x0000 (incorrect, should be 0x1234) [Checksum Status: Unverified] 수신 PC Wireshark 캡처: IP Header: Header Checksum: 0x1234 (correct) ``` --- ## 원인 — Checksum Offload **Checksum Offload**는 CPU 대신 NIC(또는 PHY)가 Checksum을 계산하는 기능이다. ``` Checksum Offload OFF (소프트웨어): CPU → IP/TCP Checksum 계산 → MAC → PHY → 케이블 Checksum Offload ON (하드웨어): CPU → Checksum = 0으로 설정 → MAC → [PHY에서 Checksum 채움] → 케이블 ``` Wireshark는 MAC과 PHY 사이를 본다. PHY가 Checksum을 채우기 전이므로 0이 보이는 것이다. --- ## Wireshark가 보는 위치 ``` 운영체제(소프트웨어) ↓ MAC 블록 ↓ ← Wireshark는 여기서 캡처 PHY 칩 ← Checksum Offload 연산이 여기서 발생 ↓ 케이블 ``` Wireshark는 드라이버 레벨에서 패킷을 가로채기 때문에, PHY가 Checksum을 추가하기 전 데이터를 본다. --- ## 확인 방법 (Windows) 네트워크 어댑터 고급 속성에서 Checksum Offload를 비활성화하면 Wireshark에서도 올바른 Checksum이 보인다. ``` 설정 경로: 제어판 → 네트워크 → 어댑터 속성 → 구성 → 고급 탭 → "IPv4 Checksum Offload" : 비활성화 → "TCP Checksum Offload (IPv4)" : 비활성화 → "UDP Checksum Offload (IPv4)" : 비활성화 ``` 단, 이 변경은 CPU 부하를 증가시킨다. 디버깅 목적이 아니라면 Offload를 다시 활성화할 것. --- ## 임베디드에서의 Checksum Offload MCU의 이더넷 MAC도 Checksum Offload를 지원하는 경우가 있다. lwIP와 함께 사용할 때 설정 예: ```c // lwipopts.h #define CHECKSUM_GEN_IP 0 // 하드웨어에서 IP Checksum 생성 #define CHECKSUM_GEN_TCP 0 // 하드웨어에서 TCP Checksum 생성 #define CHECKSUM_GEN_UDP 0 // 하드웨어에서 UDP Checksum 생성 #define CHECKSUM_CHECK_IP 0 // 하드웨어에서 IP Checksum 검증 #define CHECKSUM_CHECK_TCP 0 // 하드웨어에서 TCP Checksum 검증 ``` 하드웨어 Offload를 활성화하면 CPU 오버헤드가 줄어 성능이 향상되지만, **하드웨어와 소프트웨어 설정이 맞지 않으면 Checksum 에러가 발생**한다. --- ## 정리 Wireshark에서 Checksum이 0으로 보이는 것은 송신 오류가 아니라 **정상적인 Offload 동작**이다. 실제 통신 문제인지 Wireshark 표시 문제인지를 구분하려면: 1. 수신 쪽 Wireshark에서 Checksum이 올바른지 확인 2. Wireshark 필터: `ip.checksum == 0x0000` — Offload 패킷만 필터링 3. 수신 측에서 Checksum 에러(`ip.checksum.status == bad`)가 뜨면 진짜 문제
// COMMENTS
Newest First
ON THIS PAGE