Yozzang의 해킹일기 💻
article thumbnail
Published 2022. 5. 26. 00:29
Reliable Data Transfer (RDT) Networking
728x90

이번 포스트에서는 신뢰성 있는 데이터 전송에 대해 다루겠다.

먼저 unreliable channel, 즉 신뢰성 없는 채널은 다음과 같은 요인이 존재한다.
1. Message (packet) error
2. Message (packet) loss

reliable channel은 위에 나열된 요인을 없애는 것이 주목표라고 할 수 있다.

rdt 1.0

: Reliable Transfer over Reliable Channel (신뢰성 있는 채널이 이미 있다고 가정)

rdt 1.0
  • 이미 에러도 없고 로스도 없는 환경이다.
  • 그러므로 sender는 단지 헤더를 붙이고 다음 레이어로 전송
  • receiver는 헤더를 제거하고 다음 레이어로 전송

rdt 2.0

: Channel with Bit Errors (로스는 없고 에러만 존재하는 채널)

rdt 2.0
  • 에러를 탐지하는 checksum(체크섬) 추가
  • 피드백기법 적용
  • 긍정적인 피드백: ACKs(전송 완료)
  • 부정적인 피드백: NAKs(에러 발생)
  • 에러 발생 시 재전송 시도
  • 성능 안 좋으니 실제 사용 X
  • Stop-and-wait protocol

그러나 피드백에 에러가 발생하면 어떨까?

rdt 2.0
  • sender가 "My"라는 내용을 전송완료하면 receiver가 이에 해당하는 ack 피드백을 보냄
  • ack 피드백이 도중에 에러를 발생하여 도착하지 못함
  • sender가 다시 "My"라는 내용을 전송함
  • reciever 측에 똑같은 내용이 두 번 왔으니 하나 discard(무시)함
  • 그러나 'A', 'A', 'B', 'C'와 같이 중복된 내용을 전달하려고 할 때 피드백에 에러가 발생하면 문제 발생

rdt 2.1

: Introducing Sequence Number (rdt 2.0버전에 시퀀스 번호가 추가된 채널)

  • sender가 전송할 때 시퀀스 번호를 붙여서 전송
  • 시퀀스 번호가 똑같으면 Duplicate 패킷임
  • 중복 여부만 확인하면 되므로 총 2비트(0, 1) 필요

rdt 2.2

: NAK-free Version (NAK이 없는 rdt 채널)

  • 마지막으로 정상 수신된 세그먼트의 Sequence Number정보가 Ack 세그먼트의 헤더에 포함시킨다.
  • 즉 시퀀스 번호가 똑같으면 긍정(전송 완료), 다르면 부정(에러 발생)

rdt 3.0

: Lossy Channel With Bit Error (에러와 로스 둘 다 존재하는 채널)

  • 타이머 사용
  • sender가 패킷을 보낼 때마다 타이머를 잼
  • ack이 타이머 내에 도착하면 다음 패킷을 보낼 때 타이머 리셋
  • 타임아웃을 됐음에도 불구하고 피드백이 없으면 재전송
  • 타이머의 시간이 중요함(적당한 값을 사용해야 함)

'Networking' 카테고리의 다른 글

TCP  (0) 2022.06.11
Go-Back-N & Selective Repeat  (0) 2022.06.04
Transport Layer (전송 계층)  (0) 2022.05.06
Distance-Vector Algorithm (거리 벡터 알고리즘)  (0) 2022.05.02
Link-State Algorithm (링크 상태 알고리즘)  (0) 2022.04.14
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!