[네트워크/Network] 비연결형 트랜스포트 UDP 정리

kindof

·

2021. 10. 15. 20:16

💡0. 들어가면서

이전 포스팅에서 OSI 7계층에 대해 정리를 했었는데요. 트랜스포트 계층의 기본적인 역할은 네트워크 계층과 애플리케이션 레벨 프로세스 간의 데이터를 넘겨주기 위해서 다중화와 역다중화 서비스를 제공하는 것이었습니다.

 

 

[네트워크/Network] 네트워크의 기본: OSI 계층 구조와 캡슐화

🤔 0. 개요 "OSI 7계층이 무엇인가요?" "컴퓨터 네트워크를 왜 7계층으로 나누나요?" "메시지, 데이터그램, 세그먼트의 차이와 캡슐화는 무엇인가요?" CS를 공부해본 사람이라면 한 번쯤은 OSI 7계층

studyandwrite.tistory.com

 

이 내용을 간단하게 복기해보면, 애플리케이션 계층은 트랜스포트 계층에 '메시지(Message)' 형태로 데이터를 전달해주고, 트랜스포트 계층은 이를 '세그먼트(Segment)' 형태로 네트워크 계층에 넘겨줍니다.

 

그리고 네트워크 계층은 세그먼트를 '데이터그램(Datagram)' 안에 캡슐화하여 목적지 호스트에게 넘겨주고, 목적지 호스트에서는 다시 데이터그램의 헤더에서 트랜스포트 계층으로 무엇을 사용하는지를 확인하고, 적절한 트랜스포트 계층으로 디캡슐화를 하는 것이죠.

 

그런데 트랜스포트 계층은 위와 같은 다중화와 역다중화 역할'만' 하는 것은 아니었는데요. TCP 프로토콜의 경우, 신뢰적인 데이터 전송을 보장하고 혼잡 제어 기능도 제공했습니다.

 

 

[네트워크/Network] TCP, UDP?! TCP는 어떻게 신뢰적인 데이터 전달을 할까?

👀 0. 오버뷰(Overview) OSI 7계층에 대해 공부했을 때, 애플리케이션 계층은 트랜스포트 계층에게 메시지를 전달하고 트랜스포트 계층은 네트워크 계층에게 세그먼트를 전달한다고 했습니다. 그리

studyandwrite.tistory.com

 

 

[네트워크/Network] TCP 혼잡제어에 대한 정리

💡 1. TCP 혼잡제어 TCP 프로토콜하면 가장 먼저 떠오르는 특징은 무엇인가요? 아마 많은 분들이 '신뢰적인 전송 서비스'를 TCP의 가장 큰 특징으로 꼽으실텐데요. 그런데 이 특징만큼 중요한 또 다

studyandwrite.tistory.com

 

하지만 이번 시간에 살펴볼 UDP는 TCP보다 훨씬 간단한 기능만을 제공합니다. 어떻게 보면 아무런 기능도 제공하지 않는 게 UDP의 장점이 되기도 하죠.

 

그럼 이제 UDP란 무엇이며, 어떤 장점을 갖는 프로토콜인지에 대해 천천히 살펴보도록 하겠습니다.

 

 

📖 1. 비연결형 트랜스포트 UDP

TCP와 달리 UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소의 기능만 제공합니다. UDP는 다중화/역다중화 기능과 간단한 오류 검사 기능을 제외하면 IP에 거의 아무것도 추가하지 않죠. 그래서 사실 애플리케이션 개발자가 트랜스포트 계층 프로토콜로 TCP 대신에 UDP를 선택하면, 애플리케이션은 거의 네트워크 계층과 직접 통신하는 셈입니다.

 

UDP는 애플리케이션 프로세스로부터 메시지를 가져와서 다중화/역다중화 서비스에 대한 출발지 포트 번호 필드와 목적지 필드 번호 필드를 첨부하고 다른 두 필드들(길이, 체크섬)을 추가한 후에 최종 세그먼트를 네트워크 계층으로 넘깁니다.

 

