<신뢰성 있는 데이터 전송의 원리>
위 그림은 신뢰적인 데이터 전송 연구에 대한 프레임워크이다.
이는 상위 계층 개체에게 제공되는 서비스 추상화는 데이터가 전송될 수 있는 신뢰적인 채널의 서비스로의 추상화이다.
신뢰적인 채널에서는 1) 전송된 데이터가 손상되거나 손실되지 않는다. 2 ) 모든 데이터는 전송된 순서대로 전달된다.
그림에서 송신 측은 rdt_send() 호출에 의해서 위쪽으로부터 호출된다. 수신 측에서는 상위 계층으로 전달될 데이터를 넘긴다. Rdt_rcv() 는 패킷이 채널의 수신 측으로부터 도착 했을 때 호출 된다. 상위 계층에 데이터를 전달하려고 할 때 deliver_date()를 호출한다.
<신뢰적인 데이터 전달 프로토콜의 구축>
<rdt1.0> 완벽하게 신뢰적인 채널 상에서의 신뢰적인 데이터 전송
-> 비트 에러 없음 / 패킷 손실 없음. 가장 이상적인 데이터 전송
하지만 실질적으로 패킷 안의 비트들이 하위 채널에서 손상되기 때문에 rdt2.0모델이 필요하다.
<rdt2.0> 비트 오류가 있는 채널 상에서의 신뢰적 데이터 전송
긍정 확인응답(OK)와 부정 확인응답의로 패킷 손상의 유무를 판단한다. 따라서 수신자가 긍정 확인 혹은 부정 확인으로 송신자에게 알려줌으로써 이러한 프로토콜이 작용한다.
이를 위해서 기본적으로 3가지가 요구된다.
1) 오류 검출 : 비트 오류가 발생 했을 때 수신자가 검출할 수 있어야 하는 기능이 필요하다. -> 체크섬 필드를 통해 판단한다.
2) 수신자 피드백 : 송신자와 수신자는 멀리 떨어진 종단 시스템에서 작동하기 때문에 송신자가 수신자의 상태를 알기 위해 수신자는 송신자에게 피드백을 제공한다(ACK OR NAK)
3) 재전송 : 수신자에서 오류를 가지고 수신된 패킷은 송신자에 의해서 재전송된다.
송신자가 ACK OR NAK을 기다리는 상태에 있을 때, 상위 계층으로부터 더 이상의 데이터를 전달 받을 수 없다. 따라서 rdt2.0를 전송-후-대기 프로토콜로 알려져 있다.
여기서 고려를 안한 것이 있다. 만약 ack 또는 nak의 패킷이 손상된다면 어떻게 오류를 검출할 수 있을까?
Ack와 nak패킷들에 대한 체크섬 비트들을 추가하면 된다. 하지만 문제는 패킷 오류가 어떻게 복구 되는가 이다.
이를 처리하기 위한 방법을 알아보자.
첫 번째 방법은 송신자가 검출뿐만 아니라 비트 오류로부터 회복할 수 있도록 충분한 체크섬 비트들을 추가하는 것이다. 이 방식은 패킷이 손상될 순 있으나 손실되지는 않는 채널의 경우에 즉각적인 해결이 된다.
두 번째 방법은 송신자가 왜곡된 ack 또는 nak을수신할 때 현재 데이터를 단순히 다시 송신하는 것이다. 하지만 이는 중복 패킷을 전송하게 되므로 마지막으로 전송된 ack또는 nak가 송신자에게 정확하게 수신되었는지를 알 수 없게 된다.
이러한 문제에 대한 간단한 해결책은 데이터 패킷에 새로운 필드를 추가하고 이 필드 안에 순서번호를 삽입하는 방식으로 데이터 패킷에 송신자가 번호를 붙이는 것이다.
<rdt3.0>
하위 채널이 패킷을 손실하는 경우를 생각해보자.
1) 어떻게 패킷 손실을 검출할 것인가. 2) 패킷 손실이 발생했을 때 어떤 행동을 할 것인가. 체크섬, 순서번호, ack패킷, 재전송의 사용은 2번의 답이 될 수 있다. 따라서 1번에 대한 해결책이 필요한데 송신자에게 손실된 패킷의 검출과 회복 책임을 부여해보자.
송신자가 데이터 패킷을 전송하고 수신자의 패킷에 대한 ack를 손실했다고 가정하자. 어느 경우에나 송신자에게는 어떠한 응답도 없다. 만약 송신자가 패킷을 잃어버렸다는 것을 확신할 정도로 충분한 시간을 기다릴 수만 있다면, 데이터 패킷은 간단하게 재전송될 수 있다.
그렇다면 얼마나 많은 시간을 기다려야 할까? 송신자는 적어도 송신자와 수신자 사이의 왕복시간 지연에 수신 측에서 패킷을 처리하는데 필요한 시간을 더한 만큼 기다린다. 만일 ack가 이 시간안에 수신되지 않는다면 패킷은 재전송된다. 이것은 송신자 대 수신자 채널에서 중복 데이터 패킷의 가능성을 포함한다. 시간 기반의 재전송 매커니즘을 구현하기 위해 카운트다운 타이머를 도입한다. 매 패킷이 송신된 시간에 타이머를 시작하고 타이머 인터럽트에 반응 그 후 멈춘다.
[참조] Computer Networking: A Top Down Approach - J.F Kurose and K.W. Ross