베하
안녕하세요 여러분. 다시 돌아온 일단고 팀입니다.
오늘 얘기해볼 주제는 오류 검출 방식입니다.
네트워크 상에서 데이터를 주고받는 과정에서 감쇠, 잡음 등에 의해서 데이터가 불온전하게 전달될 수 있습니다.
이러한 데이터의 오류를 검증하는 오류 검출 방식에 대해서 알려드리겠습니다.
오류 검출의 개요
데이터의 무결성을 보장하기 위해 오류 검출 방식을 사용합니다.
오류 검출은 데이터 전송 중 발생한 오류의 존재 여부를 수신측이 알 수 있도록 하는 기술입니다.
만약 오류 검출 결과 데이터에 오류가 존재한다면 수신측은 송신측에 데이터 재전송을 요청합니다.
이는 오류에 대한 정정은 이루어지지 않으나, 검출해내는 것 만으로도 오류 제어가 충분한 경우가 많습니다.
대표적인 오류 검출 방식에는 패리티 검사, 검사합, 순환 중복 검사, 블록 합 검사가 있습니다.
패리티 검사 (Parity Check)
패리티 검사는 이진수로 표현된 데이터에서 특정 비트를 추가하여 홀수 또는 짝수 비트의 개수가 특정한 패리티 비트와 일치하도록 하여 오류를 검출하는 방식입니다.
과정은 이렇습니다.
- 1의 개수를 짝수 개로 맞춰서 보낼지(Even Parity), 홀수 개로 맞춰서 보낼지(Odd Parity) 송신측과 수신측이 약속하고 여분의 bit(패리티 비트)를 채워 보냅니다.
- 만약 Even Parity로 약속했는데, 전달받은 데이터 중 1의 개수가 홀수이면 데이터에 오류가 존재함을 알 수 있습니다.
패리티 검사는 단순하고 효율적인 방법이지만, 오류 검출만 가능하며 오류의 정확한 위치를 찾을 수 없고 두 개 이상의 비트가 동시에 변화하는 경우에는 검출할 수 없는 한계가 있습니다.
검사합 (Checksum)
검사합은 데이터 블록의 비트들을 합산하여 생성된 값으로, 데이터 블록에 오류가 있는지를 검출하는 방식입니다.
과정은 이렇습니다.
- 송신자는 데이터를 n비트로 나누어 각각 1의 보수를 사용하여 서로 더한 결과(검사합)를 보냅니다.
- 수신자는 전달받은 데이터를 n비트로 나누어 똑같이 각각 1의 보수를 사용하여 서로 합산합니다.
- 그 결과가 0이면 오류가 없는 것이고 그렇지 않다면 오류가 발생했을 가능성이 높으므로 오류를 검출합니다.
검사합 또한 단순하고 효율적인 오류 검출 방법입니다. 하지만 이 방법으로는 오류의 정확한 위치를 파악하기 어렵고, 여러 개의 오률를 검출하지 못하는 한계가 존재합니다.
블록 합 검사 (BSC: Block Sum Check)
블록 합 검사는 2차원적인 에러 검출 방식으로, 가로와 세로로 두 번의 관찰을 진행하여 오류를 검출해내는 검사 방법입니다. 다중 비트 오류와 집단 오류를 검출할 가능성을 높인 방법입니다.
과정은 이렇습니다.
- 원본 데이터들을 일정 크기의 블록으로 묶고, 각 행의 패리티 검사 결과를 해당 행의 마지막 열에 붙입니다.
- 모든 행에 대해 패리티가 추가되면 열을 중심으로 패리티 검사를 진행하여 결과를 마지막 행에 추가합니다.
- 이렇게 재구성된 블록을 행단위로 전송합니다.
- 수신측은 블록을 구성하고 블록합을 검사하여 에러를 검출합니다.
- 검사가 완료되면 수신측은 패리티 비트를 제거하여 순수 데이터를 얻을 수 있습니다.
패리티 검사보다 높은 안정성을 띄지만 하나의 데이터 단위내에서 두 비트가 손상되고, 다른 데이터 단위 내에서 정확히 같은 위치의 두 비트가 손상되면 블록 합 검사가 제대로 이루어지지 않을 수 있다는 단점이 있습니다.
순환 중복 검사 (CRC: Cyclic Redundancy Check)
CRC는 데이터의 순환 중복을 검사하는 방법으로, 데이터 블록에 추가적인 비트들을 부여하여 오류가 있는지를 검출하는데 사용됩니다.
과정은 이렇습니다.
- 송신단에서는 전송할 데이터 프레임을 미리 정의된 CRC 다항식으로 나누어 나온 나머지 값을 원래의 데이터 프레임 뒤에 FCS로 붙입니다.
- 이때 나머지 값이 0이면 확장 데이터(원래 데이터 + FCS)를 그대로 전송합니다.
- 수신단에서는 전달받은 프레임에 대해 CRC 검사를 진행합니다.
- 수신된 전체 데이터를 송신단에서 사용한 CRC 다항식으로 나누어 나머지를 검사합니다.
- 나머지가 0이면 데이터에 오류가 없는 것이고, 0이 아닌 수가 나오면 데이터에 오류가 있음을 확인할 수 있습니다.
CRC는 에러 검출 능력이 우수한 순회 부호의 일종으로 잘 정의된 수학적 구조를 가지며 부호화에 용이하고 매우 효율적인 복호화 기능을 가진다는 특징이 있습니다. 높은 오류 검출율과 간단한 H/W 구현 가능합니다.
어떻게 이런 방식을 고안해냈는지 정말 신기하네요. 그럼 다음 시간에 또 만나요 안녕!
'Network' 카테고리의 다른 글
[Network] WireShark로 tcpdump 파일 패킷 분석하기 (1) | 2023.09.18 |
---|---|
[Network] tcpdump로 네트워크 패킷 파일 생성하기 (0) | 2023.09.08 |
TCP/IP 5계층 (0) | 2023.06.12 |
MRTG란? (0) | 2023.05.15 |
[Network] Stateful과 Stateless의 개념과 차이점 (0) | 2023.05.10 |
댓글