절대 데이터그램을 사용하지 마세요.
TCP vs UDP
- 인터넷 애플리케이션을 개발할 때 TCP와 UDP 중 하나를 선택해야 함.
-
TCP: 신뢰성 있는 데이터 전송을 보장함.
-
UDP: 신뢰성 없는 데이터 전송을 제공함.
- 신뢰성 없는 전송이 필요한 경우는 거의 없음.
속성
- 소프트웨어 엔지니어링은 여러 계층의 추상화 위에 서 있음.
- 각 계층은 특정 속성을 제공하여 개발자가 모든 것을 처음부터 다시 만들 필요가 없게 함.
- 개발자는 어떤 계층을 사용할지 선택해야 함.
"신뢰성 없는"
- 실시간 비디오 프로토콜을 설계하는 모임에서 SUBSCRIBE가 신뢰성 없도록 해야 한다는 의견이 있었음.
- 실제로 필요한 것은 적시성임.
- 실시간 비디오에서는 최신 데이터를 우선적으로 전달하는 것이 중요함.
데이터그램
- 데이터그램(IP 패킷)은 출발지 주소에서 목적지 주소로 전송되는 데이터의 단위임.
- 데이터그램은 손실되거나 순서가 뒤바뀔 수 있음.
- 데이터그램을 사용하는 이유는 네트워크 혼잡 시 패킷을 드롭하는 것이 더 나은 선택이기 때문임.
인터넷의 큐
- 네트워크가 혼잡할 때 패킷을 드롭하는 것이 일반적임.
- 패킷을 큐에 넣고 나중에 전달하는 것은 버퍼블로트 문제를 일으킬 수 있음.
- 버퍼블로트는 모든 패킷이 큐에 쌓여 적시성을 해침.
당신, 애플리케이션 개발자
- UDP를 직접 사용하면 여러 문제에 직면할 수 있음.
- UDP 위에 자체 전송 프로토콜을 구축하려면 재전송, 혼잡 제어 등을 구현해야 함.
- QUIC 라이브러리를 사용하는 것이 더 나은 선택임.
적시성
-
적시성을 달성하기 위해 QUIC를 사용할 수 있음.
-
버퍼를 비우기: 혼잡 제어를 통해 큐를 감지하고 전송 속도를 줄임.
-
데이터를 스트림으로 분할: 각 스트림은 독립적으로 전송됨.
-
스트림 우선순위 지정: 중요한 스트림을 우선적으로 전달함.
데이터그램 방어
- QUIC와 MoQ는 데이터그램을 지원함.
- 데이터그램 지원은 실험을 허용하기 위해 중요함.
- 그러나 데이터그램 사용은 함정일 수 있음.
결론
- 데이터그램 위에 애플리케이션을 설계하지 말아야 함.
- UDP 위에 또 다른 비디오 프로토콜을 만들지 말고, Media over QUIC에 참여하는 것이 좋음.
GN⁺의 의견
-
적시성의 중요성: 실시간 애플리케이션에서는 데이터의 적시성이 매우 중요함. TCP보다 UDP가 적합할 수 있지만, 혼잡 제어와 같은 추가적인 고려가 필요함.
-
QUIC의 장점: QUIC는 UDP의 단점을 보완하면서도 높은 성능을 제공함. 특히 실시간 비디오 스트리밍에 적합함.
-
버퍼블로트 문제: 네트워크 혼잡 시 패킷을 큐에 쌓는 것은 적시성을 해칠 수 있음. 이를 피하기 위해 혼잡 제어가 필요함.
-
데이터그램의 한계: 데이터그램은 실시간 전송에 적합하지만, 신뢰성과 순서 보장이 필요할 때는 QUIC와 같은 프로토콜이 더 나은 선택임.
-
기술 선택의 중요성: 애플리케이션의 요구사항에 맞는 적절한 전송 프로토콜을 선택하는 것이 중요함. 잘못된 선택은 성능 저하와 사용자 경험 악화를 초래할 수 있음.