에러 검출을 위해 일정 비트 추가
10.1 Type of Error
Single-bit error

Burst error

10.2 오류 검출 vs 오류 정정
10.2.1 오류 검출
- 오류가 있느냐, 없느냐만 알아냄
- 목적지에서 오류를 검출하기 위해 여분의 비트를 추가
- CRC, Checksum

10.2.2 오류 정정
Foward Error Correction
- 수신자가 메시지의 중복비트를 이용하여 메시지를 정정
- 과정 복잡
Automatic Repeat-reQuest
- 수신자가 오류발생을 검출하여 송신자에게 메시지를 다시 보내줄 것을 요청하는 기술
- 지연 발생 시 재전송 요청 어려움
10.3 Cyclic Code
특별한 성질을 가진 블록코드의 한 종류
- 임의의 한 Codeword를 순환하면 다른 Codeword를 생성
- E.g. LAN, WAN
- Remainder: 원래 전송하는 Dataword보다 하나 적은 bit
10.3.1 Division in CRC Encoder

- 나누기 연산의 나머지 Remainder 를 추가
10.3.2 Division in the CRC Decoder

- 수신 측에서 Syndrome = 0 -> Error X
전송 중에 생긴 에러 패턴이 divisor의 배수라면=> 원래 Dataword와 바뀐 데이터의 합이 Divisor와 같을 때 오류 검출 불가
오류가 발생했음에도 불구하고 syndrome이 0이 됨
- E.g. Dataword 1001 -> 0010, Error = 1011 = Divisor
- Divisor XOR Dataword로 데이터가 변질
Polynomial
- 0과 1의 패턴을 0과 1의 다항식으로 나타냄
- 각 항의 지수가 각 비트의 자릿수
- 계수는 비트의 값

10.3.3 CRC division using polynomials

- Dataword x3+1이 Dividend를 더해서 x6+x3
10.3.5 Advantage of CRC
- 단일 비트 및 폭주 오류를 검출하는 데 우수
- 구현 Easy
∴ 네트워크에서 순환 코드가 사용
10.4 Checksum
- 데이터 링크층 뿐만 아니라 인터넷에서 여러 프로토콜에 의해 사용
- 목적지에 보내고자 하는 5개의 4bit 숫자 데이터를 가정한다, 끝에 숫자의 합도 같이 전송
- 수신자는 5개의 숫자를 더해 결과를 합과 비교 -> 같으면 오류 x

- sum: 계산 결과
- wrapped sum: 이진수 결과
- checksum: wrapped sum의 1의 보수
- decoding 결과 0이면 오류 x
계산 과정
- 숫자 다 더하기
- 원래 bit 수보다 큰 bit들은 아래로 내려서 덧셈
- 1의 보수