데이터 링크 계층에서는 전송 데이터를 프레임이라는 작은 단위로 나누어 처리한다. 전송 프레임에는 상위 계층에서 보낸 전송 데이터의 오류를 확인하는 체크섬, 송수신 호스트의 주소, 기타 프로토콜에서 사용하는 제어 코드 같은 정보가 포함된다.
프레임을 전송받은 수신 호스트는 제일 먼저 체크섬을 확인해 전송중에 프레임 변형 오류를 발생했는지 확인해야 한다. 오류가 발생하면 부정 응답 프레임을 회신하여 송신 호스트가 원래의 데이터를 재전송하도록 요구함으로써 복구 과정을 시작해야 한다.
프레임 내용에 포함되는 정보는 프로토콜의 용도에 따라 다르다. 일반적으로 프레임은 내부 정보를 표현하는 방식에 따라 문자 프레임과 비트 프레임으로 구분된다.
문자 프레임
문자 프레임은 프레임 내용이 문자로 구성되므로 문자 데이터를 전송할 때 사용한다. 문자 프레임 방식은 8비트 단위(또는 ASCII 문자 코드)의 고정 크기로 동작한다.
프레임의 구조

하나의 프레임 단위를 구분하기 위해 프레임의 앞뒤에 ASCII 코드의 특수 문자를 이용한다. 즉, 각 프레임의 시작 위치에 DLE, STX 문자를 추가하고, 끝나는 위치에는 DLE, ETX를 추가해 프레임의 다른 정보와 구분할 수 있도록 한다.
프레임의 시작과 끝 위치에 프레임 구분용 특수 문자를 사용하며, 그 사이에는 프로토콜에서 정의한 제어 정보와 전송 데이터를 포함한다.
문제점
데이터의 내용중에 DLE, STX나 DLE, ETX 문자가 포함될 수 있다는 것이다. 결과적으로 프레임을 수신하는 호스트가 프레임의 시작과 끝 위치를 결정하는데 혼선을 준다. 이러한 현상은 문자 프레임 방식을 사용해 실행 파일과 같은 이진 코드 데이터를 전송하는 경우에 발생할 확률이 높다.
문자 스터핑

문자 스터핑은 문자 프레임 내부의 전송 데이터 DLE 문자가 포함되면서 발생하는 혼란을 예방하는 방법이다. 송신 호스트가 전송하는 데이터를 미리 조작함으로써 혼선의 여지를 없앨 수 있다.
전송 데이터가 DLE 문자를 포함하면 DLE 문자 다음에 DLE 문자 하나를 강제로 추가한다.
수신 호스트는 프레임 내용에 DLE 문자가 연속해서 두 번 나타나면 두번째 DLE는 송신 호스트가 임의로 추가한 문자라고 판단할 수 있다.
상위 계층인 네트워크 계층에 데이터를 전달하기 전에 둘 중 하나를 제거해야 한다. 문자 프레임의 전송 과정에서 제어 문자를 추가하는 기능을 문자 스터핑이라 한다.
문자 스터핑 기능이 올바르게 동작하는 이유는 프레임의 시작과 끝을 나타내는 제어 코드에는 어떤 경우에도 DLE 문자가 연속해서 두 번 발생하지 않기 때문이다.
비트 프레임
비트 프레임 방식은 문자 단위의 가정을 없애고, 임의의 비트 패턴 데이터를 전송할 수 있다. 프레임의 시작과 끝 위치에 플래그라는 특수하게 정의된 비트 패턴을 사용해 프레임 단위를 구분한다.
문자 프레임 방식에서 DLE 패턴이 프레임의 내용에 나타날 가능성이 있는 것처럼, 비트 프레임 방식에서도 플래그와 동일한 비트 패턴을 포함할 수 있다. 따라서 데이터의 내용에 이 패턴이 나타나면 전송하기 전에 이를 적당히 조작하는 과정이 필요하다.
프레임의 구조

데이터를 전송하기 전에 프레임의 좌우에 플래그를 추가하고 수신 호스트는 이 플래그를 제거해 전송 데이터와 필요한 제어 정보를 상위 계층에 전달할 수 있다.
비트 스터핑

비트 프레임 방식에서는 송신 호스트가 전송하고자 하는 데이터의 내용중에 값이 1인 패턴이 연속해서 5번 발생하면 강제로 0을 추가해 전송한다. 플래그는 1이 연속해서 6개 나오는 패턴이므로 원천적으로 데이터 내용에 플래그 패턴이 발생하는 것을 차단하기 위함이다. 프레임의 내용에 굵게 표시된 0은 송신 호스트가 추가한 비트이다.
수신 호스트가 수신한 데이터의 내용에서 플래그 패턴 외에는 어떤 경우에도 1이 연속해서 5개를 넘지 않는다. 플래그 패턴과 동일한 형태의 패턴이 데이터 링크 계층의 전송 데이터에는 발생할 수 없다.
이 기능을 비트스터핑이라 하며, 수신 호스트는 송신 과정에서 추가된 0을 제거하여 원래의 데이터를 상위 계층에 전달한다.
Reference
쉽게 배우는 데이터 통신과 컴퓨터 네트워크