0. 배경
송신자가 전송한 데이터를 수신자가 받아서 버퍼에 저장한다. 이 때, 송신자가 데이터를 전송하는 속도와 수신자가 데이터를 수신하는 속도가 다를 수 있다. 만약 송신지의 데이터 전송속도가 수신자의 데이터 수신속도보다 빠르다면 수신자의 버퍼는 들어오는 데이터의 속도를 이기지 못하고 결국 버퍼가 넘칠 것이다. 이 과정에서 데이터가 유실될 가능성이 있다. 송신자와 수신자 간 데이터 전송 속도차로 인한 데이터 유실이 발생하는 것이다. TCP는 데이터 유실을 방지하기 위해 송신자의 전송 속도를 조절하는 방법을 택했다. 이것이 flow control이다.
1. flow control 과정
TCP는 flow control을 위해 receive window(=rwnd)라는 변수를 사용한다. 이 변수를 사용하여 flow control하는 과정은 다음과 같다.
- 송신자는 TCP connection을 통해 크기가 큰 파일을 수신자에게 전송한다.
- 수신자는 이 connection에 수신버퍼를 할당하고, RcvBuffer로 그 크기를 나타낸다.
- 수신자는 송신자에게 segment를 보낼 때 TCP헤더의 free buffer space에 rwnd 값을 넣어서 보낸다. rwnd 값은 수신자의 현재 남은 공간(여유 공간)이다.
- 송신자는 수신자로부터 받은 segment의 rwnd 값을 보고 수신자에게 보낼 데이터의 양을 조절한다.
- 즉, 송신자는 unacked 데이터 양을 수신자의 rwnd 값으로 제한하여 수신자의 버퍼가 넘치지 않도록 한다.
'CS > Network' 카테고리의 다른 글
03_TCP Connections (0) | 2024.07.24 |
---|---|
02_Socket_IO (2) | 2024.07.23 |
다중화와 역다중화 (0) | 2024.02.01 |
OSI 7계층 모델과 TCP/IP 4계층 모델 비교 (0) | 2024.01.31 |
HTTP란 무엇인가? (1) | 2024.01.30 |