728x90
이번 포스트에서는 신뢰성 있는 데이터 전송에 대해 다루겠다.
먼저 unreliable channel, 즉 신뢰성 없는 채널은 다음과 같은 요인이 존재한다.
1. Message (packet) error
2. Message (packet) loss
reliable channel은 위에 나열된 요인을 없애는 것이 주목표라고 할 수 있다.
rdt 1.0
: Reliable Transfer over Reliable Channel (신뢰성 있는 채널이 이미 있다고 가정)
- 이미 에러도 없고 로스도 없는 환경이다.
- 그러므로 sender는 단지 헤더를 붙이고 다음 레이어로 전송
- receiver는 헤더를 제거하고 다음 레이어로 전송
rdt 2.0
: Channel with Bit Errors (로스는 없고 에러만 존재하는 채널)
- 에러를 탐지하는 checksum(체크섬) 추가
- 피드백기법 적용
- 긍정적인 피드백: ACKs(전송 완료)
- 부정적인 피드백: NAKs(에러 발생)
- 에러 발생 시 재전송 시도
- 성능 안 좋으니 실제 사용 X
- Stop-and-wait protocol
그러나 피드백에 에러가 발생하면 어떨까?
- 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 |