TCP와 IP의 개요

  • 인터넷의 중심은 TCP(전송 제어 프로토콜)와 IP(인터넷 프로토콜)로 이루어진다.
  • TCP는 신뢰성을 보장하며, 데이터 전송 순서 확인, 데이터 재전송 등을 처리한다.
  • TCP는 HTTP 표준의 기본 전송 프로토콜로 활용된다.

 

TCP의 핵심 메커니즘

 

3-Way 핸드셰이크:

  • 연결 성립 전 클라이언트와 서버 간 초기화 절차.
  • 왕복 레이턴시가 연결 성능에 영향을 미친다

느린 시작(Slow-Start):

  • 새로운 연결에서 데이터 전송 속도를 점진적으로 증가시킨다.
  • 초기 처리량이 제한되며, 대규모 데이터를 처리하는 경우 더 큰 영향을 미친다.


TCP Fast Open
:

  • 구글이 개발한 최적화 기법으로 초기 핸드셰이크 레이턴시를 줄인다.
  • SYN 패킷에서 데이터 전송 가능
  • HTTP 트랜잭션 속도를 약 10~40%까지 개선.

 

혼잡 제어(Congestion Control) vs 흐름 제어(Flow Control):

항목 혼잡 제어 흐름 제어
정의 네트워크의 혼잡 상태를 완화하고 패킷 손실을 방지하기 위한 메커니즘. 수신자의 처리 용량을 초과하는 데이터 전송을 방지하기 위한 메커니즘.
목적 네트워크 전반의 안정성을 유지하고 혼잡으로 인한 성능 저하를 줄이는 것. 송신자가 수신자의 버퍼 용량을 초과하는 데이터를 보내지 않도록 보장.
초점 네트워크의 상태에 따라 전송 속도를 조절. 수신자의 상태에 따라 전송 속도를 조절.
작동 원리 - 패킷 손실을 혼잡의 신호로 판단. - 리시브 윈도(rwnd) 를 기준으로 송신량을 조절.
- 혼잡 윈도 크기(cwnd)를 조정하여 전송 속도 감소 및 회복. - 송신자와 수신자가 TCP 핸드셰이크 중에 초기 리시브 윈도(rwnd) 를 설정하고, 이후 ACK 패킷을 통해 업데이트.
주요 알고리즘 - 느린 시작(Slow-Start): 작은 윈도 크기로 시작해 점진적으로 증가. - 수신자가 버퍼가 포화 상태에 가까워지면 리시브 윈도(rwnd) 를 줄여 송신자에게 알림.
- 혼잡 회피(Congestion Avoidance): 패킷 손실 발생 시 혼잡 윈도를 줄여 네트워크 부담 감소. - 리시브 윈도(rwnd) 가 0이면 송신자는 수신 버퍼가 비워질 때까지 대기.
병목 원인 네트워크 경로 내의 혼잡(라우터, 스위치 등)에서 발생. 수신자의 버퍼 용량 부족으로 인해 발생.
주요 지표 - 혼잡 윈도(cwnd): 송신자가 전송할 수 있는 데이터의 양. - 리시브 윈도(rwnd): 수신자가 처리할 수 있는 데이터의 양.
주된 영향 - 네트워크 경로에서 데이터 처리량이 줄어들거나 지연이 발생. - 송신자가 데이터를 전송하지 못하거나 속도가 제한됨.
활용 사례 네트워크 전송 속도가 다양한 상황(혼잡, 정체 등)에서 효율적으로 조절되어야 하는 경우. 데이터 처리 용량이 한정된 IoT 기기, 모바일 기기 등에서 송신 속도를 조절해야 하는 경우.

 

혼잡 회피(Congestion Avoidance) 

  • 패킷 손실을 피드백으로 사용하여 혼잡 윈도를 패킷 손실이 발생할 때까지 증사 시킴
  • 알고리즘 종류
    • TCP Tahoe and Reno (original implementations) (AIMD)
    • TCP Vegas
    • TCP New Reno
    • TCP BIC
    • TCP CUBIC (default on Linux) or Compound TCP (default on Windows)

웹 성능 최적화 방법

  1. 서버 설정 최적화:
    • 최신 커널 업데이트 및 초기 혼잡 윈도 크기를 10으로 설정.
    • 느린 시작 재시작 기능 비활성화.
  2. 네트워크 환경 개선:
    • 서버를 사용자와 가까운 위치에 배치.
    • 기존 TCP 연결을 최대한 재사용.
  3. 데이터 전송 최적화:
    • 불필요한 데이터 전송 제거.
    • 전송 데이터를 압축하여 처리량 개선.

 

결론

 

TCP는 안정적이고 신뢰할 수 있는 프로토콜로 설계되었지만, 레이턴시가 주요 병목 요인이 될 수 있다. 이를 해결하기 위해 애플리케이션 설계와 서버 설정을 최적화하는 것이 중요하다.

 

참고 문헌

[1] 일리아 그리고릭, "구글 엔지니어에게 듣는 네트워킹과 웹 성능 최적화 기법", 정해권, 오현주 공역, 인사이트(insight)

[2] https://docs.google.com/presentation/d/1ZgF4MQ-7BBS92Zlz3mB52APRmyoSyaXprwltw5y3VJg/edit#slide=id.p9

+ Recent posts