TLS의 개념 및 역할

  • TLS(Transport Layer Security)는 데이터 암호화, 인증, 무결성을 제공하여 안전한 통신 환경을 조성.
  • 초기 SSL 프로토콜에서 발전된 것으로, TCP 위에서 작동하여 HTTP, 이메일 등 애플리케이션의 보안을 강화.

TLS의 작동 원리

  • 핸드셰이크 과정: 클라이언트와 서버가 암호화 방식과 키를 협상하여 안전한 터널을 생성.
  • 암호화: 대칭키 암호화를 통해 효율적이고 안전한 데이터 전송.
  • 인증: 신뢰 사슬을 기반으로 클라이언트와 서버의 신원을 확인.

 

최적화 기법

  • 세션 재개: TLS 핸드셰이크 과정에서 발생하는 레이턴시를 줄이기 위해 세션 캐시나 세션 티켓을 활용.
  • TLS 레코드 크기 조정: 레코드 크기를 TCP MSS(Maximum Segment Size)에 맞춰 설정해 효율적 데이터 전송.
  • 조기 종료: CDN(콘텐츠 전송 네트워크)나 프록시 서버를 활용해 클라이언트와 가까운 서버에서 세션을 종료해 레이턴시 최소화.
  • 압축 비활성화: TLS 레벨에서의 압축은 보안 문제(CRIME 공격) 및 이중 압축 문제로 인해 비활성화 권장.

 

TLS 관련 최신 기술

  • ALPN (Application-Layer Protocol Negotiation): 핸드셰이크 과정에서 애플리케이션 프로토콜 협상을 포함시켜 추가 레이턴시를 줄임.
  • SNI(Server Name Indication): 하나의 서버에서 여러 도메인을 운영할 때 필요한 확장.

 

실무에서의 TLS 활용

  • 최신 OpenSSL 및 TLS 버전 사용으로 성능 최적화.
  • 인증서 길이 최소화 및 중간 인증서 포함으로 불필요한 레이턴시 방지.
  • TLS를 지원하지 않는 구형 클라이언트를 고려해 세션 캐시와 세션 티켓을 병행 사용하는 것이 권장됨.

 

참고 자료

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

UDP의 특성 및 역할

  • UDP는 단순하고 신뢰성을 제공하지 않는 프로토콜로, 데이터그램 방식으로 작동하며 TCP와 달리 연결 상태를 유지하지 않는다.
  • 빠르고 효율적인 데이터 전송을 위해 설계되었지만, 재전송, 흐름 제어, 오류 검출 등의 기능은 지원하지 않는다.

 

 

UDP의 주요 활용 사례:

  • DNS와 같은 간단한 데이터 전송 프로세스에 사용되며, WebRTC와 같은 실시간 통신에서 필수적으로 활용된다.
  • UDP는 음성 및 화상 통화, P2P 통신 등 지연 시간이 중요한 애플리케이션에서 적합하다.

NAT(Network Address Translation):

NAT는 IPv4 주소의 부족 문제를 해결하기 위해 개발된 기술로, 로컬 네트워크의 사설 IP 주소를 공용 IP 주소로 변환하여 인터넷 통신이 가능하도록 한다. 이 기술은 특히 라우터에서 사용되며, 내부 네트워크와 외부 네트워크 간의 트래픽을 중계하고 IP 주소를 변환한다.

동작 방식: NAT 기기는 내부 네트워크의 사설 IP 주소와 포트를 외부의 공용 IP 주소와 포트로 변환하여 인터넷에 데이터를 전송하고, 반대로 외부에서 들어오는 패킷의 공용 IP와 포트를 내부의 사설 IP와 포트로 변환한다.
예시: 내부 클라이언트 192.168.0.1:1337이 공용 IP 50.76.44.114:31454로 변환되어 인터넷과 통신. NAT는 IP 주소 부족 문제를 완화하고 내부 네트워크를 외부로부터 보호하는 데 기여했으나, 이로 인해 외부에서 기기가 보이지 않는 것과 같은 새로운 문제들이 발생한다.

 

NAT 문제 해결:

  • UDP와 NAT 간의 문제는 STUN, TURN, ICE 등의 기술을 통해 해결할 수 있다.
  • STUN은 공용 IP와 포트를 확인하고, TURN은 UDP가 차단될 때 TCP로 전환하며, ICE는 가장 효율적인 경로를 찾아 연결다.

STUN(Session Traversal Utilities for NAT), TURN(Traversal Using Relays around NAT), ICE(Interactive Connectivity Establishment)의 특징과 역할을 기반으로 표를 정리하면 다음과 같다:

기술 정의 및 역할 특징 장점 단점
STUN NAT 뒤에 있는 클라이언트의 공용 IP 주소와 포트를 알아내기 위한 프로토콜 - 클라이언트가 자신의 공용 IP와 포트를 확인
- 제3의 STUN 서버 필요
- 간단한 NAT 탐지 및 설정
- NAT 테이블에 라우팅 값 생성 가능
- 일부 NAT 환경에서는 제대로 작동하지 않음
TURN NAT를 통과할 수 없을 때 데이터를 중계 서버를 통해 전달하는 프로토콜 - 데이터를 중계 서버를 통해 전송
- 모든 데이터를 양방향으로 중계
- STUN 실패 시 대안으로 사용
- 안정적인 데이터 전송 보장
- NAT 및 방화벽이 막힌 상황에서도 작동
- 중계 서버 부하 증가
- 데이터 지연 발생 가능
ICE NAT 및 방화벽을 통과하기 위해 가장 적합한 경로를 선택하는 프로토콜 - STUN과 TURN을 결합하여 사용
- 직접 연결, STUN, TURN을 모두 시도
- 네트워크 환경에 따라 최적 경로 선택
- P2P 연결 가능성 극대화
- 복잡한 설정 필요
- 프로토콜 구현 및 설정 과정이 다소 까다로움

주요 활용 시나리오

  • STUN: 클라이언트가 NAT 뒤에 있을 때 공용 IP와 포트 정보를 알아내는 데 사용.
  • TURN: STUN을 사용할 수 없거나 NAT 및 방화벽이 UDP를 차단하는 경우 데이터 중계.
  • ICE: P2P 애플리케이션에서 최적의 연결 경로를 찾기 위해 STUN, TURN을 조합.

STUN

 

TURN

 

ICE

UDP 최적화 및 권장 사항:

  • UDP 기반 애플리케이션은 데이터 전송률 조절, 혼잡 제어, 패킷 재전송 등의 메커니즘을 별도로 구현해야 한다.
  • RFC 5405에 따르면, UDP 애플리케이션은 인터넷 경로 상황에 유연하게 대응하고, 최소한의 연결 유지 기능을 설계해야 한다.

이 글을 통해 UDP의 기본 개념과 특징, 그리고 이를 최적화하고 활용하는 방법에 대해 이해할 수 있다. UDP는 단순하지만 강력한 전송 프로토콜로, 효율적인 네트워킹과 실시간 데이터 전송에 적합한 선택지가 될 수 있다.

 

참고문헌

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

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

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