[Computer Network] Window Size

G·2023년 3월 28일
0

Computer Network

목록 보기
6/20

TCP의 통신 방식은 Stop & Wait 방식으로 sender가 요청 또는 데이터 패킷을 보내면 receiver는 패킷을 잘 받았다는 의미의 응답 패킷을 보내야한다. 신뢰성 보장을 위한 기술이다.

굉장히 비효율적이다. 왜냐하면 패킷을 보내고 응답 패킷이 올 때까지 대기해야하기 때문이다.

비효율성을 해결하기 위해 한 번에 많은 양의 패킷을 보내면 될 것이다.

그런데 보낼 수 있는 패킷의 크기는 한정적일 것이다. 왜냐하면 받는 쪽에서 데이터를 받는 버퍼의 크기가 한정되어 있기 때문이다.

이러한 이유로 sender로부터 데이터 패킷을 받았을 때, "패킷을 받고 나서 내 버퍼의 크기가 이만큼 남았어"를 명시하여 ACK packet을 보내야만 한다.


위에서 네 번째 우측에, Window Size를 확인할 수 있다.
이는 sender로부터 패킷을 받고 나서 다음에 받을 패킷을 위한 정보로, ACK 패킷을 보낼 시점의 Receiver의 수용가능한 버퍼 크기이다.

다른 표현으로, Sender가 ACK 패킷을 받은 이후에 전송할 수 있는 패킷의 최대 크기이다.


이전에 본 sender와 receiver의 버퍼이다.

  • Sent: 전송됐지만 아직 ACK 패킷을 받지 못한 데이터이다.
  • NOT sent: 아직 전송되지 않은 데이터이다.
  • 나머지 하얀 부분은 비어있는 공간이다.

여기서 Sent부분은 패킷이 제대로 전송되지 않았을 경우 재전송을 위해 존재하기 때문에, receiver에게 가장 최근에 받은 ACK 패킷에 있는 Window Size에 이를 포함시켜야한다.

(만약 Sent 데이터들을 Window Size에 포함시키지 않은 상태에서, 이전에 보낸 sender의 패킷이 소멸되어 재전송을 한다면, receiver의 버퍼를 초과하는 크기의 데이터들이 전송되는 것이다.)

Sender's Window Size


위의 이미지에서 Sender는 가장 최근에 받은 receiver의 ACK 패킷에 있던 정보로, Sent 상태와 NOT sent들의 데이터와, ACK 패킷을 받은 데이터와 receiver의 수용가능한 버퍼 크기를 벗어나는 데이터를 구분하고 있다.

Receiver's Window Size

receiver의 버퍼이다. 여기서 보면 sender에게 데이터를 받고 이에 대한 응답으로 ACK 패킷을 보낸 데이터들과 빈 공간이 존재한다.

sender로부터 패킷을 받고 ACK 패킷을 전송한 상태의 데이터들은 현재의 네트워크를 사용하는 process가 가져가야 버퍼에서 삭제된다.

그렇다면 ACK packet을 통해 receiver가 sende에게 알려주는 수용가능한 버퍼의 크기는 주황색 부분 오른쪽에 비어있는 부분이고, 이를 Receive window size(rwnd)라 부른다.

Flow control


Flow control이란 produce가 데이터를 생산하는 시간과 cosumer가 데이터를 사용하는 시간을 일정하게 하는 것이다.

sender가 데이터를 전송하는 시간과 receiver가 데이터를 소모하는 시간의 페이스를 일정하게 유지하는 것이다.

이러한 이유는 Stop & Wait의 비효율성을 해결하기 위해 가능한 많은 양의 패킷을 보내는데 이를 에러 없이 보내기 위한 방법이다.

효율성을 위해 많은 양의 패킷을 전송하는데, sender가 더 빠르게 보낸다면 receiver는 버퍼 오버플로우가 발생해 sender가 전송한 데이터가 손실될 것이다.

sender의 관점에서 process가 read() 함수를 통해 버퍼로 데이터를 옭길 때, 버퍼가 꽉 차있으면 데이터를 저장할 수 없다. 이때 read() 함수는 blocked 상태가 된다.

그리고 receiver의 application이 버퍼의 데이터를 느리게 가져가면 rwnd 값은 평균적으로 낮을 것이다.

그렇다면 sender가 전송하는 data의 양이 적을 것이다.

이렇게 현재 상태를 통해 데이터 전송을 제어한다면 버퍼 오버플로우 같은 예외가 발생하지 않고 정상적으로 데이터 전송이 가능할 것이다.

참고: Flow control


rwnd 정보는 Server만 제공한다.(둘 다 있으면 어지럽다)

이해하기 수월하다.

하지만 일반적으로 data를 보내는 packet은 한 덩어리 형태가 아닌 굉장히 많은 수로 전송되며 이에 대한 ACK packet도 수가 굉장히 많다.

마지막은 예외로, 윈도우 사이즈가 변경될 때 ACK 패킷을 보내는 모습인데 일반적이지 않다. 나중에 알아보자.

참고: Sliding window image

profile
열심히 안 사는 사람

0개의 댓글