데이터 링크 계층에서 두 개의 호스트가 통신하려면 두 호스트를 1:1 로 매칭하는 점대점 방식으로 연결해야한다.
여러 호스트가 연결된 멀티드롭(multi- drop)방식도 있는데 이런 방식을 지원하려면 호스트 주소 개념이 필요하다. 멀티드롭 방식에서 전송된 프레임은 모든 호스트에게 전달된다. 그 중 수신 호스트를 구별하기 위한 주소 개념이 필요하다.
물리 계층을 통해 이루어지는 데이터 전송 과정에는 물리적 전송 오류가 발생할 수 있는데, 이런 오류의 복구는 데이터 링크 계층의 기본 역할이다. 데이터 링크 계층은 프레임에 오류 발생 시 데이터를 다시 전송하는 재전송 방법을 사용하여 오류를 복구한다.
데이터 링크 계층에서 전송 오류를 해결하기 위해 사용하는 프레임에는 정보, 긍정응답, 부정응답 프레임이 있다.
이 세가지 프레임을 사용해 데이터 링크 계층의 전송 프로토콜을 작성할 수 있다. 프로토콜 설계 과정에서 다루는 내용은 주로 오류 제어, 흐름 제어, 양/단방형 전송 등이다.
전송 프로토콜의 구조를 단순화하기 위해 통신환경을 다음과 같이 가정해보자
이 가정대로의 데이터 전송은 구조가 단순하다. 송신 호스트가 원하는 만큼 프레임을 보내는 것이다.
이제, 수신 호스트의 수신 버퍼가 유한하다고 가정해보자 버퍼에 일시 보관할 수 있는 프레임의 개수가 제한되므로 프레임 분실 오류를 방지하기 위해 흐름 제어(flow control) 기능이 필요하다.
흐름 제어 기능은 주로 수신 호스트가 송신 호스트의 프레임 전송 시점을 제어하는 형태로 이루어진다. 수신 호스트가 긍정 응답 프레임을 보내는 것인데, 이로써 긍정 응답의 기능을 수행함과 동시에, 다음 프레임을 전송하도록 지시하는 흐름 제어 기능도 수행하는 것이다. 이런 방식을 정지-대기(stop-wait)방식이라고 한다. 이 방식은 전송 효율이 매우 떨어지기에 잘 사용하지 않는다.
흐름 제어 기능을 제공하지 않으면, 버퍼 부족으로 프레임 분실 오류가 발생할 수 있어 중복 프레임을 수신할 수 있다. 따라서 중복 프레임을 구분할 수 있는 순서 번호 기능이 필요하다. 그러나 단순히 ACK 프레임만 보내는 간단한 환경에서는 분실 오류에 의한 중복 프레임이 발생하지 않기에 순서 번호를 사용하지 않아도 된다.
단방향 환경에서 프레임 분실 오류와 프레임 변형 오류가 발생할 수 있다.
프레임 분실시 수신 호스트는 정보 프레임을, 송신 호스트는 ACK 프레임을 무한정 기다린다. 이를 예방하기 위해 송신 호스트의 타임아웃(Timeout)기능이 필수다. 일정 시간까지 ACK 프레임을 받지 못하면 프레임 분실로 간주하여 재전송 하는 것이다.
NAK가 없는 경우 정보 프레임 또는 ACK 프레임 분실 시 송신 호스트의 timeout 기능을 사용해, 시간 초과시 프레임을 재전송한다.
프레임 변형시에는 NAK가 없으므로 수신 호스트는 응답을 할 수 없고 송신 호스트에서 시간 초과되어 프레임을 재전송한다.
NAK가 있는 경우에도 프레임 변형 시 timeout을 기대하며 해당 프레임을 무시하는 방식으로 재전송을 기다릴 수 있다. NAK 프레임을 사용한다면 프레임 분실과 변형 오류응 명확이 구분할 수 있다. 그러나 변형된 내용이 순서 번호처럼 중요한 정보이거나, 네트워크 요소 때문에 NAK 프레임을 못 보낼 수도 있다.
앞선 가정과는 반대로, 실제 통신 환경에서 데이터 전송은 대부분 양방향으로 이루어진다. 슬라이딩 윈도우 프로토콜의 원리는 현재 대부분의 통신 프로토콜에서 사용하고, 다음의 기본 절차를 따른다.
이 프로토콜의 이름인 슬라이딩 윈도우가 의미하는 윈도우의 이동은 흐름 제어 기능을 상징한다. 즉, 수신 호스트가 연속으로 수신할 수 있는 정보 프레임의 개수를 윈도우의 크기로 지정함으로써, 송신 호스트의 데이터 전송 속도를 제어한다.
정보 프레임의 내용에는 고유한 순서 번호가 부여된다. 0 부터 임의의 최댓값까지 순환 방식(최댓값 다음이 0)으로 할당된다. 따라서 프로토콜을 설계할 때 처리 중인 서로 다른 프레임에 같은 순서 번호를 부여하지 않도록 해야한다. 이를 위해 기본적으로 순서 번호의 최댓 값이 송신 윈도우 크기보다는 커야한다.
정보 프레임의 내용에는 순서 번호를 위한 공간이 확보되어 있는데, 이 크기다 n비트라고 하면 순서 번호의 범위는 이다. 정지 대기 방식의 프로토콜은 n=1 인 경우이다.
슬라이딩 윈도우 프로토콜은 원리상 흐름 제어를 지원하기 위한 기능이다. 송신 호스트가 ACK를 박지 않고 전송 할 수 있는 정보 프레임의 최대개수를 규정한다. 이 연속으로 전송 가능한 정보 프레임의 수를 윈도우 크기라고 하며, 이 값은 송신 윈도우 크기다.
윈도우에 포함되는 정보 프레임의 관리는 순서 번호를 기반으로 이루어진다. 이들 순서 번호의 묶음이 윈도우가 되는 것이다. 송신 윈도우에 보관된 프레임은 하위 순서 번호 부터 차례로 처리된다.
정지-대기 방식 프로토콜은 송신 윈도우의 크기가 1인 경우이다. 이 방식은 전송 효율이 떨어지기에 윈도우의 크기를 늘려서 여러 정보 프레임을 연속으로 전송할 수 있어야 하는데, 그런 방식을 연속형 전송(pipelining)이라고 한다.
정보 프레임을 연속으로 보내는 상황에서는 오류 발생률에 따라 전송 효율이 영향을 받는다. 연속형 전송 방식에서 오류를 해결하는 방법에는 선택적 재전송 방식과 고백N방식이 있다.
예를 들어 윈도우의 크기가 8인 환경에서 송신 호스트가 10~17번 정보 프레임을 전송했다. 12번 프레임만 오류가 발생한 상황에서 12번 프레임만 재전송 하면 될 것 같지만, 방식에 따라 다르다.
양방향 전송 기능을 갖는 채널 방식에서는 양방향으로 동시에 정보 프레임과 응답 프레임을 교차하여 전송할 수 있다. 정보 프레임의 구조를 재정의하여 정보 프레임을 보내며 응답 기능 까지 하게 만들어 전송 효율을 높인 것을 피기배킹(piggybacking)이라고 한다.
앞선 프로토콜 동작과정에서, 정보 프레임에는 전송할 데이터와 그 순서번호가 있고, 응답 프레임에는 다음에 수신할 프레임의 순서 번호가 있다. 따라서 두 순서 번호를 모두 표기하면 된다.