tcp의 reliable을 충족시키는 protocol은 pipeline 방식을 사용한다. 현실에서는 데이터를 보내는 시간보다 RTT(Round Trip Time)가 훨씬 길기 때문에 더욱 효율적인 통신을 위해 pipeline을 사용한다. 다시 말해서 하나씩 하나씩 패킷을 전송하는 방식이 아니라 일정한 패킷단위를 쏟아붇는 방식으로 통신이 진행된다는 것이다.

 

pipeline protocol의 기본 접근방법, 개념적인 형태 2가지에 대해 알아보자

 

1. Go-Back-N

1) window size

pipeline 방식으로 통신하기 위해 sender와 receiver는 window size를 갖는다. 얼마만큼의 패킷을 한번에 전송하고 받느냐에 관한 크기이다.

2) cumulative ACK

Go-Back-N에서의 ACK는 cumulative한 ACK이다. 만약 ACK 11을 받았다면 11번 패킷을 를 포함한 그 전의 패킷를 모두 받았다는 것을 의미한다.

3) Receiver No buffer

버퍼가 없다. cumulative ack이기 때문에 만약 11번 패킷을 받을차례인데 11번 패킷이 유실되어 그 다음패킷인 12번 패킷이 온다면 receiver는 10번까지의 패킷을 모두 받은 상태에 11번 패킷을 받아야 하므로 12번 패킷을 버리게 된다.

4) time out

window size안에 있는 모든 패킷에 대해 timer가 설정이 된다. 만약 window size가 4이고 6번 패킷이 유실된 상황이라면, windows는 ACK6을 받을 수 없기때문에 6~9패킷에 머물러 있을 것이다. 시간이 흐르면 6번 패킷의 타이머가 터지게 되고 6번부터 시작하여 다시 패킷을 재전송하게 된다. 이때 9번패킷에서 다시 n만큼 돌아와 6번패킷부터 재전송하게 되므로 n만큼 되돌아온다고 하여 Go-Back-N이다.

 

2. Selective Repeat

1) window size

pipeline 방식으로 통신하기 위해 sender와 receiver는 window size를 갖는다. 얼마만큼의 패킷을 한번에 전송하고 받느냐에 관한 크기이다.

2) non-cumulative ACK

개별 패킷에 응답하여 ack를 보낸다.

3) timeout

receiver에게 buffer가 존재하기 때문에 go-back-n처럼 n만큼 되돌아가서 재전송하지 않고, ack를 받지 못한 패킷에 한해서만 개별적으로 재전송을 한다.

 

TCP는 GBN과 selective repeat의 장점들만 모은 복합적인 형태의 protocol을 차용하고 있다.

+ Recent posts