[컴퓨터 네트워크] 21. Transport Layer (7) : TCP Flow Control (흐름 제어)

2024. 5. 28. 17:30·CS/컴퓨터 네트워크
반응형

Flow Control

세그먼트의 흐름을 제어하는 것

1:1 상황에서 자신의 윈도우가 넘치지 않을 정도로만 세그먼트를 보내도록 리시버가 남은 버퍼의 크기를 센더에게 알려주는 것을 '흐름 제어' 라고 한다.

센더는 리시버로부터 여유 공간에 맞게 추가 데이터를 보냄으로써 리시버의 버퍼가 넘치지 않도록한다.

 

 

위 그림은 리시버의 프로토콜 스택을 보여준다.

sender가 보낸 데이터는 IP 헤더 (녹색) 이 붙은 채로  3계층 (네트워크 계층) 을 지나고,

3계층에서 TCP로 payload를 넘겨줄 것이다.

 

이 payload 데이터는 TCP 소켓의 receiver buffer에 담겨있다가, 어플리케이션이 데이터를 읽어가면 그때 버퍼에서 데이터를 삭제한다.

 

그런데 만약 어플리케이션이 다른 로직을 수행하느라 바빠서 데이터를 읽어가는 속도가 버퍼에 데이터가 들어오는 속도를 따라가지 못한다면, 리시버의 버퍼에는 계속 데이터가 쌓일 것이다.

그러면 리시버 버퍼의 남은 공간 크기가 줄어들어서 센더가 데이터를 보내도 데이터를 리시버가 받지 못하는 일이 생길 수 있다.

 

 

따라서 TCP 세그먼트 헤더의 receive window (rwnd) 필드에 현재 남아있는 버퍼의 가용 공간 크기를 byte단위 수로 담아서 센더에게 보내준다.

 

만약 이걸 알려주지 않으면, 센더는 계속해서 데이터를 보내고, 리시버는 들어온 데이터를 버퍼에 담을 수 없으니 버리는 과정을 의미없이 반복할 것이다. 이는 리시버 입장에서는 성능의 감소이고, 전체 트래픽 관점에서 보면 대역폭의 낭비이다.

 

이를 통해 리시버는 센더가 데이터를 너무 많이, 너무 빠르게 보내지 않도록 컨트롤해서 자신의 버퍼가 넘치지 않도록 관리할 수 있다.

 


 

참고로 리시버 버퍼의 크기는 소켓을 생성할 때 RcvBuffer 크기를 직접 지정할 수 있다.

(보통은 4096byte를 사용하는 것이 일반적이다.)

또는 OS가 네트워크 트래픽 상황을 보고 버퍼의 크기를 키우거나 줄이는 식으로 조절하기도 한다.

 

위 그림 기준으로 센더는 free buffer space의 크기만큼 추가 데이터를 전송할 수 있다.

(ACK를 받지 않은, 전송중인 데이터의 양을 rwnd 의 크기만큼으로 제한할 수 있다.)

 

이때 중요한 점은, 기존에 보냈던 것을 재전송하는 것은 free buffer space 제한에서 제외한다.

즉, 리시버는 ACK를 보냈는데, 그게 오지 않아서 재전송하는 경우는 제외한다는 것이다.

왜냐하면 리시버가 이미 ACK를 보냈는데 이에 대해 재전송하면, 버퍼가 남아있든 남아있지 않든 그냥 ACK를 보내고 수신한 데이터는 버릴 것이기 때문이다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > 컴퓨터 네트워크' 카테고리의 다른 글

[컴퓨터 네트워크] 23. Transport Layer (9) : TCP Congestion Control (혼잡 제어)  (0) 2024.05.31
[컴퓨터 네트워크] 22. Transport Layer (8) : TCP 연결 설정 (3-way handshake)  (0) 2024.05.28
[컴퓨터 네트워크] 20. Transport Layer (6) : TCP  (0) 2024.05.27
[컴퓨터 네트워크] 19. Transport Layer (5) : Go-Back-N (GBN), Selective Repeat (SR)  (0) 2024.05.24
[컴퓨터 네트워크] 18. Transport Layer (4) : rdt 3.0  (0) 2024.04.24
'CS/컴퓨터 네트워크' 카테고리의 다른 글
  • [컴퓨터 네트워크] 23. Transport Layer (9) : TCP Congestion Control (혼잡 제어)
  • [컴퓨터 네트워크] 22. Transport Layer (8) : TCP 연결 설정 (3-way handshake)
  • [컴퓨터 네트워크] 20. Transport Layer (6) : TCP
  • [컴퓨터 네트워크] 19. Transport Layer (5) : Go-Back-N (GBN), Selective Repeat (SR)
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (614)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (44)
        • 생각 정리 (22)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[컴퓨터 네트워크] 21. Transport Layer (7) : TCP Flow Control (흐름 제어)
상단으로

티스토리툴바