Computer Science/컴퓨터 네트워크
[컴퓨터 네트워크] Link layer의 checksum (Network Layer, 3계층)
lko9911_
2025. 12. 1. 21:25
Internet checksum 기본 아이디어
- 목적: 데이터 전송 중 오류 감지
- 방법 - 해당 작업은 패킷을 보내는 송신 장치에세 진행됩니다.
- 데이터를 16비트 단위로 쪼갠다.
- 모든 16비트 단위를 합산(add) 한다.
- 합산 결과가 16비트를 넘으면 넘친 부분(carry)을 다시 더한다 → "wraparound sum" 개념
- 최종 합을 1’s complement 해서 체크섬 생성
Wraparound sum이란?
예시)
A = 0xABCD (16비트)
B = 0x1234 (16비트)
합: 0xABCD + 0x1234 = 0xBE01
# 만약 합이 16비트를 초과하면, 초과된 비트를 다시 더합니다.
A = 0xFFFF
B = 0x0001
합: 0xFFFF + 0x0001 = 0x10000 <- 17비트
→ wraparound: 가장 왼쪽(17번째) 비트를 잘라서 16비트 합에 더함
0x0000 + 0x1 = 0x0001
즉, 16비트를 벗어난 자리수는 다시 더해서 “돌려보내는 것” → wraparound sum
16자리 숫자로 더할 때, 17번째 자리(overflow)는 다시 1자리로 “돌려서 더하는 것”
체크섬으로 오류 감지
수신 측에서 같은 방식으로 모든 16비트를 합산하고, 체크섬 포함 합이 0xFFFF인지 확인
Wraparound sum를 사용해 체크섬을 하는 이유
인터넷 체크섬은 합이 16비트 범위 안에서 유지되어야 하고 오류 감지를 위해 모든 비트의 영향이 포함되어야 하기에 버리면 안 되는 overflow를 다시 더해서 16비트 안에 포함시켜야 합니다. 이 때문에 wraparound sum 방식을 사용합니다.
이유 1. 모든 비트의 오류를 감지하기 위함
예시)
두 16비트 조각이 있을때,
FFFF 0001
이 둘을 더하면,
FFFF + 0001 = 10000 (17비트)
만약 overflow를 버린다면?
10000 → 0000 (overflow는 버림)
➡ 문제: 실제로는 1이 있었는데 그 정보가 사라짐
결과적으로 오류 감지 능력 감소.
반면 wraparound를 사용하면,
0000 + 1 = 0001
즉, 데이터의 모든 비트가 최종 합에 반영됨
→ 체크섬이 훨씬 더 정확하고 robust 해짐.
이유 2. 체크섬이 1’s complement 기반
인터넷 체크섬은 다음 구조로 되어있습니다.
“all 16-bit words의 1’s complement sum을 취하고, 마지막에 1’s complement 해서 보낸다.”
여기서 “1’s complement sum”이라는 것 자체가 원래 wraparound를 반드시 포함하는 덧셈 방식입니다.
즉, 체크섬 알고리즘 자체가 wraparound 덧셈을 표준
이유 3. 네트워크는 little/big endian 섞여 있고, 오류 감지가 균일해야 함
- 패킷이 손실되거나 비트가 뒤집히는 오류가 발생할 때
- 어느 위치에서 오류가 발생하든, 모든 비트가 합계에 영향을 주어야 전체적인 오류를 감지할 수 있음
wraparound sum은 모든 비트가 공평하게 영향력을 가지도록 설계된 방식
→ 체크섬이 endian, 기기 종류와 무관하게 정확히 동작
체크섬에서 Wraparound가 없으면 무슨 일이 생길까?
일부 비트 정보가 사라집니다.
데이터가 아주 비슷해도 체크섬 결과가 똑같이 나오는 오류 발생합니다.
오류 감지 성능이 심하게 떨어집니다.
TCP/UDP/IP checksum의 설계 원리와 맞지 않습니다.
✔ wraparound가 있어야 아래 3가지가 지켜집니다.
- 모든 비트가 기여
- 정확한 오류 검출 가능
- 1’s complement checksum 정의와 일치