오류의 종류
데이터가 깨져 도착하는 프레임 변형과 데이터가 목적지에 도착하지 못하는 프레임 분실이 있고, 데이터를 전송하는 가운데 전기적 신호가 열이나 자기장과 같은 여러 형태의 전기로부터 예측할 수 없는 간섭을 받아 오류가 발생할 수도 있다.
1. 정상 전송
수신 단말기가 데이터 프레임을 제대로 수신했다는 의미의 긍정응답 프레임을 회신함으로써 하나의 데이터 프레임에 대한 전송 과정을 완료하는 거서
2. 프레임 변형
데이터를 전송할 때 프레임이 변형되어 전송되는 경우. 프레임 오류를 인지한 수신 단말기가 송신 단말기에게 부정응답 프레임을 전송함으로써 원래의 데이터 프레임을 재전송하여 오류 복구
3. 프레임 분실
데이터를 전송할 때 프레임이 분실되어 전송되는 경우. 송신 단말기가 또는 수신 단말기의 타임아웃 기능을 이용해 복구
4. 비트 오류
데이터 전송 시 신호가 부호화된 이진 데이터를 운반하고 있을 경우 0 -> 1 로, 1 -> 0 으로 변화시키는 과정에서 생기는 오류.
종류 | 설명 |
단일 비트 오류 | 주어진 데이터 단위 중 오직 하나의 비트만이 1 -> 0 또는 0 -> 1로 변경되어 발생되는 오류 |
다중 비트 오류 | 데이터 단위에서 두 개 이상의 비연속적인 비트들이 1 -> 0 또는 0 -> 1로 변경되어 발생되는 오류 |
버스트 오류 | (= 폭주 오류) 단일 데이터 단위에서 두 개 이상의 연속적인 비트들이 1 -> 0 또는 0 -> 1로 변경되어 발생되는 오류 |
오류제어
데이터 전송 시 기본적인 오류 복구 기능에는 수신 단말기의 응답 프레임, 송신 단말기의 타이머 기능, 순서번호 기능 등이 있다
1. 수신 단말기의 응답 프레임
송신 단말기가 전송한 데이터 프레임의 일부가 깨지는 프레임 변형 오류를 확인한 수신 단말기는 송신 단말기에 응답 프레임을 전송해 원래의 데이터 프레임을 재전송하도록 요구할 수 있다. 이 때 수신 단말기가 전송하는 응답 프레임의 종류에는 데이터 프레임이 정상적으로 도착했을 때 회신하는 긍정응답(positive acknowledgement) 프레임과 데이터 프레임이 깨졌을 때 회신하는 부정응답 (negative acknowledgement) 프레임이 있다. 송신 단말기의 재전송 기능은 수신 단말기의 부정응답 프레임 회신에 의해 이루어진다
2. 송신 단말기의 타이머 기능
송신 단말기가 전송한 데이터 프레임이 수신 단말기에 도착하지 못하는 프레임 분실 오류가 발생하면 수신 단말기는 이 사실을 인지할 수 없게 되므로 오류 복구과정이 송신 단말기 주도로 이루어져야 한다. 송신 단말기는 데이터 프레임을 전송한 후에 일정 시간 이내에 수신 단말기로부터 긍정응답 프레임 회신이 없을 경우 타임아웃 기능을 제공하여 데이터 프레임을 재전송한다
3. 순서번호 기능
수신 단말기의 긍정응답 프레임을 분실하면 데이터 프레임이 제대로 도착했음에도 불구하고 송신 단말기가 이를 인지할 수 없게 된다. 이 때 송신 단말기가 타임아웃 기능에 의해 원래 데이터를 재전송함으로써 수신 단말기가 데이터 프레임을 중복 수신하는 결과가 발생한다. 이러한 경우 수신 단말기는 중복 데이터 프레임을 가려내기 위해 각 프레임 내부에 순서번호를 기록해 둔다
프레임의 구성
전송 프레임에는 상위계층에서 보낸 전송 데이터에 오류 확인을 위한 체크섬(checksum), 송수신 단말기의 주소, 기타 프로토콜에서 사용하는 제어 코드 같은 정보가 포함된다. 프레임을 전송받은 수신 단말기는 제일 먼저 체크섬을 확인하여 전송 중에 프레임 변형 오류가 발생했는지 확인하고, 오류가 발생하면 부정응답 프레임을 회신하여 송신 단말기가 원래의 데이터를 재전송하도록 요구함으로써 복구 과정이 시작된다. 일반적으로 프레임은 내부 정보를 표현하는 방식에 따라 문자 프레임과 비트 프레임으로 나뉜다
종류 | 설명 |
문자 프레임 | 프레임의 내용이 문자로 구성 문자 데이터를 전송할 때 사용 8 비트 단위(혹은 ASCII 문자 코드)의 고정 크기로 작동 하나의 프레임 단위를 구분하기 위해 ASCII 코드의 특수 문자를 이용 (시작 위치에 DLE/STX, 끝나는 위치에 DLE/ETX) 데이터의 내용 중 DLE/STX 혹은 DLE/ETX 문자가 포함되는 문제점이 발생할 수 있어 문자 스터핑을 이용하여 해결 |
비트 프레임 | 문자 단위의 가정을 하지 않고 임의의 비트 패턴 데이터 전송 가능 프레임의 시작과 끝 위치에 플래그(01111110)으로 프레임 단위 구분 플래그와 동일한 비트 페턴이 포함될 수 있으므로 비트 스터핑 이용하여 해결 |
문자 스터핑
문자 프레임의 전송 데이터 중 DLE 문자가 포함되어 발생하는 혼란을 막는 방법으로, 송신 단말기가 전송하는 데이터를 미리 변형함으로써 혼란의 여지를 없앨 수 있는 장점을 가진다. 전송 데이터가 DLE 문자를 포함하면 DLE 문자 다음 DLE 문자를 강제로 추가함으로써, 수신 단말기는 프레임 내용에 DLE 문자가 연속 두 번 나타나면 두 번째 DLE는 송신 단말기가 임의로 추가한 문자라 판단가능하다
네트워크 계층에 데이터를 전달하기 전에 둘 중 하나를 제거해서 문자 프레임의 전송 과정에서 제어 문자를 추가하는 기능이다
비트 스터핑
비트 프레임 방식에서 송신 단말기가 전송하고자 하는 데이터 내용 중에 값이 1인 패턴이 연속해서 5번 발생하면 강제로 0을 추가해서 전송하는 것이다. 플래그에 1이 연속해서 6개이므로 원천적으로 데이터 내용에 플래그 패턴의 발생을 차단
수신 단말기는 송신 과정에서 추가된 0을 제거하여 원래의 데이터를 상위계층에 전달한다
오류의 검출
한 프레임이 전송될 때 수신 측에서 발생할 수 있는 에러의 종류는 다음과 같다
1. 프레임이 비트 에러 없이 도착할 경우
2. 프레임이 1개 이상의 미 검출된 비트 에러를 가지고 도착할 경우
3. 프레임이 1개 이상의 검출된 비트 에러를 가지고 있지만 미검출된 비트 에러 없이 도착할 수 있는 경우
에러 검출을 위한 모든 기술은 이와 같은 가능성을 생각하여 동작하게 된다. 비트의 프레임이 주어질 때 오류 검출 코드를 구성하는 부가적인 비트를 송신 측에 첨가하여 다른 전송 비트들의 함수로 계산 후 두 결과를 비교한 다음 일치여부를 판단하여 검출한다. 이 같은 비교 방식에는 전진 오류 수정방식과 후진 오류 수정 방식이 있다
전진 오류 수정 방식
전송되는 문자나 프레임에 부가적인 정보를 추가해서 오류가 존재하는 경우에 수신 측이 오류 검출 뿐 아니라 정확한 정보가 어떤 것인가를 수신한 비트열로부터 유추할 수 있는 방식
후진 오류 수정 방식
송신 측이 오류를 검출할 수 있을 정도의 부가적인 정보를 문자나 프레임에 첨가시켜 전송하여 수신 측이 오류 검출 시 재전송을 요구하는 방식
여기서 전진 오류 수정을 위한 부가적인 비트 수는 정보의 비트 수가 증가함에 따라 급격히 증가하기 때문에 후진 오류 수정이 좀 더 효율적이다. 송신자가 한 명이고 수신자가 여러 명인 동시 통신인 경우 전진 오류 수정 방식은 재전송이 불가능해진다.
오류 검출 방식
패리티 비트 검사 (parity bit check)
가장 간단한 비트 에러 검출 방식으로 하나의 패리티 비트를 프레임의 각 단어 끝에 붙이는 것이다.
일반적으로 짝수 패리티가 비동기식 전송에 사용되고 홀수 패리티는 동기식 전송에 쓰인다.
예를 들어 송신기가 ASCII코드 1100101을 홀수 패리티를 사용하여 전송한다고 가정하자. 11001011을 보내게 되는데 이것은 수학적으로 배타적 논리합(Exclusive OR)연산을 사용하여 나타낼 수 있다. 수신기는 수신한 문자를 조사하여 전체 1의 갯수가 홀수이면 에러가 발생하지 않은 것으로 간주하고, 한 비트나 임의의 홀수 개의 비트가 전송 중에 바뀌면 에러를 발견하게 된다. 그러나 두 개 또는 임의의 홀수 개의 비트가 전송 중에 바뀌면 에러를 검출해내지 못하는 단점이 있다. 이러한 단점은 세로 중복 검사로 해결 가능하다
세로 중복 검사(LRC ; Longitudinal Redundancy Check)
프레임을 2차원으로 배열된 문자 블록으로 볼 수 있다. 패리티 비트 검사처럼 패리티 비트가 첨부되며 패리티 비트를 모든 문자의 각 비트 위치당 하나씩 첨부한다
여기서 각 문자 끝의 패리티 비트 (V1, ....) 을 수직 중복 검사(VRC; Vertical Redundancy Check)라 하고 패리티 검사 문자는 세로 중복 검사 (LRC; Longitudinal Redunancy Check)라 한다.
여기서 에러가 1개인 경우를 예로 들면 b22가 에러인 경우 V2가 감지하고 L2가 감지한다. 그런데 b11과 b12가 에러인 경우 V1은 감지하지 못하지만 L1, L2는 감지한다. 이와 같이 VRC와 LRC를 모두 사용함으로써 VRC를 사용하는 경우보다 에러율을 줄일 수 있다. 그러나 완벽하게 에러를 발견하지는 못 한다 b11, b12 또는 b31, b32가 에러이면 V1 또는 V3는 감지하지 못하며, b11, b31 또는 b12, b32가 에러이면 L1 또는 L2는 감지하지 못한다. 이러한 단점을 보완하기 위해 순환 중복 검사를 이용한다
순환 중복 검사(CRC; Cyclic Redundancy Check)
CRC라고도 알려진 다항 코드(polynomial code) 방식은 현재의 통신 프로토콜에서 가장 많이 사용하는 오류 검출 기법이다. 특히 일반 네트워크에서 발생하는 오류는 특정 위치에서 집중적으로 발생하는 버스트 에러인 경우가 많은데, 다항 코드 방식은 이런 오류를 검출하는 방식이 높은 것으로 알려져 있다
다항 코드 방식은 계수가 0과 1인 다항식 형태를 기반으로 한다. 다항 코드 방식을 이용한 오류 검사의 동작 원리는 송신 단말기가 전송할 데이터가 m비트의 M(x)라면 데이터 전송 과정에서 n+1비트의 생성 다항식 G(x)를 사용해 오류 검출 코드를 생성하는 것으로 오류제어 기능을 수행한다.
먼저 송신 단말기는 n+1 비트 데이터 M(x)를 생성 다항식 G(x)로 나누어 체크섬 정보를 얻는다. 나누기 연산 과정에서 n+1 비트 데이터 뒤에 M(x)를 보관할 n비트의 공간을 확보하고 이 자리를 모두 0으로 채운 후에 나누기 연산을 수행한다. 연산에서 얻은 나머지 값을 체크섬이라 정의하며 체크섬을 전송 데이터 뒤에 추가해 수신 호스트에 전달해야 한다. 체크섬 계산인 나누기 과정에서 발생하는 다항 연산은 모듈로-2 방식으로 이루어진다. 따라서 덧셈의 자리 올림이나 뺄샘의 자리 빌림 과정이 이루어지지 않으므로 덧셈과 뺄셈은 배타적 논리합 연산과 동일한 결과를 얻는다.
수신 단말기는 전송 오류가 발생했는지를 판단하기 위해 수신한 m + n 비트의 데이터를 생성 다항식 G(x)로 나누는 연산을 수행한다. 연산 결과로 얻은 나머지가 0이면 전송 오류가 없다고 판단하고, 0이 아니면 오류가 발생했다고 판단한다.
'cs' 카테고리의 다른 글
소프트웨어 개발 모델 (0) | 2022.07.18 |
---|---|
인공지능 - 탐색 (0) | 2022.07.14 |
소프트웨어 프로세스와 품질 (0) | 2022.07.11 |
인공지능 - 문제 표현 (0) | 2022.07.10 |
network - 아날로그 / 디지털 신호 (물리계층) (0) | 2022.07.05 |