본문 바로가기
Software Engineering

Error detection

by orioncsy 2023. 4. 24.

오류 검출

Parity bit

개념

  • 데이터 전송 과정에서 오류를 검출하기 위해 추가된 비트

사용 방식

  • 짝수 패리티 비트
    • 전달하고자 하는 데이터의 1의 개수를 기준으로 홀수인 경우 짝수가 되도록 패리티 비트를 1로 설정
    • 전달하고자 하는 데이터의 1의 개수를 기준으로 짝수인 경우 짝수가 되도록 패리티 비트를 0으로 설정
  • 홀수 패리티 비트
    • 전달하고자 하는 데이터의 1의 개수를 기준으로 홀수인 경우 홀수가 되도록 패리티 비트를 0으로 설정
    • 전달하고자 하는 데이터의 1의 개수를 기준으로 짝수인 경우 홀수가 되도록 패리티 비트를 1로 설정

특징

  • 데이터를 송수신하는 과정에서 비트 값이 왜곡되어 전달되는 경우에 이를 검출하기 위해 사용
  • 단순히 오류를 검출하는 기능만 있기 때문에 오류를 검출하였을 경우 재전송 요청 가능
  • 주로 데이터 송수신 거리가 멀 경우에 사용하고 짧을 경우에는 checksum을 사용

Checksum

개념

  • 송신된 데이터의 무결성을 보호하는 방법
  • 나열된 데이터를 더하여 checksum 숫자를 얻고 이것을 정해진 비트의 수로 재구성
  • 전달받은 데이터를 더하고 checksum을 더했을 때를 비교하여 데이터 손상 여부를 확인

사용 방식

  • 4바이트 데이터가 있다면 모든 바이트를 더한 값을 구한다.
  • 모든 바이트를 구한 값의 carry nibble을 버린다.(nibble은 4bit를 의미)
    • checksum 크기를 1바이트로 구성하기 위한 과정
  • 모든 바이트를 더한 값의 2의 보수를 구한다(2의 보수는 비트가 1이면 0, 0이면 1로 바꾸고 1을 더해주는 연산으로 합이 0이 되도록 하는 과정)
  • 2의 보수를 구한 값을 checksum으로 설정하고 데이터를 송신할 때 받은 데이터를 모두 더하고 이 checksum을 더하고 carry nibble을 버렸을 때 0으로 나오면 오류가 없다는 뜻

해밍 코드

개념

  • 패리티 비트를 활용하여 에러가 발생한 비트의 위치를 확인하고 수정하기 위한 코드

사용 방식

  • 송신하려는 데이터의 비트 사이에 패리티 비트를 1,2,4,8 …(2^n) 순으로 삽입한다.
    • 2^k-k-1≥n, k는 체크비트이고 n은 데이터 비트
    • 0부터 2^k-1까지가 k개의 체크비트가 관리할 수 있는 값의 범위이다.
    • 2^k-1≥n+k는 체크비트가 관리할 수 있는 범위가 데이터 비트와 체크비트의 합 이상이라는 뜻으로 위의 식이 도출된다.
  • 각각의 패리티 비트는 본인의 위치를 포함하여 자신의 위치 값만큼의 수를 살피고 다시 자신의 위치 값만큼 건너뛰고 다시 살피고를 반복하여 1의 개수를 확인하고 패리티 값을 정한다.
  • 이렇게 패리티 값을 정렬하였을 때 송신된 값과 수신된 값을 XOR 연산을 하여 10진수로 나타내면 그 수를 오류가 검출된 비트의 위치로 그 값을 수정하면 오류를 수정할 수 있다.
  • 0일 경우에는 오류가 없다는 것을 의미한다.

Reference

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ansdbtls4067&logNo=220886661657

https://hojak99.tistory.com/246

https://m.blog.naver.com/ggggamang/221113176831

'Software Engineering' 카테고리의 다른 글

WAS & Web Server  (0) 2023.05.01
PWA  (0) 2023.04.29
Real Number  (0) 2023.04.23
CSR & SSR  (0) 2023.04.20
Logging level  (0) 2023.04.19