본문 바로가기
Network/old

rdt 요약 시나리오

by 슬픈 야옹이 2023. 4. 14.

rdt 1.0

rdt 1.0은 하위 채널이 완전히 신뢰적이라 가정한다.

Sender는 상위 계층으로부터 데이터를 전달받으면 데이터를 패킷으로 만들어 하위 채널로 전송한다.

 

Receiver는 하위 채널로부터 패킷을 전달받으면 패킷에서 데이터를 추출해 상위 계층으로 전달한다.

 

즉, Sender와 Receiver는 패킷을 전송하고 수신하는 것 외에 하는 동작이 없다.

 

 

rdt 2.0

rdt 2.0부터는 하위 채널에 비트 오류가 발생하는 경우를 고려한다.

비트 오류가 발생한다는 것은 패킷이 손상된다는 의미다.

 

Sender는 Receiver가 패킷의 비트 오류를 검증할 수 있도록 패킷에 checksum을 추가해서 전송한다.

 

Receiver는 수신한 패킷에 대해 정상 패킷이면 ACK, 손상된 패킷이면 NAK를 Sender에게 전송하는 피드백 기능이 추가된다.

 

또한 Sender는 패킷을 전송한 후 Receiver로부터의 응답을 기다리며, NAK를 수신할 경우 패킷을 재전송한다.

 

 

rdt 2.1

사실 rdt 2.0에는 Receiver가 보내는 응답(ACK, NAK)가 손상되는 경우를 고려하지 않았다는 심각한 문제가 존재한다.

따라서 rdt 2.1은 응답 패킷이 손상되는 경우를 추가 고려한다.

 

Sender는 NAK 혹은 손상된 응답을 수신하면 패킷을 재전송하는데, 이 때 Receiver가 중복된 패킷을 수신할 가능성이 있으므로 이를 구분하기 위한 sequence number를 패킷에 추가해 전송한다.

 

Receiver는 seq num을 통해 패킷의 중복 여부를 확인하며, 중복된 패킷을 수신한 경우 ACK를 전송한 뒤, 패킷은 버린다.

 

 

rdt 2.2

rdt 2.2는 rdt 2.1에서 Receiver의 응답 방식을 변경한 것이다.

 

Receiver는 NAK 대신 누적 ACK(가장 최근에 정상수신한 패킷에 대한 ACK)를 응답으로 전송한다.

 

Sender는 패킷을 전송한 후 ACK를 기다리는데, 기다리는 ACK와 다른 ACK를 수신하면 패킷을 재전송한다.

 

 

rdt 3.0

rdt 3.0은 하위채널에 비트 오류가 발생하는 경우와 패킷이 손실되는 경우를 모두 고려한다.

 

Sender는 패킷을 전송한 뒤 timer를 시작하고, 합리적인 시간 동안 대기한 후 ACK를 수신하지 못해 timeout이 발생하면  패킷을 재전송한다.

 

Receiver는 이전까지와 동작이 같다. 수신한 패킷에 대해 누적 ACK를 전송한다.

 

 

 

rdt별 차이점 요약)

rdt 1.0

- 기본적인 송신 및 수신 외에 S, R 하는 일 없음.

 

rdt 2.0

- 하위 채널에 비트 오류가 있는 경우를 고려.

- Sender는 패킷에 checksum을 추가

- Sender는 NAK를 수신하면 패킷을 재전송하는 기능을 추가

- Receiver는 수신한 패킷에 대해 ACK, NAK를 보내는 피드백 기능 추가.

 

rdt 2.1

- 하위 채널에 비트 오류가 있어 응답도 손실되는 경우를 고려.

- Sender 측에서 패킷에 sequence number를 추가.

 

rdt 2.2

- Receiver가 응답으로 ACK, NAK를 쓰지 않고 누적 ACK를 사용.

 

rdt 3.0

- 하위 채널에 비트 오류와 패킷 손실이 일어나는 경우를 모두 고려.

- Sender는 패킷을 전송한 뒤 timer를 시작, timeout이 발생하면 패킷 재전송.

 

 

'Network > old' 카테고리의 다른 글

패킷 지연의 종류  (0) 2023.05.07
Stop-and-Wait, Go-Back-N, Selective Repeat  (0) 2023.04.16
FSM으로 표현한 rdt  (0) 2023.03.23
TCP의 기능  (0) 2023.03.21
ARP (Address Resolution Protocol)  (0) 2023.01.18