TCP의 단점, 그리고 UDP
지금까지의 얘기만 들어 보면 좋은 점만 한가득인 것 같지만 사실 TCP는 데이터를 전송하기 위해 확인할 게 너무 많다 보니 전송 속도가 느리다는 단점이 있습니다. 일반적인 글, 사진 등의 데이터라면 큰 문제가 안되는데 목소리, 영상 등 실시간성이 중요한 데이터의 경우 사용자가 한 번 로딩하는 데 오랜 시간을 기다릴 수 있겠죠.
그래서 TCP와 유사한 역할을 수행하지만 속도는 빠른 UDP(User Datagram Protocol)라는 프로토콜이 생겼습니다. 아까 TCP가 3 way handshake를 통해 데이터를 주고받는다고 했던 거 기억나시나요? UDP는 그런 연결 과정 없이 보내는 쪽이 일방적으로 데이터를 전송하는 방식입니다.
그래서 TCP보다 용량도 적고 속도도 빠르다는 장점이 있지만 데이터의 신뢰성이 없기 때문에 데이터가 유실되거나 순서가 바뀔 위험이 있습니다. 이런 장단이 있어 UDP는 속도가 중요하고 데이터가 일부 유실되어도 서비스 이용에 큰 문제가 되지 않는 온라인 게임이나 VoIP라고 부르는 음성 데이터를 주고받을 때 주로 사용합니다.
1. UDP의 개요
UDP(User Datagram Protocol)는 TCP처럼 포트 번호에 따라 적절한 애플리케이션에 데이터를 전달하기 위한 프로토콜입니다.
UDP는 데이터를 전달할 때 말고는 기본적으로 아무것도 하지 않습니다. TCP처럼 연결을 성립시키지도 않고 재전송 제어, 윈도우 제어, 혼잡 제어와 같은 기능 또한 없습니다. 그리고 도중에 데이터의 순서가 바뀐다 하더라도, UDP에서는 이를 다시 정렬하거나 하지 않습니다. 필요 없는 기능이나 처리는 수행하지 않고, 어찌 되었든 애플리케이션에 데이터를 전달하는 것이 UDP의 목적입니다.
UDP의 헤더 포맷은 아래와 같습니다.
그냥 봐도 TCP의 헤더 포맷에 비해 매우 심플합니다. UDP 헤더에는 데이터를 전단하기 위한 송신지 포트번호와 목적지 포트 번호, 데이터그램의 길이 및 체크섬밖에 없습니다. 이때 '데이터그램'이란 UDP의 헤더와 실제 UDP 데이터를 합친 것을 말합니다. TCP에서는 'TCP 세그먼트'라고 부르던 것을 UDP에서는 'UDP 데이터그램'이라고 부르는 것입니다.
또한 TCP 헤더는 표준 20바이트지만 UDP 헤더는 8바이트 밖에 되지 않습니다. 그만큼 오버헤드가 적으므로 TCP보다 통신 효율이 높아집니다.
1-1. UDP의 특징
1. 비연결형 서비스로 데이터그램 방식을 제공한다.
- 데이터의 전송 순서가 바뀔 수 있다.
2. 데이터 수신 여부를 확인하지 않는다.
- TCP의 3-way handshaking과 같은 과정 X
3. 신뢰성이 낮다.
- 흐름 제어(flow control)가 없어서 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
4. TCP보다 속도가 빠르다.
5. 1:1 & 1:N & N:N 통신이 가능하다.
https://dev-coco.tistory.com/144
2. UDP의 용도
TCP보다 기능이 적다고 해서 UDP가 못 쓸 프로토콜은 아닙니다. UDP가 훌륭하게 활약할 수 있는 용도로는 주로 다음 3가지가 있습니다.
- 실시간 데이터를 전송할 때
- 여러 상대에게 같은 내용의 데이터를 전송할 때
- 데이터 전송 시 신뢰성이 필요하지 않은 소량의 데이터를 전송할 때
먼저 첫 번째 용도의 실시간 데이터로는 'Volp(Voice over IP)를 들 수 있습니다. Volp는 IP 네트워크상에서 음성을 IP 패킷으로 주고받는 기술입니다. IP 전화에 사용되는 기술이라고 하면 보다 이해하기 쉬울 것입니다.
VoIP 패킷은 지연이 발생하면 음성 품질이 나빠지기 때문에 지연에 민감합니다. 당연한 이야기지만 모처럼 IP 전화를 쓰는데도 음성 품질이 심하게 나쁘다면 사용하는 의미가 없습니다.
이처럼 실시간 데이터를 전송하는 용도에서는 TCP와 같은 연결의 성립이나 확인 응답 시스템은 오버헤드일 뿐입니다. 신뢰성이 낮더라도 어찌 됐든 빠르게 데이터를 전송하는 것이 우선되어야 하기 때문입니다. 또한, VoIP 패킷은 중간의 패킷이 유실되더라도 음성이 약간 끊길 뿐이지 높은 신뢰성이 필요하지 않습니다.
다음으로 두 번째의 '여러 상대와의 통신' 항목을 짚어보겠습니다. 기본적으로 TCP에서는 여러 상대에 같은 내용인 데이터를 전송하는 브로드캐스트, 멀티캐스트 통신이 불가능합니다. 왜냐하면 TCP는 1대 1로 연결을 맺어야 하기 때문입니다. 다시 말해, TCP에서는 유니캐스트 통신밖에 할 수 없습니다.
그러므로 브로드캐스트나 멀티캐스트 통신과 같은 '1대 다' 통신을 하기 위해서는 연결을 맺을 필요가 없는 UDP를 사용합니다. 예를 들어 화상 회의 애플리케이션은 음성이나 영상을 실시간 일제히 전송하는 애플리케이션이므로 UDP를 이용하는 전형적인 애플리케이션이라고도 할 수 있습니다.
그리고 세 번째 용도와 같이 소량의 데이터를 빈번히 주고받을 때도 UDP가 활약합니다. DNS 이름 해석이 바로 그 대표적인 예입니다. 몇 메가바이트나 되는 파일을 전송하는 경우라면 TCP에 의한 신뢰성 확보가 반드시 필요합니다. 왜냐하면, 이처럼 큰 사이즈의 데이터는 여러 개로 나뉘어 전송되는데, 이때 여러 개로 나뉜 데이터 중 일부가 유실된다면 데이터를 원래대로 조합할 수 없게 되기 때문입니다. 그래서 TCP에 의한 신뢰성 확보가 필요합니다. 반면에 수백 바이트의 작은 데이터를 주고받을 경우, TCP의 신뢰성은 오버헤드가 너무 커서 통신효율만 낮아질 뿐이므로 TCP가 이용되는 것입니다.
3. UDP의 이용 사례
UDP는 상대방의 애플리케이션이 동작하는지 등을 확인하지 않은 채 무조건 UDP 데이터그램으로 애플리케이션의 데이터를 송신합니다. 이러한 특성상, TCP만큼 여분의 처리를 하지 않으므로, 데이터 전송 효율이 좋다는 장점이 있습니다. 그 반면에 신뢰성이 높지 않다는 단점이 있습니다. UDP의 경우는 보내고 싶은 UDP 데이터그램이 상대방 애플리케이션까지 제대로 도달했는지 알 수가 없습니다. 만약, 데이터가 도달했는지 확인할 필요가 있다면, 애플리케이션에서 그런 기능을 만들어 넣어야 합니다.
또한, UDP에는 크기가 큰 데이터를 분할하는 기능도 없습니다. 그러므로 전송해야 할 애플리케이션의 데이터 크기가 클 때 에는 애플리케이션 쪽에서 적절한 크기로 쪼개야만 합니다.
UDP를 이용하는 전형적인 애플리케이션은 IP 전화입니다. IP 전화의 음성 데이터는 IP 전화에서 작게 쪼갭니다. IP 전화의 설정에 따라 달라지지만, 음성 데이터가 1초 동안 50개로 분할되게 설정하는 것이 일반적입니다. 요컨대, 음성 데이터 1개당 20밀리 초 분량입니다. IP 전화에서 작게 쪼갠 음성 데이터에 UDP 헤더를 추가해서 전송합니다.
4. TCP와 UDP의 비교
TCP와 UDP 중 어느 쪽을 사용할지는 각 애플리케이션이 어떤 데이터를 전송하는가에 따라 갈립니다. 비율로 따지자면 TCP를 이용하는 애플리케이션 쪽이 많습니다. 왜냐하면, 처리하는 데이터 사이즈가 크고 신뢰성이 필요한 애플리케이션들이 많기 때문입니다.
TCP와 UDP를 적절히 선택하기 위해서는 각각의 특징, 주요 기능과 용도에 대해 알아두어야 합니다. 그럼 TCP와 UDP의 특징과 주요 기능, 용도에 대하여 정리해 보겠습니다.
TCP vs UDP
그림으로 비교하는 TCP vs UDP
각 프로토콜의 특징을 표로 비교해 보면 다음과 같다.
프로토콜 종류 | TCP | UDP |
연결 방식 | 연결형 서비스 | 비연결형 서비스 |
패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
전송 순서 | 전송 순서 보장 | 전송 순서가 바뀔 수 있음 |
수신 여부 확인 | 수신 여부를 확인함 | 수신 여부를 확인하지 않음 |
통신 방식 | 1:1 통신 | 1:1 OR 1:N OR N:N 통신 |
신뢰성 | 높다. | 낮다. |
속도 | 느리다. | 빠르다. |
요약하면,
TCP는 연속성보다 신뢰성 있는 전송이 중요할 때 사용되는 프로토콜이며,
UDP는 TCP보다 빠르고 네트워크 부하가 적다는 장점이 있지만, 신뢰성 있는 데이터 전송을 보장하지는 않는다.
그렇기 때문에 신뢰성보다는 연속성이 중요한 실시간 스트리밍과 같은 서비스에 자주 사용된다.
참고 자료 :
https://mangkyu.tistory.com/15
https://velog.io/@hidaehyunlee/TCP-%EC%99%80-UDP-%EC% 9D%98-%EC% B0% A8% EC% 9D% B4
https://seongonion.tistory.com/74
https://dev-coco.tistory.com/144
'Network tech > IP(Internet Protocol)' 카테고리의 다른 글
[Router] 명령어로 라우터 구성하기 (0) | 2023.07.31 |
---|---|
[네트워크 실습 주요 명령어] IP주소 (0) | 2023.07.31 |
[TCP/UDP] TCP에 대해서 알아보자! (0) | 2023.07.27 |
[DHCP] IP를 동적으로 할당하는 데 사용하는 프로토콜_DHCP (0) | 2023.07.26 |
DNS(Domain Name System)에 대해 알아보자! (0) | 2023.07.26 |