IP는 인터넷에서 Host to Host 간의 데이터를 전달하는 기본적인 프로토콜이다. 여기서 중요한 점은, IP는 데이터가 목적지에 도착할 때까지의 경로를 책임지는 역할은 하지만, 그 이후에 수많은 프로그램들이 어떻게 통신할지에 대한 정보는 제공하지 않는다는 것이다.
즉, IP는 장비 간의 통신만을 지원할 뿐, 그 장비 내부에서 어떤 애플리케이션이 데이터를 받을지에 대한 처리를 할 수 없다.
🚨 ICMP(Internet Control Message Protocol)와 IP의 오류 처리
IP가 제공하는 통신 과정에서 오류가 발생할 때는 ICMP가 오류를 알려준다. 예를 들어, 목적지에 데이터가 도착하지 못했거나, 라우터에서 문제가 발생하면 ICMP는 송신 측에 오류 메세지를 보내 네트워크 문제를 감지하게 한다.
하지만, ICMP는 그저 오류를 알리는 역할만 할 뿐, 문제를 해결하거나 데이터를 재전송하는 등의 대처는 하지 못한다.
여러 애플리케이션이 한 장비 안에서 동시에 통신하는 상황을 해결하기 위해 등장한 개념이 포트 번호다.
IP는 장치 간의 통신만 해결할 수 있기 때문에, 장비 내부에서 어떤 애플리케이션이 데이터를 받을지 식별하기 위해 포트 번호가 필요하다. 이를 통해 같은 장치 내에서 여러 프로그램이 동시에 네트워크 통신을 할 수 있게 되었다.
TCP와 UDP는 IP 위에서 동작하는 전송 계층 프로토콜이다. 이 프로토콜들이 등장한 이유는 오류 처리와 프로그램 간의 데이터 통신을 좀 더 효율적으로 하기 위해서다.


TCP와 UDP의 등장 배경을 살펴봤으니, 오늘은 UDP에 대해 알아보자.
UDP는 TCP와 함께 OSI 모델 4계층인 전송 계층에 포함되는 프로토콜이다. IP를 사용하는 네트워크 내에서 컴퓨터 간 메시지들이 교환될 때 제한된 서비스만 제공하는 프로토콜이다.
UDP는 데이터를 전송할 때 IP 프로토콜을 통해 데이터그램이라는 단위로 데이터를 전송한다. TCP와 달리 메시지를 데이터그램으로 나누고, 반대편에서 재조립, 순서 조정 등의 서비스는 하지 않는다.
UDP는 IP 계층에서 제공하지 않는 서비스도 제공하는데, IP 내 사용자 구분을 위한 포트 번호 부여와 데이터 손상 여부 확인에 쓰이는 체크섬 서비스다.
UDP의 가장 큰 장점은 데이터 전송의 신속성이다. TCP는 연결 설정과 확인 응답, 흐름 제어 등의 과정을 거쳐야 하기 때문에 전송 속도가 느리지만, UDP는 이런 과정 없이 데이터를 바로 전송하므로 빠르게 데이터를 주고받을 수 있다.
이로 인해 실시간 통신이 중요한 상황(e.g. 실시간 스트리밍, 온라인 게임 등)에서 UDP가 많이 사용된다.
DNS(Domain Name System)는 도메인 이름을 IP 주소로 변환하는 작업을 하는데, 이때 UDP를 사용한다.
DNS 쿼리와 응답은 대부분 짧은 데이터이지만, 매우 많은 요청이 들어온다. UDP는 TCP와 달리 오버헤드가 적고, 데이터를 전송하기 위한 세션 확립 과정이 없기 때문에, 빠르게 요청과 응답을 처리하고 네트워크 리소스를 절약할 수 있다.
하지만, 512바이트를 넘는 데이터를 전송하거나 DNS 서버 간의 영역 전송(Zone Transfer) 같은 작업을 할 때는 TCP를 사용한다. TCP는 더 큰 데이터 전송이나 신뢰성이 중요한 작업에 적합하다.
UDP는 간단한 프로토콜이기 때문에 헤더도 매우 단순하다. 헤더는 총 8바이트로, 아래와 같이 구성된다.

Reference