데이터 링크 계층

박정빈·2024년 3월 7일

네트워크와 통신

목록 보기
7/10

프로토콜의 기초

데이터 링크 계층에서 두 개의 호스트가 통신하려면 두 호스트를 1:1 로 매칭하는 점대점 방식으로 연결해야한다.
여러 호스트가 연결된 멀티드롭(multi- drop)방식도 있는데 이런 방식을 지원하려면 호스트 주소 개념이 필요하다. 멀티드롭 방식에서 전송된 프레임은 모든 호스트에게 전달된다. 그 중 수신 호스트를 구별하기 위한 주소 개념이 필요하다.

물리 계층을 통해 이루어지는 데이터 전송 과정에는 물리적 전송 오류가 발생할 수 있는데, 이런 오류의 복구는 데이터 링크 계층의 기본 역할이다. 데이터 링크 계층은 프레임에 오류 발생 시 데이터를 다시 전송하는 재전송 방법을 사용하여 오류를 복구한다.

프레임의 종류

데이터 링크 계층에서 전송 오류를 해결하기 위해 사용하는 프레임에는 정보, 긍정응답, 부정응답 프레임이 있다.

  • 정보 프레임
    정보프레임(I 프레임)은 데이터를 전송하는 용도로 사용한다. 상위계층에서 보낸 데이터와 함께 프레임의 순서번호, 송수신 호스트의 주소 정보를 포함한다. 순서번호(sequence number)는 각 정보 프레임의 고유 번호로, 수신 호스트가 중복 프레임을 구분할 수 있게 해준다.
  • 긍정 응답 프레임
    수신 호스트는 프레임의 내용이 깨졌는지 확인한 후 오류가 없으면 ACK 프레임, 즉 긍정 응답 프레임을 회신한다.
  • 부정 응답 프레임
    수신 호스트는 프레임의 내용이 깨졌는지 확인한 후 오류가 있으면 NAK 프레임, 즉 긍정 응답 프레임을 회신한다. 송신 호스트는 오류가 발생한 프레임을 동일한 순서 번호로 재전송 해야 한다.

이 세가지 프레임을 사용해 데이터 링크 계층의 전송 프로토콜을 작성할 수 있다. 프로토콜 설계 과정에서 다루는 내용은 주로 오류 제어, 흐름 제어, 양/단방형 전송 등이다.

전송 프로토콜

오류/흐름 제어가 없는 프로토콜

전송 프로토콜의 구조를 단순화하기 위해 통신환경을 다음과 같이 가정해보자

  • 단방향 통신
  • 전송 오류가 없는 물리 매체
  • 무한 개의 수신 버퍼

이 가정대로의 데이터 전송은 구조가 단순하다. 송신 호스트가 원하는 만큼 프레임을 보내는 것이다.

오류 제어가 없는 프로토콜

이제, 수신 호스트의 수신 버퍼가 유한하다고 가정해보자 버퍼에 일시 보관할 수 있는 프레임의 개수가 제한되므로 프레임 분실 오류를 방지하기 위해 흐름 제어(flow control) 기능이 필요하다.

흐름 제어 기능은 주로 수신 호스트가 송신 호스트의 프레임 전송 시점을 제어하는 형태로 이루어진다. 수신 호스트가 긍정 응답 프레임을 보내는 것인데, 이로써 긍정 응답의 기능을 수행함과 동시에, 다음 프레임을 전송하도록 지시하는 흐름 제어 기능도 수행하는 것이다. 이런 방식을 정지-대기(stop-wait)방식이라고 한다. 이 방식은 전송 효율이 매우 떨어지기에 잘 사용하지 않는다.

흐름 제어 기능을 제공하지 않으면, 버퍼 부족으로 프레임 분실 오류가 발생할 수 있어 중복 프레임을 수신할 수 있다. 따라서 중복 프레임을 구분할 수 있는 순서 번호 기능이 필요하다. 그러나 단순히 ACK 프레임만 보내는 간단한 환경에서는 분실 오류에 의한 중복 프레임이 발생하지 않기에 순서 번호를 사용하지 않아도 된다.

단방향 프로토콜

단방향 환경에서 프레임 분실 오류와 프레임 변형 오류가 발생할 수 있다.
프레임 분실시 수신 호스트는 정보 프레임을, 송신 호스트는 ACK 프레임을 무한정 기다린다. 이를 예방하기 위해 송신 호스트의 타임아웃(Timeout)기능이 필수다. 일정 시간까지 ACK 프레임을 받지 못하면 프레임 분실로 간주하여 재전송 하는 것이다.

NAK가 없는 경우 정보 프레임 또는 ACK 프레임 분실 시 송신 호스트의 timeout 기능을 사용해, 시간 초과시 프레임을 재전송한다.
프레임 변형시에는 NAK가 없으므로 수신 호스트는 응답을 할 수 없고 송신 호스트에서 시간 초과되어 프레임을 재전송한다.
NAK가 있는 경우에도 프레임 변형 시 timeout을 기대하며 해당 프레임을 무시하는 방식으로 재전송을 기다릴 수 있다. NAK 프레임을 사용한다면 프레임 분실과 변형 오류응 명확이 구분할 수 있다. 그러나 변형된 내용이 순서 번호처럼 중요한 정보이거나, 네트워크 요소 때문에 NAK 프레임을 못 보낼 수도 있다.

양방향 프로토콜 - 슬라이딩 윈도우 프로토콜

