Principles of Reliable Data Transfer
Reliable Channel
- 전송된 Data가 손상되지 않는다.
- 전송된 Data가 손실되지 않는다
- 모든 Data는 전송된 순서대로 전달된다.
Reliable Data Transfer 1.0 => Perfectly Reliable Channel
- Data 단위와 Packet 단위의 차이가 존재하지 않는다.
- 모든 Packet의 흐름은 송신자와 수신자간에 발생한다.
- 완전히 신뢰적인 채널 (Perfectly Reliable Channel)이기 때문에 오류가 발생하지 않는다.
- 즉, 수신자는 송신자에게 Feedback을 제공할 필요기 없다.
- 송신자가 Data를 송신하자마자 Data를 수신할 수 있다고 가정했다.
- 즉, 수신자는 송신자에게 Data를 천천히 송신하라고 요청할 필요가 없다.
Reliable Data Transfer 2.0 => Channel with Bit Errors
- ARQ (Automatic Repeat reQuest) Protocol
- 재전송을 기반으로 신뢰성있는 Data 전송을 가능하게하는 Protocol이다.
- Positive Acknowledgment
- Data를 정확하게 수신되었는지 확인하는 용도로 사용
- Negative Acknowledgment
- Data가 잘못 수신되어 재전송이 필요하다고 수신자가 송신자에게 알려주는 용도로 사용
- ARQ Protocol 구현을 위한 3가지의 Additional Protocol Capabilities
- Error Detection
- Error가 발생한 경우 수신자가 Error를 감지해야한다.
- UDP의 경우 Error Detection을 위해 Checksum Field가 존재한다
- 수신자가 Bit Error를 검출하고 복구할 수 있도록 해준다.
- Error 검출을 위한 추가적인 Bit가 필요하다.
- Receiver Feedback
- 일반적으로 송신자와 수신자는 수천 km 떨어진 서로 다른 End System에서 동작한다.
- 송신자가 Packet이 정확히 수신했는지 알기 위해, 수신자가 송신자에게 Feedback을 제공해야한다
- ACK (Acknowledgement)
- NAK (Negative Acknowledgement)
- Re-transmission
- 오류가 있는 Packet은 송신자에 의해 재전송된다.
- Error Detection
Reliable Data Transfer 3.0: Sending Side => Lossy Channel with Bit Errors
- Sending Side
- 어떻게 Packet 손실을 검출할 것인가?
- 송신자에게 손실된 Packet의 검출과 회복 책임을 부여할 것이다.
- [Case1] Packet이 손실된 경우
- [Case2] ACK가 손실된 경우
- 송신자에게는 어떠한 응답도 없다
- Packet 손실이 발생하는 경우 어떤 행동을 할 것인가?
- 해당 Packet에 대해 Re-transmission을 수행한다.
- Time-Based Retransmission Mechanism을 구현하기 위해, 주어진 시간이 경가된 후 송신자를 Interrupt 할수있는 Counterdown Timer가 필요하다.
- Packet이 송신될 때 타이머를 시작한다.
- Timer Interrupt에 따라 적절한 동작을 수행한다.
- Timer를 중지시킨다.
- 어떻게 Packet 손실을 검출할 것인가?
The TCP Connection
- rdt3.0은 Stop-and-Wait Protocol로 인해 성능 문제가 발생한다.
- 가정
- ☑ 수신자는 Data Packet의 마지막 Bit가 수신되자 ACK Packet을 송신할 수 있다.
- ☑ ACK Packet은 크기가 매우 작아 전송 시간을 무시할 수 있다.
- Network Protocol이 하위 Network Hardware가 제공하는 기능/능력을 제한할 수 있다.
- 지연이 증가하고 성능이 더욱 나빠진다
- Pipelining
- 확인응답 (Acknowledgements)을 기다리지 않고 여러 Packet을 전송하도록 허용하는 방식을 사용한다.
- Ex> ACK를 기다리기 전에 Sender가 3개의 Packet을 전송하도록 허용 => Utilization이 3배 증가한다
- Sequence Number의 범위가 커져야한다.
- ☑ 각각의 전송 중인 Packet은 유일한 Sequence Number를 가져야한다
- ☑ 전송 중이고 확인 응답이 안된 여러 Packet이 있을지도 모르기 떄문이다.
- Protocol의 Sender와 Receiver은 하나 이상의 Packet을 Buffering 해야한다.
- ☑ 최소한 Sender는 ACK을 받지 못한 Packet을 Buffering 해야한다.
- Plpelining 오류 회복의 두 가지 기본적인 접근방법이 있다.
- ☑ Go-Back-N (GBN) => ACK를 기다리지 않고 여러 Packet 전송이 가능하다.
- ☑ Selective Repeat (SR)
'CS > Network' 카테고리의 다른 글
[Network] JavaIO (0) | 2024.03.30 |
---|---|
[Network] TCP (0) | 2024.03.30 |
[Network] UDP (0) | 2024.03.30 |
[Network] Multiplex and Demultiplex (0) | 2024.03.30 |
[Network] Basic (0) | 2024.03.30 |