# UDP와 TCP의 실시간 처리 차이점

실시간 시스템에서 네트워크 프로토콜을 선택하는 것은 중요한 결정이다. 이 선택은 애플리케이션의 성능, 안정성, 지연 시간 등에 큰 영향을 미친다. 실시간 시스템에서 주로 사용되는 두 가지 주요 전송 계층 프로토콜은 UDP(User Datagram Protocol)와 TCP(Transmission Control Protocol)이다. 이 두 프로토콜은 각각의 특징과 장단점이 있으며, 실시간 처리가 필요한 시스템에서 어떻게 다른지 알아보겠다.

#### UDP (User Datagram Protocol)

UDP는 **비연결성(Connectionless)** 프로토콜로, 데이터그램이라고 불리는 개별 패킷을 독립적으로 전송한다. UDP의 주요 특징은 다음과 같다:

1. **비연결성**: UDP는 송신자와 수신자 간의 연결을 설정하지 않는다. 즉, 데이터를 전송하기 전에 핸드셰이크(handshake) 과정이 없다. 이는 연결 설정에 필요한 시간을 절약하게 해준다.
2. **헤더 오버헤드가 적음**: UDP 헤더는 8바이트로 고정되어 있으며, TCP보다 훨씬 적은 오버헤드를 가지고 있다. 이는 실시간 시스템에서 필요한 최소한의 지연을 제공하는 데 유리한다.
3. **신뢰성 보장 없음**: UDP는 패킷 전달의 신뢰성을 보장하지 않는다. 즉, 패킷이 유실되거나 순서가 뒤바뀌어 도착해도 이를 복구하기 위한 메커니즘이 없다.
4. **빠른 전송 속도**: 신뢰성 메커니즘이 없기 때문에, 데이터 전송이 빠르고 지연 시간이 적다. 이는 지연이 중요한 실시간 애플리케이션에서 매우 유리할 수 있다.

수식으로 표현하면, UDP를 통한 데이터 전송의 총 지연 시간 $T\_{\text{UDP}}$는 다음과 같이 나타낼 수 있다:

$$
T\_{\text{UDP}} = T\_{\text{transmission}} + T\_{\text{propagation}} + T\_{\text{processing}}
$$

여기서:

* $T\_{\text{transmission}}$은 전송 지연이다.
* $T\_{\text{propagation}}$은 전파 지연이다.
* $T\_{\text{processing}}$은 수신 측에서의 처리 지연이다.

UDP에서는 $T\_{\text{retransmission}}$이라는 재전송 지연이 없으므로, 전송 속도가 매우 빠를 수 있다.

#### TCP (Transmission Control Protocol)

TCP는 **연결지향(Connection-oriented)** 프로토콜로, 데이터 전송 전에 송신자와 수신자 간의 연결을 설정한다. TCP의 주요 특징은 다음과 같다:

1. **연결 설정**: TCP는 데이터 전송 전에 삼중 핸드셰이크(Three-way Handshake)를 통해 연결을 설정한다. 이 과정은 신뢰성을 제공하지만 초기 지연을 증가시킨다.
2. **신뢰성 보장**: TCP는 패킷이 손실되거나 순서가 뒤바뀌는 것을 방지한다. 각 패킷은 송신자가 확인 응답(ACK)을 받을 때까지 전송을 계속한다. 손실된 패킷은 재전송된다.
3. **흐름 제어 및 혼잡 제어**: TCP는 네트워크의 상태에 따라 데이터 전송 속도를 조절한다. 이는 네트워크 혼잡을 방지하는 데 유리하지만, 실시간 애플리케이션에서는 가변적인 지연을 초래할 수 있다.
4. **오버헤드가 큼**: TCP는 신뢰성과 흐름 제어를 위해 추가적인 오버헤드를 필요로 한다. 이로 인해 헤더 크기가 증가하고, 지연 시간이 더 길어질 수 있다.

TCP를 통한 데이터 전송의 총 지연 시간 $T\_{\text{TCP}}$는 다음과 같이 나타낼 수 있다:

