본문 바로가기
네트워크

Transport Layer#3 Go-Back-N

by PudgeKim 2020. 11. 9.

Go-Back-N이란 TCP에서 채택한 패킷 전송 방법이다. (밑에서부터는 편의상 GBN으로 부르겠다.)

사실 네트워크 책에서는 GBN을 소개하기전에 rdt에 관해 소개를 해주면서 천천히 확장하는 방식이지만 여기서는 생략하도록 하겠다. (궁금한 사람은 rdt1.0부터 검색해서 쭉 읽어보시길)

자 이제 본격적으로 GBN에 대해 알아보자.

서로 다른 호스트가 TCP를 통해 데이터를 주고 받는데 패킷을 하나씩 주고 받는다고 가정하자. 생각만해도 너무너무 느릴 것이다. 그래서 패킷을 한번에 여러개를 보내는 방법으로 GBN이 나온 것이다.

그런데 TCP는 패킷전송에 있어서 reliable하고 in-order delivery를 제공한다. 패킷을 하나씩 보내면 하나 보내고 제대로 갔나 확인하고 제대로 안갔으면 다시보내고 등을 반복하면 되는일이지만 여러개를 보내는 경우에 패킷이 중간에 없어지거나 하는 등의 일이 생기면 어떻게 될까?

GBN은 이런 이슈들을 어떻게 해결하는지 알아보자.

그림판으로 그리기 귀찮아서 구글링해서 갖고온 사진이다.

그림을 보면 window size란게 보이는데 window size란 한번에 보낼 수 있는 패킷의 수를 뜻한다.
예를들어  window size가 10이라면 sender가 receiver에게 한번에 10개의 패킷을 보낸다.

ACK이란 receiver가 sender가 보낸 패킷을 잘 받았으면 잘 받았다는 의미로 주는 신호라고 생각하면 이해하기 쉬울 것이다.

여기까지의 이해를 돕기위해 이런 상황을 생각해보자.

window size가 5라고 가정하면 sender가 패킷1부터 패킷5를 보낸다. receiver가 패킷 1,2,3을 받으면 (패킷4,5는 아직 전송중이라고 가정하자) ACK1, ACK2, ACK3를 sender에게 보낸다. (사실 receiver가 패킷한개당 일일이 ACK을 주지는 않을수도 있다.)

별 무리 없이 이해됬을거라 생각한다. 다음으로 넘어가보자

 

그런데 GBN에서의 ACK은 cumulative ACK을 뜻한다. 누적된다는 뜻인데 만약 sender가 receiver로부터 ACK3을 받았으면 sender가 보낸 패킷들중에 패킷3까지는 모두 순서대로 잘 도착했다는 뜻이다.

여기까지는 sender가 보낸 패킷들이 중간에 손실되지 않는 것을 가정하고 설명을 했는데 만약 패킷1~5를 보냈는데 3이 손실되고 나머지는 잘 도착했으면 receiver가 어떻게 반응할까?

중간에 손실이 되는경우 위 그림처럼 receiver가 반응하게 된다.

위에서 말했듯이 cumulative ACK이므로 패킷3이 손실됬다면 receiver는 ACK2보다 큰 ACK을 줄수가 없다.
왜냐하면 만약 receiver가 패킷4를 받고 ACK4를 줘버리면 sender는 패킷1부터 패킷4까지 모두 다 도착했다고 생각하기 때문이다. 그래서 패킷이 추가적으로 오더라도 receiver는 손실되기전 패킷중에 가장 큰 ACK number를 줘야한다.

그럼 이 경우에 sender는 어떻게 반응할까?

sender는 자기가 패킷을 5개 보냈는데 두개만 제대로 오고 나머지는 계속 안오고 있는 상태이다. 일정 시간이 지나면 timeout이 발생하게 되고 timeout이 발생하면 sender는 패킷3부터 패킷7까지 보내게 된다.

여기서 왜 패킷7까지 보낼까? 이유는 window size가 5인데 패킷1,2는 잘 도착한걸 확인했으므로(ACK2를 받았으니까) 
패킷7까지 보내서 window size를 맞추는 것이다.

fast retransmission이라고 timeout이 발생하지 않더라도 duplicate ACK이 3개 오면 sender가 패킷을 재전송하는 방법도 있다.

 

여기까지가 GBN의 대략적인 설명이다. 다른 전송방법으로 Selective Repeat이란 방법도 있지만 TCP는 GBN을 사용한다고 알고 있다. Selective Repeat가 궁금한 사람은 따로 찾아보시길 바란다.

'네트워크' 카테고리의 다른 글

네트워크 NAT란?  (0) 2020.12.07
네트워크 인터넷과 여러 계층들  (0) 2020.12.06
네트워크 switching fabrics  (0) 2020.11.28
네트워크 라우팅  (0) 2020.11.28
Transport Layer#1 Multiplexing & Demultiplexing  (0) 2020.11.09