- 기본 개념
- Pipelining은 송신 측(sender)**이 **ACK(응답)를 받기 전에 여러 개의 데이터를 연속적으로 전송할 수 있도록 하는 방식입니다.
- 특징
- 일반적인 Stop-and-Wait 방식에서는 하나의 데이터가 전송되고 ACK를 받은 후에야 다음 데이터를 전송할 수 있습니다.
- 반면, Pipelining에서는 여러 데이터를 동시에 전송할 수 있어 데이터 전송 과정이 더 효율적입니다.
파이프라인을 통한 이용률의 개선은
![](https://blog.kakaocdn.net/dn/rxq6E/btsK5N88RN8/j0wcrYH3L9PiRrMEvBknw1/img.png)
1. 송신 측에서의 전송 과정
- t = 0: 첫 번째 패킷 비트 전송
- 송신 측이 첫 번째 패킷을 전송하기 시작합니다.
- t = L / R: 마지막 비트 전송 완료
- L: 패킷 크기 (비트 단위)
- R: 전송 속도 (비트/초)
- 첫 번째 패킷의 마지막 비트를 전송하는 데 걸리는 시간은 L / R입니다.
2. 수신 측에서의 동작
- 첫 번째 패킷이 수신 측에 도착하면 **ACK(응답)**을 송신 측으로 보냅니다.
- RTT: 송신 측에서 수신 측으로 패킷을 전송하고 ACK를 받을 때까지의 왕복 시간.
- 여러 패킷이 연속적으로 도착하면 수신 측은 ACK를 계속 송신합니다.
- 두 번째, 세 번째 패킷에 대한 처리는 병렬로 이루어지므로 전송 과정이 더 효율적입니다.
3. 주요 개선점
- Pipelining 효과
- ACK를 기다리지 않고 여러 패킷을 연속적으로 전송해 이용률을 개선합니다.
- 위 그림에서 보여주듯, 3개의 패킷이 병렬적으로 처리됨으로써 송신 측의 대기 시간을 최소화합니다.
Go-back-N
파이프라인 형태로 N개의 ack되지 않은 패킷을 전송할 수 있도록 합니다.
Go-back-N은 누적 ack 을 이용합니다. 반면 selective repeat는 개별적인 ack을 이용합니다.
Go-back-N 에서 sender는 pipeline을 지원하기 위해 sequence number를 증가시켜야합니다. k-bit seq를 가지며 0~2^k-1의 순서 번호를 가집니다.
윈도우 크기 를 정의했을 때, 전송 측이 가지는 Sequence Number의 공간을 정리하면 다음과 같습니다:
1. 윈도우의 정의와 역할
- 윈도우는 전송 가능한 데이터의 범위를 제한하는 역할을 합니다.
- 전송 측은 ACK를 받지 않은 상태에서 최대 개의 패킷을 연속적으로 전송할 수 있습니다.
- 이 범위는 윈도우 크기 과 연관되며, 이는 수신 측이 처리 가능한 데이터의 양을 초과하지 않도록 보장합니다.
요약
윈도우 은 송신 측이 전송 가능한 Sequence Number 공간을 동적으로 제한하여 다음을 보장합니다:
- ACK를 받지 않은 패킷이 개를 초과하지 않음.
- 데이터 흐름 제어와 네트워크 혼잡 제어가 가능.
결론적으로, 송신 가능한 Sequence Number 범위는 현재 ACK 기반으로 윈도우 크기 에 의해 동적으로 결정됩니다.
GoBack-N 수신자 동작
1. 수신자의 expectedseqnum 역할
- expectedseqnum은 수신자가 다음에 수신하기를 기대하는 Sequence Number를 나타냅니다.
- 올바른 순서로 데이터를 수신하고 상위 계층으로 전달하기 위한 기준 역할을 합니다.
2. 패킷 처리 과정
수신자가 패킷을 수신했을 때, 처리 흐름은 다음과 같습니다:
- 패킷의 오류 여부 확인
- 패킷이 손상되지 않았는지 확인 (예: Checksum 검사).
- 패킷에 오류가 있으면 패킷 무시.
- ACK 전송
- ACK는 현재 expectedseqnum을 기반으로 송신자에게 응답합니다.
- ACK는 송신자에게 수신자가 기다리고 있는 다음 패킷을 알리는 역할을 합니다.
ACK-only
수신측은 항상 순서대로 도착한 seq number중에 가장 높은 sequence number로 ACK를 보내면 됩니다. 그리고 이 경우는 중복된 ACK를 유발할 수도 있습니다. 수신측은 항상 expected sequence number만 기억하고 있으면 됩니다.
그리고 순서에 어긋난 패킷이 도착하는 경우도 있는데 GBN에서는 무시를 합니다. 이를 버퍼링을 시키지 않습니다. 그 경우에는 항상 가장 높은 번호의 순서대로 도착한 sequence number로 ACK를 재전송하면 됩니다.
문제점
패킷 오류가 발생하면 재전송되는 것이 많다는 문제점이 있습니다.
Selective Repeat
수신측이 모두 정확하게 수신된 패킷에 대해서 개별적인 ack를 보냅니다.
수신측에서 패킷을 버퍼링합니다. 순서에 어긋난 패킷도 버퍼링한 다음 순서가 맞아지면 상위계층으로 바로 처리를 하면 됩다.
sender측은 ack가 수신되지 않은 패킷에만 재전송을 하면 됩니다. 타임아웃 이벤트가 발생했다고 해서 모든 패킷을 재전송하는 것이 아닙니다.
sr 프로토콜 같은 경우 순서번호 공간 크기의 절반보다 작거나 같아야 합니다.
'IT 프로그래밍 > 컴퓨터네트워크' 카테고리의 다른 글
[컴퓨터네트워크] Flow control (0) | 2024.12.03 |
---|---|
[컴퓨터네트워크] TCP - (1) | 2024.12.03 |
[컴퓨터네트워크] 신뢰성 (1) | 2024.12.03 |
[컴퓨터네트워크] Multiplexing and Demultiplexing (0) | 2024.12.02 |
[컴퓨터네트워크] 전송계층 프로토콜 설명 (0) | 2024.12.02 |