ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C/C++] [TCP Sliding window] [슬라이딩 윈도우 개념] 슬라이딩 윈도우란?
    C_C++ 프로그래밍/TCP_IP 2019. 6. 18. 20:23

     

         로재의 개발 일기      

    MSS?

    TCP에서는 전송 데이터에 대한 응답(ACK)를 사용합니다.

    이를 통해서 안전한 데이터의 송수신을 보장이 가능하게 됩니다.

    TCP는 한번에 전송이 가능한 최대 세그먼트 크기 (TCP MSS)가 정해져 있는데요.

    이는 MTU와는 다른 개념이며, MSS는 이보다 작은 크기를 가집니다.

    MTU : 한번에 보낼 수 있는 패킷의 크기

    MSS : TCP의 최대 세그먼트 크기

    예를 들어 봅시다.

    MSS가 1KB이고, 10KB의 데이터를 전송한다면

    데이터는 10개의 패킷으로 나뉘어서 송신이 되게 됩니다.

    이때 통신의 신뢰를 확보하기 위해서 10번의 ACK가 필요하게 됩니다.

    즉, ACK를 기다리고 있는 Client의 시간이 낭비되고 있는 것입니다.

    이는 비효율적이고 빠른 데이터 송수신을 위해서는 느리지 않을까요?


      Sliding window?

    앞서 하나의 예시를 들었던 바와 같이 빠른 데이터 전송이 필요하게 되는 경우

    ACK를 여러 번 나누어서 보내는 것은 상당히 비효율적이라고 설명하였습니다.

    10KB를 5KB 단위로 나누어 2번의 ACK만 보낼 수 있다면, 상당한 시간을 줄일 수 있고

    대형 프로젝트 같은 경우에는 특히 더 효율적일 것 입니다.


    Sliding window on sender side

    출처: http://ecomputernotes.com/computernetworkingnotes/communication-networks/sliding-window-protocol

    이 문제를 해결하기 위해서 TCP는 슬라이딩 윈도우라는 기법을 사용합니다.

    창의 크기를 크게 해서 (필요에 따라서는 작게 가능합니다) 여러 패킷을 논리적인 하나의 패킷으로 묶어서 처리를 하는 방식입니다.


      TCP에서

    소켓 프로그래밍에서 슬라이딩 윈도우 크기를 조절하기 위해서는

    이미 구현된 함수를 사용하면 쉽게 구현이 가능합니다.


    1
    2
    3
    4
    5
    6
    #include <sys/types.h>
    #include <sys/socket.h>
     
    int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
     
    int setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen);
    cs



    마무리

    데이터의 빠른 송수신을 위해서는 슬라이딩 윈도우라는 가상의 컨테이너를 사용하며

    슬라이딩 윈도우의 크기를 조절하기 위해서 TCP에서 몇 가지 함수를 사용할 수 있다.

    ※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다



    반응형
Designed by Tistory.