IT 지식/네트워크(Network)

컴퓨터 네트워크 - 신뢰성 있는 데이터 전송 (Pipelined Protocols)

나아가는중 2021. 12. 2. 23:00
반응형

신뢰성 있는 데이터 전송과 RDT를 먼저 알고 봐야 합니다.

https://dlee0129.tistory.com/198

 

컴퓨터 네트워크 - 신뢰성 있는 데이터 전송 (RDT)

신뢰성 있는 데이터 전송 신뢰성 있는 데이터 전송은 네트워크 중요 10가지 토픽 중 한 가지일 정도로 중요하게 여겨진다. 이는 Data Link layer, Transport layer, Application layer에서 구현된다. 이 중 Transp.

dlee0129.tistory.com

 

Pipelined Protocols

Pipelined protocols에서는 go-Back-N, selective repeat 방식을 사용하여 RDT 3.0의 성능 문제를 해결한다. ACK를 받지 않고도 복수개의 패킷을 전송할 수 있게 하여 ACK를 받을 때까지 대기시간 동안 동작할 수 있다. 복수 개의 패킷을 구별하기 위한 더 큰 범위의 sequence numbers를 필요로 한다.

 

Go-Back-N과 selective repeat 두 방식 모두 송신측은 Ack를 받지 않고도 최대 N(Window size) 개까지의 패킷을 보낼 수 있다.

 

Window

Window는 Go-Back-N, Selective Repeat에서 사용되는 ACK를 받지 않고도 전송할 수 있는 최대 패킷의 갯수 N이다. 패킷 송수신시에 따라 송신 측과 수신 측의 Window가 이동하므로 Go-Back-N, Selective Repeat 프로토콜을 'sliding window protocol'이라고도 한다.

 

Go-Back-N

수신측은 누적(cumulative) ACK를 보낸다. 예로 ACK 8은 패킷 8번을 잘 받았다가 아닌 패킷 8번까지 잘 받았다는 뜻이다. 만약 패킷 5가 손실이 발생하여 오지 않고 패킷 6이 왔다면 패킷 6을 모두 드롭하고 정상적으로 받았던 이전 ACK, ACK4(duplicate ACK)를 보낸다.

 

송신자는 가장 오래된 unacked 패킷 하나에 대해서만 타이머를 유지한다. ACK가 오지 않아 타이머가 끝나면 타임아웃이 발생한 패킷 n부터 시작해서 이미 보낸 모든 패킷을 재전송한다.

 

패킷 헤더에 k-bit seq number(0 ~ 2^k - 1)를 사용한다. 이 때 window size는 2^k보다 작게 설정해야 한다. 패킷을 window 크기만큼 모두 보내면 ACK를 받아 window가 이동하기 전까지 대기한다.

 

TCP는 Go-Back-N 방식과 가까운 형태를 사용한다. 누적 ACK를 사용하며 한개의 타이머만 사용한다. 하지만 순서에 맞지 않는 패킷을 수신 시 버퍼링 할 수 있는 점이 다르다.

 

Selective Repeat:

수신측은 패킷마다 개별적인 ACK를 보낸다. ACK 8은 패킷 8을 잘 받았다는 의미이며, 패킷 5가 손실이 발생하여 오지 않고 패킷 6이 왔다면(out-of order) 버퍼링 하고 해당 패킷을 정상 수신했다는 ACK 6을 보낸다.

 

송신자는 각 unacked 패킷마다 타이머를 유지하여 해당 패킷의 타이머가 끝나면 해당 패킷만을 재전송한다. ACK를 수신하면 해당 타이머를 해지한다.

 

일반적인 패킷 송수신시 window의 움직임은 송신 위도우는 ACK를 1개 받으면 1 슬롯 이동하며, 수신 윈도우는 패킷 하나를 받으면 1 슬롯 이동한다. 하지만 송신 윈도우에서 ACK를 받아도 그 이전 패킷의 ACK가 오지 않은 경우 window는 움직이지 않는다. 수신 윈도우에서도 수신 측은 순서에 맞지 않는(out-of order) 패킷을 수신한 경우 버퍼링 하는데, 이 버퍼링 하고 있는 패킷에 대해 window는 움직이지 않는다.

 

Selective repeat에서는 N <= 1/2 seq # size를 만족해야 한다. 이를 만족하지 못하면 수신측에서 재전송된 패킷과 새로운 패킷을 구별하지 못하는 경우가 발생할 수 있다. 

반응형