Shine's dev log
UDP의 개념 (User Datagram protocol) 본문
1. Transport Layer protocol
앞서 Transport layer의 기본적인 원리와 동작 방식, reliable한 데이터 교환 방법(rdt 3.0), congestion control 등의 기본 개념들을 살펴보았다.
이러한 개념들은 Transport layer에 속한 프로토콜에 적용되는 기본 원리들을 설명한 것이고, 이제부터 본격적으로 Transport layer 프로토콜의 구체적인 사례를 살펴보기로 하자.
대표적인 사례로는 TCP와 UDP가 있는데, 보다 간단한 UDP를 먼저 살펴보도록 하자.
2. UDP (User Datagram Protocl)
UDP는 한마디로 굉장히 간단한 프로토콜이다. UDP 프로토콜은 다음과 같은 특징을 가진다.
1) receiver의 준비상황을 전혀 고려하지 않는다.
- 그냥 sender는 무작정 보낼 뿐이다. 따라서 만약 receiver가 준비되어있지 않으면 패킷들이 유실되거나 제대로 전송되지 않는 경우도 발생한다.
2) 패킷이 제대로 전송되었는지 확인하지 않는다.
- reliable한 데이터 전송 환경에서는 ACK 메시지를 통해 패킷이 제대로 전송되었는지 확인하지만, UDP는 그런거 확인따위 하지 않는다.
3) 순서를 상관하지 않고 application layer로 보낸다.
- 패킷의 순서를 상관하지 않고 그냥 받은대로 application layer로 바로 올려보낸다. 따라서 application 단에서 순서를 재조합하는 과정이 필요할수도 있다.
4) UDP도 checksum은 있다.
- 흔히 UDP가 굉장히 간단한 프로토콜이라서 오류검사를 하는 checksum도 없을것이라 생각하기 쉬운데, 잘못된 데이터가 전송되는것은 큰 위험이 따르므로 UDP도 checksum을 두어 데이터 무결성을 검사한다.
다만 congestion control과 같은 기능은 없다.
이와같이 UDP는 극도로 단순한 프로토콜이다. 따라서 신뢰성있는 통신이 필요할 경우에는 UDP는 적절하지 않은 프로토콜이다.
하지만, 모든 일에는 단점이 있으면 장점이 있듯이, UDP에 엄청난 장점이 있다. 바로 단순하기 때문에 쉽고 빠르다는 것이다. 따라서 UDP 프로토콜도 적절한 서비스에 사용한다면 굉장히 큰 효과를 누릴 수 있다.
3. UDP 프로토콜 사용 서비스
UDP 프로토콜은 주로 주기적으로 무엇인가를 할 때, broadcast를 할 때, connection 과정이 짧을 때, 실시간으로 처리되어야하는 application을 사용할 때 사용한다.
그렇다면 대표적으로 UDP가 사용되는 3가지 서비스를 살펴보자.
1) streaming multimedia apps
우선 동영상과 같은 멀티미디어 서비스가 있다. 동영상과 같은 경우 데이터가 빨리빨리 와야지 끊김없이 감상할 수 있으므로 보다 빠른 UDP를 사용하는 경우가 있다.
물론 최근에는 모든 영상 서비스가 웹 위에서 동작하는 경우가 많기 때문에 최근에는 TCP를 사용하는경우가 많지만, 간단한 동영상 서비스를 제공할때는 아직도 UDP를 사용한다.
2) DNS
도메인 관련하여 여러가지 서비스를 제공하는 DNS도 UDP를 사용한다.
DNS는 request와 response가 매우 간결하게 끝나므로, TCP같은 프로토콜을 사용하면 오히려 부담이 크다. 만약 UDP를 사용해서 중간에 패킷이 손실되더라도, 애초에 통신과정이 간결하므로 그냥 다시 보내면 된다.
3) SNMP (Simple Network Management Protocol)
네트워크상의 장치들을 점검할 때 쓰는 프로토콜로, 주기적으로 물어보는 형태이기 때문에 간결한 UDP를 사용한다.
4. UDP header
UDP의 헤더는 TCP의 헤더에 비해 굉장히 간결하다.
아래 그림과 같이 source와 destination의 포트가 적혀있고, UDP 패킷의 길이, checksum 값이 포함되어 있으며 나머지는 다 payload, 즉 데이터다.
참고로 위 그림에서 length는 UDP 헤더를 포함한 길이이다. (즉 payload의 길이 + 헤더의 길이)
5. QUIC (Quick Udp Internet Connection)
QUIC은 구글에서 개발한 프로토콜이다. 웹 접속 시 주로 TCP를 사용한다. TCP가 오래된 프로토콜이다보니 신뢰성있는 통신을 하기에는 좋아도, 최적화 문제 등이 있어서 성능 이슈가 있다.
그래서 보다 간단하고 빠른 UDP 위에서 돌아가면서도, 신뢰성 있게 동작할 수 있는 프로토콜을 고안했는데, 이게 바로 QUIC이다.
최근에는 HTTP 3.0 버전이 QUIC 위에서 돌아가는 등 다양한 곳에서 잘 쓰이고 있다.
오늘 배운 내용을 정리해보면,
1. Transport layer 프로토콜에 간단하고 빠른 프로토콜인 UDP가 존재한다.
2. 빠른대신 준비상황 고려, 전송 확인, 순서 고려는 하지 않는다.
3. 그래도 멀티미디어, DNS, SNMP 등에 이용된다.
4. UDP위에서 QUIC이라는 프로토콜도 동작한다.
위 내용은 공부하며 작성한 것으로 오류가 있을 수 있습니다.
'컴퓨터 네트워크' 카테고리의 다른 글
TCP Flow Control (2) | 2021.02.24 |
---|---|
TCP의 개념 (Transmission Control Protocol) (0) | 2021.02.24 |
패킷 pipelining (go-Back-N, selective repeat) (3) | 2021.02.09 |
Reliable data transfer (rdt 1.0/3.0) (2) | 2021.02.04 |
Transport Layer 개요 (Multiplexing, Demultiplexing) (1) | 2021.02.04 |