Slow is better than NOTHING

Computer Science/3. Network

신뢰적인 TCP보다 비신뢰적인 UDP를 사용하는 이유

Jeff_Kang 2019. 5. 15. 16:04
반응형

 

 TCP는 통신을 위해 사전에 3-way handshaking을 사용하여 연결을 설정해놓고 Flow control, Sequence number, ack message, timer를 활용하여 송신하는 프로세스로부터 수신하는 프로세스에게 데이터가 순서대로 정확하게 전달하게 한다. 또한 TCP는 congestion control을 통해 TCP연결이 과도하게 몰리는 현상을 방지하기도 한다. TCP는 혼잡한 네트워크 링크에서 각 연결이 링크의 Bandwidth를 공평하게 공유하여 통과하도록 한다. 

 

 UDP는 [RFC 786]에 정의된 내용에 따르면 트랜스포트 계층이 할 수 있는 최소 기능으로 동작한다. Multiplexing, DeMultiplexing 및 간단한 오류 검사를 제외하면 IP에 아무것도 추가하지 않는다. 사실 App 개발자가 TCP 대신 UDP를 통신 프로토콜로 사용한다면 App은 거의 IP와 직접 통신하는 것이다. TCP와 달리 3-way handshaking과 같은 사전 통신 연결이 필요치 않아 비연결형 서비스라 불린다.

 

 DNS는 대표적으로 UDP를 사용하는 Application 계층 프로토콜의 예이다. 호스트에서 DNS App이 query를 생성하고 메세지를 UDP에게 넘겨준다. UDP는 3-way handshaking을 수행하지않고 메시지에 헤더필드를 추가한 후에 최종 세그먼트를 네트워크 계층에 넘겨주게 된다. 

 

 그렇다면 왜 애플리케이션 개발자는 TCP보다 UDP로 애플리케이션을 개발하려고 하는것일까? TCP는 신뢰적 데이터 전송 서비스를 제공하지만, UDP는 그렇지 않으므로 항상 TCP가 더 좋은것일까?

 

 답은 '아니요' 이다. 다음과 같은 이유로 UDP가 TCP보다 더욱 효과적이기도 하다.

 

 

1) 정교한 제어

 

 UDP를 사용하는 애플리케이션 프로세스가 데이터를 UDP에 전달하자마자 UDP는 데이터를 UDP 세그먼트로 만들고 즉시 네트워크 계층으로 전송한다. 반면, TCP는 congestion control mechanism 을 가지고 있다. 따라서 네트워크가 혼잡해지면 TCP는 제어 정책에 따라 트랜스포트 계층의 TCP Sender를 조절한다. 또한 TCP는 신뢰적인 전달이 얼마나 오래걸리는지 상관없이 목적지가 세그먼트 수신 여부를 응답할 때 까지 데이터 세그먼트 재전송을 계속할 것이다.

실시간 App은 종종 최소 전송률을 요구하고 지나친 Latency를 지양하므로 조금의 데이터 손실을 감수하기에 TCP는 이러한 App들의 요구사항에 맞지 않는다. 그러므로 이러한 App들은 UDP를 사용할 수 있고 App의 한 부분으로서 UDP의 기본 세그먼트 전달 외에 필요한 추가적인 기능을 개발자가 직접 구현할 수 있다.  

 

2) 연결 설정이 없다.

 

TCP는 데이터를 전송하기위해 사전 연결 설정인 3-way handshaking 과정이 필요하다. 반면에 UDP는 예비동작 없이 바로 전송한다. 그러므로 UDP전송을 연결 설정 단계에서 어떠한 지연도 없다. 이것은 DNS가 왜 TCP보다 UDP에서 동작하는지에 대한 일반적인 이유다. 만약 DNS라는 서비스가 TCP에서 동작한다면 범용적인 서비스 범위를 생각해보았을때 서비스를 요청한 송신자에게 모든 연결 설정을 하게 되기 때문에 많이 느려질 것이다. 또 다른 예로 HTTP 문서로 된 Web Page는 신뢰성이 중요하기 때문에 UDP보다는 TCP를 사용한다. 하지만 마찬가지로 HTTP에서 TCP연결 설정 지연은 웹 문서 다운로드 지연에 주 원인이 된다.

 

3) 연결 상태가 없다.

 

TCP는 End-Syetem에서 연결 상태를 유지한다. 이 연결 상태는 수신 버퍼 및 송신 버퍼, 혼잡제어 파라미터, 순서번호와 확인응답 번호 파라미터를 포함한다. 이러한 정보는 TCP가 신뢰적인 데이터 전송 서비스를 구현하고 연결 상태를 유지하기 위해 필수적이다. 이에 반해 UDP는 연결 상태를 유지하지 않으므로 어떠한 파라미터도 기록하지 않는다. 그래서 일반적으로 특정 App에 할당된 서버는 App이 TCP보다 UDP에서 동작할 때 더 많은 클라이언트를 수용할 수 있다.

 

4) 작은 패킷 헤더 오버헤드

 

TCP는 세그먼트마다 20byte의 헤더 오버헤드를 갖는 반면, UDP는 오직 8byte의 오버헤드를 가진다.

반응형