ARQ — 다시 보내기의 기술
프레임이 중간에 사라지거나 오류가 발견됐을 때 어떻게 할까요. 이더넷 자체는 조용히 버리는 방식을 취한다고 앞서 이야기했습니다. 그런데 상위 계층에서는 그냥 포기할 수 없습니다. ARQ는 Automatic Repeat reQuest의 약자로, 문제가 생긴 프레임을 자동으로 다시 요청하는 메커니즘입니다.
Stop-and-Wait ARQ
가장 단순한 ARQ는 Stop-and-Wait 방식과 결합됩니다. 보내는 쪽이 프레임을 보내면서 타이머를 켭니다. 일정 시간 안에 응답(ACK)이 오면 다음 프레임을 보냅니다. 타이머가 만료될 때까지 응답이 없으면 같은 프레임을 다시 보냅니다. 응답 없음은 두 가지 가능성이 있습니다. 프레임이 도착하지 않았거나, 응답이 도중에 사라졌거나입니다. 어떤 경우든 다시 보내면 됩니다.
Go-Back-N ARQ
슬라이딩 윈도우와 결합하면 더 효율적인 ARQ가 됩니다. Go-Back-N은 이름 그대로 N번으로 되돌아간다는 뜻입니다. 프레임 1, 2, 3, 4, 5를 연속으로 보내다가 3번이 오류로 탐지됐다고 합시다. 받는 쪽은 3번 이후에 도착하는 4번, 5번을 모두 버립니다. 보내는 쪽은 3번부터 다시 보냅니다. 3, 4, 5번을 재전송하는 것입니다.
구현이 단순하다는 장점이 있습니다. 받는 쪽은 순서대로 온 것만 받아들이면 됩니다. 단점은 3번 하나가 문제였는데 4번, 5번까지 함께 재전송하는 낭비입니다.
Selective Repeat ARQ
낭비를 줄이는 방법이 Selective Repeat입니다. 문제가 생긴 프레임만 골라서 다시 보냅니다. 3번에 오류가 생겨도 4번, 5번은 버리지 않고 버퍼에 저장해 둡니다. 3번 재전송이 성공하면 버퍼에서 4번, 5번을 꺼내 조합합니다.
받는 쪽이 순서가 어긋난 프레임을 임시 저장하는 버퍼를 가져야 하므로 구현이 복잡해집니다. 그러나 효율이 높습니다. 실제 TCP는 개념적으로 Selective Repeat와 유사한 방식을 씁니다.
ARQ가 필요한 계층
엄밀히 말해 이더넷 자체는 ARQ를 제공하지 않습니다. 이더넷은 오류를 발견하면 버릴 뿐, 재전송을 요구하지 않습니다. ARQ는 주로 무선 통신의 데이터링크계층이나 전송계층의 TCP가 담당합니다. 개념은 데이터링크계층에서 탄생했지만, 실제로는 TCP에서 가장 많이 쓰이는 메커니즘입니다. 다음 장에서는 이 모든 것이 동작하는 무대인 MAC 주소와 이더넷의 세계로 들어갑니다.