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했는지 확인 후에 다음 데이터를 전송한다.
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)
'Computer Science > 컴퓨터 네트워크' 카테고리의 다른 글
컴퓨터 네트워크: Congestion Control (0) | 2021.10.14 |
---|---|
컴퓨터 네트워크: Error Control (0) | 2021.10.07 |
컴퓨터 네트워크: Flow Control (0) | 2021.10.05 |
컴퓨터 네트워크: State transition diagram (0) | 2021.10.01 |
컴퓨터 네트워크: A TCP Connection (0) | 2021.09.24 |
컴퓨터 네트워크: Segment (0) | 2021.09.24 |