앞선 가정과는 반대로, 실제 통신 환경에서 데이터 전송은 대부분 양방향으로 이루어진다. 슬라이딩 윈도우 프로토콜의 원리는 현재 대부분의 통신 프로토콜에서 사용하고, 다음의 기본 절차를 따른다.

  • 송신 호스트는 보내려는 데이터 뿐만 아니라 프레임의 순서 번호, 오류 검출 코드 등을 프레임에 표기 후에 정해진 순서 번호에 따라 순차적으로 송신한다.
  • 수신 호스트는 수신한 프레임의 순서 번호에 근거하여 응답 프레임을 회신해야 한다. 일반적으로 응답 프레임의 순서 본호는 정상 수신한 프레임의 번호가 아니라, 다음에 수신하길 원하는 프레임 번호를 표기한다. 따라서 그 번호 이전의 프레임은 모두 제대로 수신했다는 의미가 된다.
  • 송신 호스트는 송신한 정보 프레임을 송신 윈도우라 하는 자신의 내부 버퍼에 유지해야한다. 이곳의 프레임들은 긍정 응답을 받지 못한 프레임이다.
  • 수신 호스트도 자신의 내부 버퍼인 수신 윈도우를 유지할 수 있다. 수신 윈도우에는 개념적으로 수신을 기대하는 프레임의 수신 번호가 들어가기 때문에, 프로토콜 동작 방식에 따라 크기가 달라질 수 있다.
    선택적 재전송(Selective Retransmmission) 방식 에서는 프레임의 도착이 비순서적으로 이루어져도 처리가 가능하기에 송수신 윈도우 크기가 동일하다.
    그러나 고백N(Go-Back-N) 방식에서는 수신 호스트가 항상 이전에 수신한 프레임 바로 다음 프레임만 기다리기에 수신 윈도우 크기가 1이면 충분하다.

흐름 제어

이 프로토콜의 이름인 슬라이딩 윈도우가 의미하는 윈도우의 이동은 흐름 제어 기능을 상징한다. 즉, 수신 호스트가 연속으로 수신할 수 있는 정보 프레임의 개수를 윈도우의 크기로 지정함으로써, 송신 호스트의 데이터 전송 속도를 제어한다.

순서 번호

정보 프레임의 내용에는 고유한 순서 번호가 부여된다. 0 부터 임의의 최댓값까지 순환 방식(최댓값 다음이 0)으로 할당된다. 따라서 프로토콜을 설계할 때 처리 중인 서로 다른 프레임에 같은 순서 번호를 부여하지 않도록 해야한다. 이를 위해 기본적으로 순서 번호의 최댓 값이 송신 윈도우 크기보다는 커야한다.

정보 프레임의 내용에는 순서 번호를 위한 공간이 확보되어 있는데, 이 크기다 n비트라고 하면 순서 번호의 범위는 02n10\sim 2^n-1이다. 정지 대기 방식의 프로토콜은 n=1 인 경우이다.

윈도우 크기

슬라이딩 윈도우 프로토콜은 원리상 흐름 제어를 지원하기 위한 기능이다. 송신 호스트가 ACK를 박지 않고 전송 할 수 있는 정보 프레임의 최대개수를 규정한다. 이 연속으로 전송 가능한 정보 프레임의 수를 윈도우 크기라고 하며, 이 값은 송신 윈도우 크기다.

윈도우에 포함되는 정보 프레임의 관리는 순서 번호를 기반으로 이루어진다. 이들 순서 번호의 묶음이 윈도우가 되는 것이다. 송신 윈도우에 보관된 프레임은 하위 순서 번호 부터 차례로 처리된다.

연속형 전송

정지-대기 방식 프로토콜은 송신 윈도우의 크기가 1인 경우이다. 이 방식은 전송 효율이 떨어지기에 윈도우의 크기를 늘려서 여러 정보 프레임을 연속으로 전송할 수 있어야 하는데, 그런 방식을 연속형 전송(pipelining)이라고 한다.

정보 프레임을 연속으로 보내는 상황에서는 오류 발생률에 따라 전송 효율이 영향을 받는다. 연속형 전송 방식에서 오류를 해결하는 방법에는 선택적 재전송 방식과 고백N방식이 있다.

예를 들어 윈도우의 크기가 8인 환경에서 송신 호스트가 10~17번 정보 프레임을 전송했다. 12번 프레임만 오류가 발생한 상황에서 12번 프레임만 재전송 하면 될 것 같지만, 방식에 따라 다르다.

  • 고백N(Go-Back-N) 방식
    오류가 발생한 12번 프레임 이후 프레임도 모두 재전송하는 방식이다. 정상 수신된 프레임까지 모두 재전송하니 비효율적이라고 생각될 수 있지만, 전송 지연등에 따라서는 효과적인 처리방법이 될 수 있다.
    수신 호스트는 12번 프레임이 전송 오류가 났을때 이후 프레임은 버린다. 따라서 수신 윈도우 크기가 1 이다.
  • 선택적 재전송 방식
    오류가 발생한 프레임만 선택적으로 재전송 하는 방식이다.
    수신 호스트는 12번 프레임 이후 프레임을 보관해두고 있는다. 따라서 수신 윈도우 크기는 송신 윈도우 크기와 같고 도착 순서가 송신 순서와 같지 않을 수 있다.

피기배킹

양방향 전송 기능을 갖는 채널 방식에서는 양방향으로 동시에 정보 프레임과 응답 프레임을 교차하여 전송할 수 있다. 정보 프레임의 구조를 재정의하여 정보 프레임을 보내며 응답 기능 까지 하게 만들어 전송 효율을 높인 것을 피기배킹(piggybacking)이라고 한다.

앞선 프로토콜 동작과정에서, 정보 프레임에는 전송할 데이터와 그 순서번호가 있고, 응답 프레임에는 다음에 수신할 프레임의 순서 번호가 있다. 따라서 두 순서 번호를 모두 표기하면 된다.

0개의 댓글