Software Lab

4. 흐름제어(Flow Control) 본문

네트워크/4 Layer

4. 흐름제어(Flow Control)

아임코더 2022. 10. 31. 10:29

흐름 제어가 필요한 이유를 알아보자.

왼쪽 송신 호스트(B 호스트)는 오른쪽 수신 호스트(C 호스트)에게 데이터를 전송한다. 그런데 송신 호스트는 20M/Sec 송신하는데 오른쪽 수신 호스트는 겨우 10M/Sec으로 수신받아 처리할 수 있다. 이렇게 되면 수신 호스트는 나머지 10M/Sec의 데이터를 수신할 수 없는 문제가 생긴다. 따라서 송신 호스트가 20M/Sec에서 10M/Sec으로 송신 속도를 낮추어야 한다.이렇듯 수신 속도에 맞게 송신 속도를 낮추는 것을 흐름 제어라고 한다.

 

다음은 TCP에서 흐름제어를 어떻게 하는지 알아보자.

왼쪽 송신 호스트와 오른쪽 수신 호스트는 각각의 큐 구조의 송수신 버퍼를 가진다. 송신 버퍼에 있는 전체 데이터에서 MSS 단위(그림에서는 1000 byte) 만큼을 잘라서 패킷을 만들어 송신한다. 패킷에서 4계층의 TCP 헤더에는 다음 정보가 들어간다.

Sequence : 패킷을 보낼 때마다 그것의 데이터양만큼 누적되어 증가한다. 다음 송신 패킷의 Sequence는 현재 송신 패킷의 Sequence와 Length를 더한 값이다.
Length : 데이터 길이이다.

 

패킷을 받은 수신 호스트는 패킷에서 헤더를 제거하고 데이터를 수신 버퍼에 넣는다. 그리고 ACK 패킷 만들어 응답으로 보낸다. ACK 패킷의 4계층의 TCP 헤더에는 다음 정보가 들어간다.

ACK 번호 : 수신 받은 패킷의 Sequence 번호이다.
Window : 수신 버퍼에서 남은 공간 크기이다. 송신 호스트는 해당 값을 통해 흐름 제어를 한다.

 

ACK 패킷을 받은 송신 호스트는 ACK 번호보다 작은 Sequence의 데이터 구간을 송신 버퍼에서 제거한다. 송신 호스트는 Window의 크기를 보고 패킷의 송신 속도를 조절한다. 즉 흐름 제어한다. Window가 작다면 수신 호스트의 수신 처리 능력이 부족한 것이므로 송신 속도를 낮추고 반대로 크다면 송신 속도를 높인다.

'네트워크 > 4 Layer' 카테고리의 다른 글

6. 혼잡제어(Congestion Control)  (0) 2022.10.31
5. 오류제어(Error Control)  (0) 2022.10.31
3. 슬라이딩 윈도우(Sliding Window)  (0) 2022.10.31
2. MSS, MTU  (0) 2022.10.31
1. TCP(Transmission Control Protocol)  (0) 2022.10.31
Comments