네트워크 계층은 트랜스포트 계층 세그먼트를 IP 데이터그램으로 캡슐화하고, 세그먼트를 수신 호스트에게 '최선형' 전달 서비스로 전달하죠. 그리고 만약 세그먼트가 수신 호스트에게 잘 도착하면, UDP는 세그먼트의 데이터를 해당하는 애플리케이션 프로세스로 전달하기 위해서 목적지 포트 번호를 사용합니다.

 

* 여기서 IP의 '최선형' 전달이라는 것은 IP가 세그먼트의 전달을 100% 보장하지 않을 뿐더러, 세그먼트가 순서대로 전달되는 것을 보장하지는 않는다는 뜻입니다. 

 

 

그런데, UDP는 세그먼트를 송신하기 전에 송신 트랜스포트 계층 개체들과 수신 트랜스포트 계층 개체들 사이에 핸드셰이크를 사용하지 않습니다. 그래서 UDP를 "비연결형" 트랜스포트라고도 부르죠.

 

그렇다면 어째서 애플리케이션 개발자는 때때로 TCP가 아닌 UDP 방식으로 애플리케이션을 개발하려고 할까요? TCP가 신뢰적인 데이터 전송을 제공하는데 반해 UDP는 비신뢰적인데도 불구하고요. 그 이유는 아래와 같습니다.

 

 

✅  1) 연결 설정(핸드쉐이킹)이 없으므로 빠르다.

TCP는 데이터 전송을 시작하기 전에 세 방향 핸드쉐이크(3-Way Handshake)를 사용합니다. 반면에 UDP는 그냥 전송을 시작하죠. 이 말은 곧 UDP는 연결을 설정하기 위한 어떤 시간 딜레이도 없다는 뜻입니다. DNS가 TCP에서 동작하지 않고 UDP에서 동작하는 것도 이러한 시간 딜레이를 허용하면 안되기 때문입니다.

 

✅  2) 연결 상태가 없다.

TCP는 종단 시스템에서 연결 상태를 유지합니다. 이 연결 상태는 수신 버퍼 및 송신 버퍼, 혼잡제어 파라미터, 순서번호와 확인응답 번호 등을 포함하는데요. 이에 반해 UDP는 연결 상태를 유지하지 않기 때문에 이러한 파라미터들을 가질 필요가 없습니다. 그래서 일반적으로 특정 애플리케이션에 할당된 서버는 애플리케이션이 TCP보다 UDP에서 동작할 때 더 많은 클라이언트를 수용할 수 있죠.

 

✅  3) 작은 패킷 오버헤드를 가진다.

TCP가 세그먼트마다 20바이트의 헤더 오버헤드를 갖는 반면에 UDP의 헤더는 단 8바이트만큼의 오버헤드만 가집니다. 바로 아래에서 살펴볼 UDP 세그먼트의 구조를 보면 이를 확인하실 수 있습니다.

 

 

2. UDP 세그먼트의 구조

아래 그림은 UDP 세그먼트의 구조입니다.

 

UDP 세그먼트 구조

 

그림을 보면, 애플리케이션 계층의 데이터는 UDP 세그먼트의 데이터 필드에 위치하게 됩니다. 예를 들어 DNS에 대한 데이터 필드에는 질의 메시지나 응답 메시지가 있을 것이고, 오디오 애플리케이션에서는 오디오 샘플이 데이터 필드에 들어가겠죠.

 

또한, UDP 헤더는 2바이트씩 구성된 4개의 필드를 가집니다. 다중화와 역다중화를 위한 출발지/목적지 포트 번호가 있고 길이(length), 체크섬(Checksum) 필드가 존재합니다. 체크섬(Checksum)은 세그먼트가 출발지로부터 목적지로 이동했을 때, UDP 세그먼트 안의 비트에 대한 변경사항이 있는지 검사하기 위해 사용되는 필드입니다.

 


 

이렇게 짧은 내용이었지만 UDP의 개념과 중요한 특성들을 정리해봤습니다. 이번 포스팅을 통해 전하고자 하는 내용은 크게 두 가지였는데요.

 

1) UDP는 어떻게 트랜스포트 계층의 역할을 하는가?

2) UDP를 TCP와 비교했을 때 갖는 장단점은 무엇인가?

 

이 글을 읽고 위 두 가지 질문에 대한 답이 어느정도 정리가 되셨으면 좋겠습니다.

 

감사합니다.