본문 바로가기
Computer Science/컴퓨터 네트워크

컴퓨터 네트워크: Windows in TCP

by 청량리 물냉면 2021. 10. 1.
반응형

TCP: Transmission Control Protocol

6. Windows in TCP

 

stop & wait 방식

  • 데이터 전송할 때마다 잘 받았는지 확인
  • 신뢰성 보장 위한 가장 쉬운 접근 방식

데이터 전송을 화물 트럭으로 비유해 보자.

화물트럭 5대는 서울에서 출발해 부산에 화물을 운반 후 다시 서울로 돌아와 화물이 안전하게 도착했음을 보고해야 한다. stop & wait는 하나의 트럭이 서울-부산을 왕복해서 돌아온 후에 다음 번 트럭이 운행을 시작하는 방식이다. 서울에서 부산까지 왕복으로 10시간이 걸리기 때문에, 트럭 5대가 부산에 화물을 모두 운반하기까지는 50시간이 걸린다. 

이는 매우 비효율적이다. 

이러한 비효율성을 해결하기 위해 한꺼번에 트럭을 여러 대 보낼 수는 없을까?트럭을 여러 대 보낼 수 있다면, 여러 대의 기준은 무엇인가?

 

 

window in TCP

위의 예시와 같이 고속도로를 달리는 트럭을 생각해 보자.

이번에는 효율성을 고려하여 트럭을 한 대 씩 보내는 것이 아니라, 여러 대의 트럭을 한번에 보낼 것이다. 만약 5대의 트럭이 한꺼번에 화물을 운송한다면, 모든 트럭이 화물을 운송하는 데에는 단 10시간 밖에 걸리지 않는다. 이는 트럭을 한 대 씩 보낼 때보다 5배나 더 좋은 효율을 자랑한다. 

 

여기서 몇 가지 가정을 해보자.

화물의 양이 많아져 부산 지역까지 트럭을 10대 운행해야 하지만, 부산 지역 물류센터의 물류 보관함은 4개 밖에 없다. 이럴 때는 어떻게 해야 가장 효율적으로 화물을 운반할 수 있을까?

그것은 물류센터의 직원이 화물의 처리를 마치고 비어 있는 보관함 수를 서울의 물류센터에 알려주는 것이다. 그러면 서울의 물류센터에서는 비어있는 물류 보관함 갯수만큼의 트럭을 한꺼번에 내보낸다.

 

window의 동작 원리도 이와 비슷하다.

통신 시 Receiver가 Sender에게 자신의 Windows size를 알려주면, Sender는 그만큼의 양을 한번에 전송하고 Receiver가 해당 데이터를 모두 read했는지 확인 후에 다음 데이터를 전송한다.

*window size: 한꺼번에 받을 수 있는 데이터의 양

 

Send window in TCP

Bytes that are acknowledged

  • 승인된 bytes
  • Receiver에게서 데이터를 받았다는 신호(ACK)를 받은 bytes
  • buffer에서 제거 가능

 

Outstanding bytes

  • 상대방에게 전송했지만 아직 승인받지 않은(ACK이 도착하지 않은) bytes
  • 데이터에 오류가 있을 수 있으므로 ACK을 받을 때까지 보관하고 있어야 하는 데이터

 

Bytes that can be sent

  • 사용가능한 window
  • 아직 보내지 않은 bytes

 

Send window size

Receiver가 알려준 size(rwnd)

 

First outstanding byte Sf

승인받지 않은(ACK이 도착하지 않은) 데이터의 가장 첫 byte를 가리키는 포인터

 

Next byte to send to Sn

다음에 보낼(아직 보내지 않은) 데이터의 첫 byte를 가리키는 포인터

 

Bytes that cannot be sent until the right edge moves to the right

  • 오른쪽 edge가 오른쪽으로 이동할 때까지 보낼 수 없는 bytes
  • Outstanding bytes의 ACK이 도착해 버퍼에서 해당 데이터를 삭제하면, 데이터가 없는 빈 공간은 버리고 윈도우의 범위를 오른쪽으로 이동시킨다.

 

 

Receive window in TCP

Bytes that have already pulled by the process

  • 프로세스에서 이미 밀려난 바이트
  • read를 끝낸 데이터

 

Bytes received, and acknowledged waiting to be consumed by process

  • process에서 consume(소비) 대기 중인 수신, 승인된 바이트
  • consume: process가 데이터를 호출해서 application으로 가지고 올라가는 것을 '소비한다'고 표현
  • 데이터 받았는데 아직 process가 read를 안 한 것

 

Bytes that can be received from sender

  • sender로부터 받을 수 있는 바이트
  • 비어있는 공간
  • Receive window size(rwnd): 한번에 받을 수 있는 데이터의 양 = window size

 

Allocated buffer

할당된 버퍼

 

Bytes that cannot be received from sender

sender로부터 받을 수 없는 바이트

 

Next byte to be pulled by the process

  • 프로세스에 의해 밀려날 다음 바이트
  • 아직 process가 소비하지 않은 바이트

 

Next byte expected to receive

수신될 것으로 예상되는 다음 바이트

 

 


자료 출처:

  • TCP/IP Protocol Suite 4th Edition Slide
    (Behrouz A. Forouzan 저, McGraw-Hill, 2010)
반응형