iBetter Books
수정

체크섬을 직접 계산해 보기

이번 절은 종이와 연필을 꺼낼 시간입니다. 오류 검출이 어떻게 동작하는지 직접 손으로 계산해 보면, 컴퓨터가 왜 그 결과값을 믿는지 몸으로 납득할 수 있습니다.

패리티 비트 — 가장 단순한 검출기

패리티 비트는 오류 검출의 가장 간단한 형태입니다. 아이디어는 딱 하나입니다. 데이터 안에 1이 홀수 개이면 패리티 비트를 1로 붙여서 전체 1의 개수를 짝수로 만듭니다. 1이 짝수 개이면 패리티 비트를 0으로 붙입니다. 이것을 짝수 패리티라고 부릅니다.

예를 들어 7비트 데이터 1011001을 보내려 한다고 합시다. 1의 개수를 세면 1, 1, 1, 1로 네 개, 짝수입니다. 패리티 비트는 0입니다. 최종 전송 비트열은 10110010입니다.

받는 쪽이 10110010을 받으면 1의 개수가 네 개, 짝수이므로 정상입니다. 만약 전송 중 세 번째 비트가 뒤집혀 10010010으로 도착했다면 1의 개수가 세 개, 홀수이므로 오류가 탐지됩니다.

한계도 분명합니다. 정확히 두 비트가 동시에 뒤집히면 1의 개수가 여전히 짝수여서 오류를 눈치채지 못합니다. 그래서 실제 이더넷은 패리티 비트 대신 훨씬 강력한 CRC를 씁니다.

간단한 8비트 체크섬 직접 계산

체크섬은 데이터를 일정 단위로 잘라 더한 뒤, 그 합을 함께 보내는 방식입니다. 받는 쪽이 똑같이 더해서 비교합니다.

다음 네 바이트를 보낸다고 합시다.

보낼 데이터: 25  72  48  11

10진수로 모두 더합니다.

25 + 72 + 48 + 11 = 156

이 합을 8비트 안에 맞추기 위해 256(2의 8승)으로 나눈 나머지를 구합니다.

156 mod 256 = 156

그리고 이 값의 2의 보수, 즉 256에서 빼면 체크섬이 됩니다.

256 - 156 = 100

데이터와 함께 100을 붙여 보냅니다. 받는 쪽은 25 + 72 + 48 + 11 + 100 = 256, 256 mod 256 = 0이 되는지 확인합니다. 0이면 정상, 아니면 오류입니다. 지금 직접 종이에 계산해 보십시오.

CRC — 개념만 알아 두기

실제 이더넷이 쓰는 CRC는 체크섬보다 훨씬 강력합니다. 데이터를 하나의 큰 이진 다항식으로 보고, 미리 정해진 생성 다항식으로 나눈 나머지를 FCS 필드에 담습니다. 이 방식은 버스트 오류까지 탐지하는 능력이 뛰어납니다. 다항식 나눗셈의 세부 유도 과정은 이 책의 범위를 벗어납니다. 중요한 것은 '계산 결과를 함께 보내고, 받아서 다시 계산해 비교한다'는 원리가 패리티 비트, 체크섬, CRC 모두 동일하다는 점입니다.

오류를 알아채는 방법을 배웠으니, 다음 장에서는 오류가 났을 때 어떻게 다시 보낼지, 그리고 받는 쪽이 감당하지 못할 만큼 빨리 보내면 어떻게 조절하는지를 살펴봅니다.