$$
T\_{\text{TCP}} = T\_{\text{transmission}} + T\_{\text{propagation}} + T\_{\text{processing}} + T\_{\text{retransmission}} + T\_{\text{ack}}
$$

여기서:

* $T\_{\text{retransmission}}$은 손실된 패킷의 재전송 지연이다.
* $T\_{\text{ack}}$은 확인 응답(ACK)을 기다리는 지연 시간이다.

이 식에서 $T\_{\text{retransmission}}$과 $T\_{\text{ack}}$이 추가되므로, TCP는 UDP보다 지연 시간이 길어질 수 있다.

우선순위 큐잉(priority queuing)은 트래픽의 우선순위에 따라 큐에서 처리되는 순서를 결정한다. 일반적으로 실시간 트래픽은 가장 높은 우선순위를 부여받아 즉시 처리되며, 다른 트래픽은 낮은 우선순위 큐에 할당된다.

$$
\text{Total Latency} = \text{Processing Delay} + \sum\_{i=1}^{n} \text{Queue Delay}\_i
$$

여기서 $\text{Queue Delay}\_i$는 각 우선순위 큐에서 발생하는 지연을 나타낸다.

**5.3 트래픽 셰이핑과 폴리싱**

QoS 설정에서 트래픽 셰이핑과 폴리싱은 네트워크 성능을 최적화하는 데 중요한 역할을 한다.

* **트래픽 셰이핑(Traffic Shaping)**: 데이터 전송률을 일정하게 유지하여 버스트 트래픽이 발생하지 않도록 조절한다. 이는 지연과 지터를 줄이는 데 유리한다.
* **트래픽 폴리싱(Traffic Policing)**: 네트워크 정책에 따라 트래픽이 허용 범위를 초과하지 않도록 제어한다. 초과된 트래픽은 드롭(drop)되거나 낮은 우선순위로 처리된다.

#### 6. 실시간 네트워크 모니터링

실시간 네트워크에서는 지속적인 모니터링이 필수적이다. 모니터링 도구는 네트워크 성능을 분석하고, 지연이나 패킷 손실과 같은 문제를 조기에 감지하여 해결할 수 있도록 도와준다.

**6.1 네트워크 성능 모니터링 도구**

다양한 도구가 실시간 네트워크 성능 모니터링을 위해 사용된다. 대표적인 도구는 다음과 같다.

* **Wireshark**: 네트워크 패킷을 캡처하고 분석하는 데 사용되는 도구로, 지연, 패킷 손실, 프로토콜 문제를 분석하는 데 유용하다.
* **Nagios**: 네트워크 장비와 연결 상태를 실시간으로 모니터링하고, 문제 발생 시 알림을 제공하는 네트워크 모니터링 시스템이다.

**6.2 네트워크 성능 분석**

네트워크 성능 분석은 주기적인 트래픽 패턴을 파악하고, 네트워크 대역폭, 지연, 지터, 패킷 손실률 등을 평가하는 데 중점을 둔다. 실시간 애플리케이션의 특성을 고려하여 이 지표들이 요구 사항을 충족하는지 지속적으로 검토해야 한다.

#### 7. 실시간 네트워크 설정의 예

실시간 네트워크 설정은 다양한 시나리오에 따라 달라질 수 있다. 아래는 몇 가지 대표적인 실시간 네트워크 설정 예이다.

**7.1 산업 자동화 네트워크**

산업 자동화에서는 EtherCAT과 같은 실시간 이더넷 프로토콜을 사용하는 네트워크 설정이 일반적이다. 이 설정에서는 각 노드가 고정된 시간에 데이터를 전송하며, 지연과 지터가 최소화된다.

**7.2 미디어 스트리밍 네트워크**

미디어 스트리밍에서는 QoS를 통해 오디오 및 비디오 스트림에 높은 우선순위를 부여하고, UDP 프로토콜을 사용하여 낮은 지연과 높은 전송 속도를 보장한다.

이와 같은 설정을 통해 실시간 네트워크에서의 효율적이고 안정적인 통신이 가능해진다.
