데이터 링크 제어(DLC, DataLink Control)는 두 인접한 노드간의 통신의 프레임 짜기, 오류검출 작업 절차를 포함하는 데이터링크층의 부계층이다.
데이터 링크 층은 비트들을 프레임으로 만들어서 각 프레임이 다른 프레임과 구분되도록 해야한다. 데이터링크층의 프레임 짜기(framing)는 송신자와 수진자의 주소를 추가하여 한 방신지에서 한 목적지로 가는 메시지를 구분한다. 목적지 주소를 패킷이 가야 할 곳을 규정한다. 송신자 주소는 수신자가 수신에 대해 확인응답하는 데 필요하다.
프레임은 고정 길이나 가변 길이가 될 수 있다. 고정 길이 프레임 짜기(fixed-size-framing), 그렇지 않고 크기가 때에따라 바뀌는 방식을 가변 길이 프레임 짜기(variable-size-framing)라고 한다. 고정 길이는 크기 자체가 경계 역할을 하여 경계가 필요없지만 가변에서는 구분해줄 방법이 필요하다.
경계를 구분하는 방법으로는 문자 중심, 비트 중심 두 방법이 있다.
- 문자 중심 framing
- 데이터를 문자로 다룬다.
- 8비트의 flag를 프레임의 시작과 끝에 추가한다.
- 텍스트만 교환할 때에는 인기있었지만 요즘은 그래프, 오디오, 비디오 등 다양한 데이터가 있다 보니 플래그로 사용하는 패턴이 정보에 들어있어 오인하는 경우가 발생하기도 한다.
- 이를 방지하기 위해 바이트 채우기(byte stuffing) 또는 escape character를 사용한다.
바이트 채우기는 텍스트에 플래그나 탈출 문자가 있을 때 마다 여분의 1바이트를 추가하는 처리이다.
- 비트 중심 프로토콜
- 데이터를 bit로 다룬다.
- 문자 중심과 동일하게 8비트의 flag를 프레임의 시작과 끝에 추가한다. (보통은 01111110을 플래그로 사용한다.)
- 오인 문제를 해결하기 위해 비트 채우기를 사용한다.
비트채우기는 0 뒤에 연속되는 5개의 1이 있게 되면 0을 추가로 채워 수신자가 데이터 속의 01111110을 플래그로 오인하지 않도록 한다.
- 간섭: 예측할 수 없는 변경
- 단일 비트 오류: 주어진 데이터 단위 중 하나의 비트만이 역으로 변경되는 오류
- 폭주오류: 데이터에서 2개 이상의 연속적인 비트들이 역으로 바뀌는 오류
-
블록 부호화
- 메시지를 dataword라는 k 비트의 블록으로 나누고, 각 블록에 r개의 중복 비트를 더한 결과를 codeword로 정의
- 블록 부호화로 오류를 찾아내는 법
- 다음 두 조건이 맞으면 수신자는 원래의 코드워드가 바뀐 것을 알 수 있다.
- 수신자는 유효 코드워드의 목록을 가지고 찾을 수 있다.
- 원래의 코드워드가 무효 코드워드로 바뀌었다.
- 다음 두 조건이 맞으면 수신자는 원래의 코드워드가 바뀐 것을 알 수 있다.
-
패리티 검사
- 특정 비트가 홀수개인지 짝수개인지 나타내는 추가 비트를 넣어서 오류 검출
- 단순 패리티 검사 코드는 홀수 개의 오류만 검출한다. (오류가 짝수개면 맞는 것으로 간주)
-
순환 중복 검사(Cyclic Redundancy Check)
- LAN이나 WAN에서 널리 사용된다.
- 미리 나눌 수를 정하고 나머지를 정보로 코드워드 구성
참고