본문 바로가기
CS(Computer Science)/네트워크

[네트워크] TCP Pipelining 방식 : Go-Back-N & selective repeat

by whdgus928 2023. 2. 9.

2023.01.29 - [CS(Computer Science)/네트워크] - [네트워크] 애플리케이션 계층에서 신뢰성 있는 통신 원리

 

[네트워크] 애플리케이션 계층에서 신뢰성 있는 통신 원리

애플리케이션 계층 간의 통신에서 신뢰성은 어떻게 보장될까? 각 채널별로 필요한 메커니즘에 대해 알아보자. Rdt1.0 에러 없는 완벽한 채널 sender은 패킷 보내고 receiver는 패킷을 받는 과정에서

whdgus928.tistory.com

이전 시간에 학습했던 패킷을 하나씩 보내는 방식은 실생활에서 사용하기 어렵다. 그래서 신뢰성 있는 통신에서 패킷을 더 효율적으로 송수신하기 위해 pipelining을 사용한다.

 

go-back-N과 selective repeat는 실제 사용하는 프로트콜은 아니지만 pipelining으로 여러 개를 전송하는 것을 구현하기 위한 접근법이다.

 

go-back-N

go-back-n은 패킷들을 한번에 묶어서 보내고 오류가 났을 때는 그 부분부터 window 사이즈만큼 다시 재전송한다.

window는 얼마나 묶어서 보낼지에 대한 값이고 사이즈만큼 묶어서 전송한다. window=4 라면 한 번에 4개의 패킷을 전송한다. 

위 그림처럼 window=4 라면 한번에 4개의 패킷을 전송하고 보낸 패킷에 대한 ack 반응이 잘 도착하면 timer를 제거하고 window를 앞으로 전진시킨다. 패킷 유실 없이 다 전송되면 window는 앞으로 쭉쭉 전진한다.

ACK 11의 의미는 패킷을 11번까지 다 잘 받았고 12번을 기다리는 중이라는 뜻이다. ack 받기 전에 timer 끝나면 timer가 끝난 패킷부터 묶어서 재전송한다. 여기서 receiver는 받야 할 시퀀스넘버만 기다리는데 1을 기다리는 상황에서 다른 게 오면 버린다.

 

go-back-N in action

위 그림처럼 2를 기다리고 있느데 2가 유실되고 3이 오면 3을 버린다. 유실된 것은 하나인데 다른 것도 모두 재전송하는 단점이 있다. 실제에서는 window 사이즈가 엄청 클 텐데 모두 재전송을 하게 되면 비효율적이다. 또한 패킷마다 timer를 붙이는 방법도 현실적이지 않다

 

정리 

window 개수만큼 묶어서 보내면서 ack반응이 잘 오면 window를 앞으로 전진시킨다. 유실되면 유실된곳부터 묶어서 재전송한다

 

Selective Repeat

go-back-n이 n개를 다 재전송했더라면 Selective Repeat는 선택적으로 재전송하는 방식이다. 즉 유실된 패킷만 재전송한다. 그러기 위해서는 ACK의 의미가 다른데 선택적으로 재전송하기 위해서 ACK11의 의미를 11을 잘 받아들였다는 뜻으로 이해하면 된다. receiver는 기다리는 패킷이 아니어도 버퍼에 저장을 하고 받으려고 대기 중인 패킷을 기다리게 된다.

 

Selective Repeat in action

Selective repeat의 작동 방식이다. 0 1 2 3을 한번에 보낸다. 0번 잘 받아서 ack0 전송, 1번 잘 받아서 ack1 전송, 2번을 기다렸는데 3번이 오면 3을 버퍼에 저장하고 ack3을 전송한다.

 

Selective repeat의 딜레마

시퀀스 넘버는 세그먼트의 헤더에 들어가는 정보인데 헤더는 작을수록 좋다. 그렇기에 최소한의 시퀀스 넘버를 사용하는 게 좋다. selective repeat을 구현하려면 시퀀스 넘버가 계속 늘어나는 딜레마가 발생한다. 그래서 window 개수만큼만 시퀀스 넘버를 반복해서 사용하게 되면 중복되는 경우가 발생해 패킷이 헷갈리는 문제가 발생한다.

 

여기서 간단한 방법으로는 시퀀스 넘버를 2배로 늘리는 것이다. 하지만 2배도 양이 많아질 수 있어서 윈도우 사이즈에서 최소한으로 늘릴 수 있는 방법은 생각해봐야 할 문제이다

 

실제로 tcp는 두 가지 방법에서 장점만 뽑은 방식을 사용하고 있다

 

다음 시간에 더 정교한 재전송방식에 대해 알아보자

반응형

댓글