네트워크 - 5

KOCW 5강

KOCW 네트워크 강의(이석복 교수님)를 듣고 정리하여 쓴 글이다.


4강 복습

TransPort Layer에서 Reliable Data Transfer를 위한 기본원리에 대해 말을 했었다. 왜냐하면 underline channel이 unreliable하기 때문에 극복하고자 하기 위함이었다.


5강 시작

Utilization

과연 우리가 4장에서 배운 RDT protocol은 과연 효율적일까? 4강에서 우리는 packet 1개를 보낸 다음, ACK 신호가 올때까지 기다린 후에 다시 다음 packet을 전송하는 모델을 생각하였다. 하지만 이는 매우 비효율적이다.


\(U_{sender}={L/R \over RTT+L/R}\)

Utilization : 전체 시간 중에서 sender가 network를 사용하는 비율. 크면 클수록 좋다.

우리가 4강에서 고려했던 RDT 모델은 Utilization이 매우 안좋았다. 그 이유는 아래 그림을 보도록 하자.


4강에서 배운 RDT protocol 모델

network5_1

4강에서 우리는 위와 같이 packet을 보냈다. 효율이 안좋은 이유는 sender가 packet을 하나 보내고 도착을 확인할동안 아무것도 안하고 쉰다는 것이다. 위의 utilization식에서 RTT값이 매우 커지므로 packet을 한번에 쏟아버리고 한번에 feedback을 받는게 더 효율적이다.

결론 : 4강에서 생각했던 RDT protocol은 성능이 굉장히 안좋다. 1개 packet을 보내고 도착할 때까지 아무것도 안하고 기다리기만 하기 때문이다.


Pipelining : Increased Utilization

network5_2

 사진출처 

pipelining을 사용해서 packet을 한번에 주고 feedback을 한번에 받게 되면 위 그림에 나왔듯이 Utilization이 증가하는 것을 알 수 있다.

한꺼번에 보내는 data가 많을수록 Utilization이 증가한다. 더 효율적이게 된다.


이번에 5강에서는 이러한 pipelining방식의 RDT protocol을 동작하게 만드는 2가지 apporach에 대해 배울 것이다.

  1. Go-Back-N
  2. Selective Repeat


Go-Back-N

이제 우리가 먼저 생각해야 할 것은 pipelining으로 data를 보낼 때 얼만큼 많이 보낼지에 대해서이다. → window size만큼!!


* 정리하고 들어갈 내용 - ACK 의미


Go-Back-N in action

아래에 window size=4Go-back-N 예시를 보도록 하자.


network5_3


< 보내기 시작할 때 t=0 >

network5_4

숫자 : packet번호, window size = 4인 경우,

Go-Back-N에서는 receiver를 아무것도 못하는 바보라고 생각한다. 따라서 receiver에는 buffer도 없고, 할 줄 아는게 ACK 주는거랑 원하는 packet이 아니면 버리는 것 밖에 없다. 그리고 sender에서는 packet loss에 대비하기 위해서 window 안에 있는 packet을 저장하는 buffer가 존재해야 한다. 따라서 window는 보낼 packet들을 임시저장하는 buffer라고 생각할 수 있다.


근데 의문이 있다. 아직 배울게 더 남아있다는 사실을 알긴 하다만 Go-Back-N방법은 너무 비효율적이라는 생각이 들었다. loss된 packet만 다시 보내면 되는데 굳이 window안에 있는 전부를 재전송하는 것일까? 바로 위에서 설명했듯이 receiver측에는 buffer가 없다고 가정했기 때문이다. 강의에서 나의 궁금증을 바로 해결해 줬다.


Selective Repeat

실제 window size는 아까 위에서 가정했던 것 처럼 작지가 않다. 따라서 1개가 loss됐다고 전부 다 다시 보내기엔 너무 비효율적일 것이다. 따라서 Selective Repeat이 나왔다.


* 다시!! 정리하고 들어갈 내용 - ACK 의미


Selective Repeat in action

아래에 window size=4Selective Repeat 예시를 보도록 하자.


network5_12

아까 Go-Back-N이랑 비슷한 맥락이지만, 차이점은 제대로 도착한 packet에 대해서는 receiver의 buffer에 저장한다는 것이다. error없이 받은 packet을 버리기 않기 때문에 loss가 발생했을 때, 해당 loss가 발생한 packet에 대해서만 재전송을 한다. 그리고 window는 다음으로 한번에 넘어가게 된다.