Table of contents

    Ethernet TCP 프로토콜을 분석하는데, 이론적으로 알던 내용과 다른 부분을 경험했습니다.

     

    TCP 서버에서 TCP 클라이언트로 데이터를 송신하는데, 2번씩 송신해야 TCP 클라이언트에서 ACK 답변을 하는 현상이었습니다.

     

    예를 들면, 아래와 같습니다.

     

    TCP 서버     ---------->     TCP 클라이언트 : Data

    TCP 서버     ---------->     TCP 클라이언트 : Data

    TCP 서버     <----------     TCP 클라이언트 : ACK

     

    반복

     

     

     

    현상을 찾아보니 TCP에는 Delayed ACK(지연 ACK) 기능이 있었습니다.

     

    요약하자면, 데이터를 수신 받을 때마다 ACK 송신하지 않고

    일정 수준의 Timeout 이후에 ACK 송신하거나 DATA+ACK 송신하는 기능입니다.

     

    제가 분석한 네트워크에서는 ACK DATA 없었지만, DATA 함께 보낼 있도록 표준화되있는 같네요.

     

     

     

    Delayed ACK 기능이 활성화 되었을 , ACK 응답하는 기준은 크게 가지로 보여집니다.

     

    - TCP 패킷을 수신하고 Timeout 지난 경우

    - TCP 패킷을 수신하고, Timeout 이전에 다른 TCP 패킷을 수신하는 경우

    (Timeout 통상 200ms 많이 설명되어 있는데 수정이 가능할 같습니다.)

     

    현재, 컴퓨터에서도 활용되고 있는 것으로 보아 Delayed ACK 전세계적으로 입증된 기능임을 유추할 있습니다.

     

     

     

    네이글 알고리즘도 마찬가지지만, 컴퓨터 네트워크에서는 작은 아이디어로 성능을 개선하는 모습들이 종종 보이네요.

    참고로 네이글 알고리즘과 Delayed ACK는 상충되는 문제가 있는 것 같은데, 이 부분은 추후 다시 다뤄보도록 하겠습니다.