본문 바로가기
컴퓨터 네트워크

컴퓨터 네트워크 12장 - 프레임 및 다항코드 -

by ChocoPeanut 2017. 4. 18.

컴퓨터 네트워크 12

- 프레임 및 다항코드 -

 

데이터 링크 계층에서는 전송 데이터를 프레임이라는 작은 단위로 나누어 처리한다. 전송 프레임에는 상위 계층에서 보낸 전송 데이터의 오류를 확인하기 위한 체크섬, 송수신 호스트의 주소, 기타 프로토콜에서 사용하는 제어 코드 같은 정보가 포함된다. 프레임은 내부 정보를 표현하는 방식에 따라 문자 프레임과 비트 프레임으로 나누어진다.


문자 프레임은 프레임의 내용이 문자로만 구성된다. 프레임의 시작과 끝에 특수 문자를 사용하여 구분하는데 시작에는 DLE/STX가 나오고 끝에는 DLE/ETX를 두어 프레임을 다른 정보와 구분하게 된다. 하지만 데이터 안에도 DLE/STXDLE/ETX 와 같은 문구가 포함되어 있을 수 있어 데이터를 읽는 과정에서 혼선을 일으킬 수 있다. 이러한 문제를 해결하기 위해 문자 스터핑이라는 기법을 사용한다. 문자 스터핑은 데이터에 DLE가 존재하면 강제로 DLE를 추가하는 작업을 한다. DLE가 두 개가 연달아 나오게 되기 때문에 특수 문자로 인식하지 않는다. 수신측에서 두 개의 DLE가 나오면 뒤에 있는 DLE를 제거하여 데이터를 읽는다.


           


비트 프레임은 임의의 비트 패턴을 전송하는 것이다. 문자 프레임의 경우 문자를 사용하기 때문에 8비트로 떨어져야하는 반면 비트 프레임은 비트 그 자체가 데이터가 되므로 어떠한 비트 크기를 가져도 상관이 없게 된다. 비트 프레임은 프레임과 시작과 끝을 나타내는 비트 패턴으로 플래그(01111110)를 사용한다. 하지만 비트 프레임 역시 데이터에도 플래그와 같은 비트를 가지는 데이터가 존재할 수 있기 때문에 이를 구분해줄 수 있는 기능이 필요하다. 이러한 역할을 하는 것이 비트 스터핑이다. 비트 스터핑은 데이터에서 1이 연속해서 5개가 나타나게 되면 강제로 0을 추가해서 플래그와 같은 비트를 가지는 데이터 구성을 없앤다. 나중에 수신측에서 읽을 때는 0을 제거하여 읽어 들어간다.



프레임 전송 과정에서 발생하는 오류를 극복하는 방법은 크게 두 가지이다. 오류 검출 코드를 넣어 수신 호스트가 오류 검출 후 재전송을 복구하는 방법과 오류 복구 코드를 넣어 수신 호스트가 오류 검출과 복구를 동시에 수행하는 방법이다. 여기에서는 오류 검출에 대해 알아볼 것이다. 오류 검출을 하는 방법에는 3가지가 있다. 패리티 비트, 블록 검사, 다항코드로 오류 검출을 수행할 수 있다.


패리티 비트8비트 구조에서 패리티 비트 1비트를 포함시켜 1비트 오류를 검출하는 방법이다. 전체 1의 개수를 짝수로 맞추기 위해 패리티 비트를 조절한다. 만약 데이터가 1101001이면 14개가 존재하므로 패리티 비트는 0이 되어 전체 데이터의 형태는 11010010이 된다. 여기서 1비트 하나가 오류가 나게 되면 1의 개수가 홀수로 바뀌게 된다. 이 때 수신 호스트는 패리티 검사를 통해 1의 개수가 변경되어 오류가 발생했다는 사실을 인지할 수 있다. 패리티는 홀수로 지정하는 방법도 가능하다.


블록 검사는 패리티 비트 검사의 단점을 보안한 것이라고 할 수 있다. 데이터에서 1비트 오류가 아니라 복수의 비트가 오류가 발생했을 때 짝수와 홀수가 변하지 않을 수가 있다. 이럴 때블록 검사를 실행한다. 블록 검사는 여러 개의 바이트 데이터를 수평 방향과 수직 방향 모두에 패리티 비트를 만들어 검사를 하는 것이다. 하지만 전송되는 데이터의 양과 비교해 오류 검출을 위한 오버헤드가 크다는 단점이 있다.


다항코드CRC로 알려졌는데 현재의 통신 프로토콜에서 가장 많이 사용하는 오류 검출 방법이다. 다항코드는 다항식을 형태를 기반으로 오류를 검출하는 방법이다. 송신 호스트가 전송할 데이터가 m비트의 M(x)라면 데이터 전송 과정에서 n+1비트의 생성 다항식 G(x)를 사용하여 오류 검출 코드를 생성한다. 오류 검출 코드는 송신 호스트가 전송 데이터 M(x)를 생성 다항식 G(x)로 나누어 얻는다. 나누기 위해서 전송 데이터의 끝 부분에 n비트의 공간을 만들어 0으로 채워 넣는다. 나누기 연산을 수행한 후 얻은 나머지 값을 전송데이터 뒤의 n비트 공간에 넣는다. 이렇게 만들어진 m+n 데이터를 수신 호스트에 전달하게 된다. 그리고 수신 호스트는 전송 오류가 발생했는지를 판단하기 위해 수신한 m+n비트의 데이터를 생성 다항식으로 나누는 연산을 수행한다. 연산 결과 얻은 나머지가 0이면 전송 오류가 없다고 판단하고, 0이 아니면 오류가 발생했다고 판단할 수 있다.

 






출처 - 쉽게 배우는 데이터 통신과 컴퓨터 네트워크