[컴퓨터네트워크] 패리티 비트(Parity Bit) & 해밍 코드(Hamming Code)

[컴퓨터네트워크] 패리티 비트

디지털세계에서 데이터를 전송하다보면 잡음이나 오류등에 의해서 데이터 손실이나 변경이 일어나게 됩니다. 이를 우리는 에러(Error)라고 부르죠. 그래서 사람들은 생각했습니다. 어떻게하면 에러가 발생했는지 알 수 있고 어디서 발생했는지 알 수 있을지에 대해서요.
이러한 오류 검사는 매우 중요한데 가장 대표적이면서 간단하게 사용할 수 있는것이 바로 패리티 비트입니다.


패리티 비트

패리티 비트라는 것을 사용하여 만드는 코드로서, 정보의 전달 과정에서 오류가 생겼는지를 검사하기 위해 추가된 비트이다.

전송하고자 하는 데이터의 각 문자에 1 비트를 더하여 전송하는 방법으로, 1개의 비트 오류만을 검출 할 수 있다.
즉, 패리티 비트를 정하여 데이터를 보내면 받는 쪽에서는 수신된 데이터의 전체 비트를 계산하여 패리티 비트를 다시 계산함으로써 데이터 오류 발생 여부를 알 수 있습니다. 그러나 패리티 비트는 오류 발생 여부만 알 수 있지 오류를 수정할 수는 없다는 단점이 있습니다.

시리얼 통신을 하면서 데이터가 소실되어 패리티에 의한 데이터 손실이 발생함을 인지하였을 때에는 수신지에서 다시 데이터를 보내달라는 재송신 요청을 할 수 있도록 하는 보다 안정적인 통신을 위한 하나의 보호장치라고 할 수 있겠습니다.

한편 패리티 비트의 경우 시리얼 통신의 거리가 상당히 멀 경우에 주로 적용이 되며, 송수신 거리가 짧을 경우에는 보통의 경우 패리티 비트는 사용하지 않고, Checksum 데이터를 추가하는 방법으로 데이터의 오류 검출을 하니 참고하시기 바라겠습니다.

그러나 패리티 비트는 2개의 bit 오류가 발생했을 경우는 검출할 수 없다

각각의 패리티 코드 내의 1의 개수에 따라 홀수 패리티와 짝수로 나뉜다.



짝수 패리티(Even Parity) & 홀수 패리티(Odd Parity)

위의 그림을 보면 우선 실제 전송하고자 하는 8-Bit Data에 추가적으로 붙게 되는 패리티 비트를 짝수 패리티로 설정할 것인지 혹은 홀수 패리티로 설정할 것인지에 따라서 붙게되는 패리티 비트의 값이 달라지게 됩니다. 일단 오해하지 말아야할 부분이 짝수 패리티라고 0으로 값을 고정하거나 홀수패리티라고 그 값을 1로 고정하는게 아닙니다.

짝수(Even) 패리티는 실제 송신하고자 하는 데이터의 각 비트의 값 중에서 1의 개수가 짝수가 되도록 패리티 비트를 정하는 것인데, 이를테면 데이터 비트에서 1의 개수가 홀수이면 패리티 비트를 1로 정합니다. 위의 그림에서 데이터의 각 비트의 값 중 1의 개수가 이미 짝수이므로 짝수 패리티 비트의 값이 0으로 설정되어 있는 것을 알 수 있습니다.

홀수(Odd) 패리티는 전체 비트에서 1의 개수가 홀수가 되도록 패리티 비트를 정하는 방법입니다. 위에서 설명한 바와 마찬가지로 위의 그림을 확인해보면, 송신하고자 하는 데이터의 각 비트의 값 중 1의 개수가 짝수이므로, 이를 홀수로 맞추기 위해서 홀수 패리티 비트의 값이 1로 설정되어 있는 것을 알 수 있습니다.



해밍 코드(Hamming code)

해밍 코드를 이용하여 전체 데이터 비트의 어느 지점에서 오류가 발생했는지 검출할 수 있다.
해밍 코드를 구하기 위해서는 우선 추가 될 패러티 비트의 개수를 구해야 하며, 아래의 식에서 p를 구하면 된다.


총 전송 비트 수

  • 데이터 비트수(d) + 패리티 비트 수(p)

패리티 비트 위치 선정

  • 2의p승 위치 (단, p는 0,1,2,3,4 ...)
  • 결과 : 1, 2, 4, 8 번째 위치

패리티 비트 구하기

짝수 패리티라고 가정하고...
  • 위와 같은 방식으로 P1 ~ P4의 값을 구할 수 있습니다. 빈칸에 들어갈 값들을 보면
    • P1 = 1 0 1 0 1 -> 1
    • P2 = 1 1 1 1 1 -> 1
    • P3 = 0 1 1 1 -> 1
    • P4 = 0 1 1 1 -> 1
  • 만들어진 송신 코드는 P1 ~ P4까지의 값들을 내려보면 1 1 1 1 0 1 1 1 0 1 1 1이 됩니다.
  • 그런데 2진수에서 1비트의 위치는 맨 오른쪽이기 때문에 저 값을 뒤집어줍니다.
  • (지금 상태는 1비트와 12비트의 위치가 서로 반대 1비트가 맨 왼쪽 12비트가 맨 오른쪽)
  • 그러면 최종 송신 코드는 1 1 1 0 1 1 1 0 1 1 1 1이 됩니다.
  • 이렇게 만들어진 코드를 해밍코드라고 부릅니다.


해밍 코드를 이용한 오류 판별 방법



출처

댓글

  1. 계산하려는 원래 값을 2진수로 말씀해주시면 감사하겠습니다

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?

[Python] # -*- coding: utf-8 -*-를 쓰는 이유