ecsimsw
Transport layer_ RDT 본문
Reliable Data Transfer
check-sum으로 에러 체크만 가능한 udp와 달리 tcp는 reliable한 데이터 전송을 보장한다.
reliable을 보장하기 위해 문제가 되는 점은 Error와 Data loss이다. 반대로 이 두가지를 해결할 방법이 있다면 reliable한 데이터 전송이 보장된다는 말과 같다.
Protocol
1. Check error with check sum
2. Feedback on wheter received data has errors.
3. Re-transmission when there's no feedback for a certain period.
위 세가지 기본 원리로 rdt 처리가 진행된다. 우선 pck의 checksum 만으로 오류를 확인하고 feedback하여 비정상적인 패킷을 재전송하는 처리하는 방식에서 시작된다.
이때, 만약 ACK와 NAK, feedback에 에러가 있다면 이 처리 방식은 재전송 여부를 결정할 방법이 없다. 이를 해결하기 위해 ACK일 때만 전송을 확인하고, feedback이 error나 NAK 일 경우 다시 재전송을 하는 처리한다.
Feedback error가 NAK에서 일어난다면 상관 없겠지만, ACK에서 일어난 경우 PCK1이 중복되는 상황이 발생한다.(duplicate packet issue)
전송 시의 PCK과 재전송 시의 PCK이 구분되기만 하면 중복을 확인하고 이를 처리할 수 있다. 패킷에 sequence number를 삽입하는 것으로 PCK에 순서를 표기하면 이전 수신 패킷과 현재 수신 패킷이 같은 것인지를 비교 할 수 있다. 이때, 어차피 비교해야하는 것은 현재와 이전 수신 패킷 두개 뿐이므로 sequence number는 한 비트(0,1)가 순차적으로 돌아가기만 하면 충분하다.
Feedback에도 sequence를 추가하여 이전 피드백과 현재 피드백을 비교하는 것으로 NAK을 불필요하도록 만들 수 있다. 가장 최근 수신에 성공한 PCK의 sequence를 feedback이 기억하고 수신 부에서는 feedback의 sequence으로 재전송 여부를 결정할 수 있다.
위 방식에서 loss에 대한 처리는 timer 만으로 가능하다. 아래 그림과 같이 특정 시간 기간을 두고 해당 기간 안에 반응이 없음(time out)만 확인하면 이전 패킷을 재전송해도 문제 없음을 확인할 수 있다.
Note
'Computer Science > Network' 카테고리의 다른 글
Transport layer_TCP (0) | 2019.08.05 |
---|---|
Pipelining _ Go Back N, Selective Repeat (0) | 2019.07.29 |
Transport layer_UDP (2) | 2019.07.23 |
Socket (0) | 2019.07.11 |
Introduction to network (0) | 2019.07.09 |