CRC
CRC
CRC
- 네트워크를 통해 데이터를 전송하면 손실, 순서 바뀜 등의 이유로 송신 데이터와 수신 데이터의 차이가 존재 가능
- 이를 확인하기 위해 체크를 위한 별도의 값을 사용. 이 체크값은 여러 방식으로 계산 가능한 데 그 중 하나가
CRC
- 이진법 기반의 하드웨어에서, 직렬 데이터를 다룰 때 구현이 쉬움
- 하드웨어뿐만이 아니라 소프트웨어에서도 검사 가능
- 네트워크의 하위 계층에서는 HW를 이용하고, 상위 계층에서는 SW를 이용해 계산
- 일반적인 사칙연산의 나눗셈이 아닌
commutative ring
상에서의 나눗셈으로, 계산에서XOR 연산
을 사용함 - CRC를 n 비트로 만드는 것을 CRC-n이라고 함
- 대표적으로 사용되는 CRC의 n값은 8, 10, 16, 32 등
- 나눗셈에는 n + 1 비트의
나누는 수
가 필요하고, 각 n마다 정해져 있음 - 대표적으로 CRC-8은 나누는 수가
100000111
임
CRC 동작 방식
- 기존 데이터의 뒤에 n개의 0을 붙임
- 0을 붙인 데이터를 CRC-n의 나누는 수를 통해 나누고
나머지
를 계산. 이 값이 CRC이다 - 송신자는 기존 데이터에 n개의 0 대신 CRC를 붙여서 전송한다
- 수신자는 데이터를 수령해 나누는 수로 나눠서 나머지를 계산함
- 이 값이 0인 경우: 데이터가 송신자가 보낸 그대로 온 것
- 이 값이 0이 아닌 경우: 데이터에 오류가 생긴 것
References
- http://blog.skby.net/%EC%88%9C%ED%99%98-%EC%A4%91%EB%B3%B5-%EA%B2%80%EC%82%AC-crc-cyclic-redundancy-check/
- https://ko.wikipedia.org/wiki/%EC%88%9C%ED%99%98_%EC%A4%91%EB%B3%B5_%EA%B2%80%EC%82%AC