프레임
- 데이터 통신망에서 하나의 블록 또는 패킷으로 전송되는 정보의 단위
- 데이터 프레임은 망의 데이터 링크층 프로토콜에 의하여 정의되며 망 노드 간의 매체(선로)상에서만 존재함
- 프레임은 다른 layer들에서는 다른 형식을 취하고, 데이터는 데이터 프레임의 시작 및 끝 제어 정보 사이에 위치함
- 프레임은 내부 정보를 표현하는 방식에 따라 ①문자 프레임과 ②비트 프레임으로 나눔
문자 프레임
- 문자 프레임은 프레임의 내용이 문자로만 구성
- 8비트 단위(또는 ASCII 문자 코드)의 고정 크기로 동작
- 문자 프레임은 프레임의 내용이 문자로만 구성
- 프레임구분
- 프레임의 시작과 끝에 특수 문자를 사용하여 구분하는데 시작에는 DLE/STX가 나오고 끝에는 DLE/ETX를 두어 프레임을 다른 정보와 구분
- 하지만 데이터 안에도 DLE/STX나 DLE/ETX 와 같은 동일 명령어가 포함되어 있을 수 있어 데이터를 읽는 과정에서 혼선을 일으킬 수 있음
- 이러한 문제를 해결하기 위해 문자 스터핑이라는 기법을 사용
- 문자 스터핑은 데이터에 DLE가 존재하면 강제로 DLE를 추가하는 작업을 함
- DLE가 두 개가 연달아 나오게 되기 때문에 특수 문자로 인식하지 않음
- 수신측에서 두 개의 DLE가 나오면 뒤에 있는 DLE를 제거하여 데이터를 읽음
프레임 구조
- 프레임의 시작과 끝에 특수 문자 사용
- 시작: DLE / STX
- 끝: DLE / ETX
- 전송 데이터에 특수 문자가 포함되면 혼선이 발생
[문자 프레임 구조]
- 문자 스터핑 (Character Stuffing): 문자 프레임의 전송 과정에서 제어 문자를 추가하는 기능
- 전송 데이터가 DLE 문자를 포함하면 뒤에 DLE 문자 하나를 강제 추가
- 데이터에 DLE 문자가 두 번 연속 있으면 하나의 DLE 문자 삭제
[문자 스터핑 구조]
- 비트 프레임 (Bit Frame): 프레임의 시작과 끝 위치에 플래그라는 특수하게 정의된 비트 패턴(01111110)을 사용해 프레임 단위를 구분
비트 프레임의 구조
- 데이터 전송 전에 프레임의 좌우에 플래그를 추가
- 수신 호스트는 이 플래그를 제거해 전송 데이터와 필요한 제어 정보를 상위 계층 전달
[비트 프레임 구조]
비트 스터핑 (Bit Stuffing) 알고리즘
- 전송 데이터에 플래그 패턴이 포함되면 혼선이 발생
- 송신 호스트: 전송 데이터가 1이 연속해서 5번 발생하면 강제로 0을 추가
- 수신 호스트: 송신 과정에 추가된 0을 제거하여 원래의 데이터를 상위 계층 전달
[비트 스터핑 구조]
다항 코드
- 현재의 통신 프로토콜에서 가장 많이 사용하는 오류 검출 방법
- 다항식을 형태를 기반으로 오류를 검출하는 방법
오류를 극복하는 방법
- 전송 프레임에 오류 검출 코드를 넣어 수신 호스트가 전송 과정의 오류를 검출
- 순방향 오류 복구: 오류 복구 코드를 사용해 수신 호스트가 오류 복구 기능을 수행하는 방식
- FEC, Forward Error Correction
오류 검출
- 역방향 오류 복구: 재전송 방식을 이용해 오류 복구 (네트워크에서 일반적으로 사용)
- BEC, Backward Error Correction
- ARQ, Automatic Repeat reQuest 방식
- 패리티(Parity) 비트
- 1 바이트(8비트) = 7 비트 ASCII 코드 + 1 패리티 비트
- 짝수 패리티: 데이터 끝에 패리티 비트를 추가해 전체 1의 개수를 짝수로 만듦
- 홀수 패리티: 1의 개수를 홀수로 만드는 것
- 송신 호스트와 수신 호스트는 동일한 패리티 방식을 사용해야 함
[parity bit 구조]
다항 코드
- Polynomial Code
블록 검사
- 짝수개의 비트가 깨지는 오류를 검출
- 수평, 수직 방향 모두에 패리티 비트를 지정
[블록 검사]
생성 다항식
- CRCCyclic Redundancy Code
- 송신측 CRC 처리과정
- 임의의 CRC 발생코드를 선정
- CRC 발생코드의 최고차 차수만큼 원래 데이터의 뒤에 ‘0’을 붙임
- 확장데이터(=원래 데이터+데이터 뒤에 붙인 ‘0’)을 modul0-2 연산을 사용-CRC 발생코드로 나눔
- 나머지가 ‘0’이면 확장 데이터를 그대로 전송함
- 나머지가 ‘0’이 아니면 원래데이터에 나머지를 붙여 전송함
- 수신측 CRC 처리과정
- 수신 장치는 수신된 코드를 동일한 CRC 발생코드로 나눔
- 나머지가 ‘0’이면 오류가 발생하지 않은 것이고, 만약 나머지가 ‘0’이 아니면 전송과정에서 오류가 발생한 것으로 판단
- CRC 처리과정에서 MODULO-2 연산 사용
- 이때 mod-2 연산은 EX-OR 연산
CRC 예시
- CRC 발생코드를 P(X)를 아래와 같이 설정
- CRC 발생코드가 ‘1101’처럼 주어지고 주어지기도 하고 좌측처럼 다항식으로 주어지기도 함
- 만약 다항식으로 주어지면 위의 예처럼 2진 코드로 변환해야 함
- 전송할 데이터가 G(X)가 ‘110010’이라고 하면, CRC 발생코드의 최고차 차수가 3이므로 G(x) 뒤에 ‘0’을 3개 붙여서 확장 데이터 ‘110010000’을 만듦
- 이제 확장 데이터를 CRC 발생코드 ‘1101’로 나누는데 이때 앞에서 말한 modulo-2 연산을 이용
- 나머지 비트수는 CRC 발생코드의 최고차 차수와 같음
- 정보(데이터) ‘110010’에 CRC ‘100’을 붙인 ‘110010100’ 이 전송되는 전송코드
- 이제 수신측에서 전송 데이터 오류가 있는 지 알아보면 수신된 코드를 동일한 CRC 발생코드로 나눔
- 나머지가 ’0‘, 오류가 없음