TCP/IP 프로토콜 스택에서 전송 계층(Transport)은 TCP
와 UDP
가 담당합니다.
TCP에 대해서는 바로 전에 설명했습니다.
다시 설명하자면 전송 계층의 목적은 목적지를 찾아가는 주소가 아니라 애플리케이션에서 사용하는 프로세스를 정확히 찾아가고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하는 것입니다.
패킷을 분할하고 조합하기 위해 TCP 프로토콜에서는 시퀀스 번호
화 ACK 번호
를 사용합니다.
바로 아래의 이미지는 TCP 세그먼트 헤더 포맷입니다.
이제 UDP
에 대해서 설명하겠습니다.
UDP
는 TCP
와 달리 전송 계층 프로토콜이 가져야 할 특징이 거의 없습니다.
UDP
에는 신뢰성 있는 통신을 위해 3방향 핸드셰이크로 연결을 미리 확립하고 데이터 분할, 조립하기 위해 패킷 번호를 부여하고 수신된 데이터에 응답하는 작업, 데이터를 특정 단위(윈도 사이즈)로 보내고 또한 유실 발생 시 시퀀스 번호와 ACK 번호를 비교하여 파악하여 재전송하는 기능 등 이러한 특징이 없습니다.
즉, 여태 설명 했던 특징들은 TCP
만 해당되며 UDP
에는 이런 기능이 전혀 없습니다.
데이터 통신은 데이터 전송의 신뢰성이 핵심입니다.
하지만 UDP
는 데이터 전송을 보장하지 않는 프로토콜이므로 제한된 용도로만 사용됩니다.
UDP
는 음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜이나 애플리케이션을 사용하는 경우나 사내 방송, 증권 시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답을 받기 어려운 환경에서 주로 사용됩니다.
음성, 동영상은 디지털 환경에서는 연속된 데이터가 아닌 매우 짧은 시간 단위로 잘게 분할한 데이터가 전송되는 형태입니다. 동영상은 1초 동안 30 ~ 60회의 정지 영상이 빠르게 바뀌면서 우리 눈에는 마치 움직이는 영상처럼 보이는 원리를 이용합니다. 중간에 데이터가 몇 개 유실되는 것보다 재전송하기 위해 잠시 동영상이나 음성이 멈추는 것을 더 이상하게 느낄 수 있습니다.
이렇게 데이터를 전송하는 데 신뢰성보다 일부 데이터가 유실되더라도 시간에 맞추어 계속 전송하는 것이 중요한 화상회의 시스템과 같은 서비스인 경우, UDP
를 사용하게 됩니다.
UDP
는 중간에 데이터가 일부 유실되더라도 그냥 유실된 상태로 데이터를 처리해버립니다.
UDP
는 TCP
와 달리 통신 시작 전, 3방향 핸드셰이크와 같이 사전에 연결을 확립하는 절차가 없습니다.
그 대신 UDP
에서 첫 데이터는 리소스 확보를 위해 인터럽트(Interrupt)를 거는 용도로 사용되고 유실됩니다.
그래서 UDP
프로토콜을 사용하는 애플리케이션이 대부분 이런 상항을 인지하고 동작하거나 연결 확립은 TCP
프로토콜을 사용하고 애플리케이션끼리 모든 준비를 마친 후 실제 데이터만 UDP
를 이용하는 경우가 대부분입니다.
TCP | UDP |
---|---|
연결 지향(Connection Oriented) | 비연결형(Connectionless) |
오류 제어 수행함 | 오류 제어 수행 안 함 |
흐름 제어 수행함 | 흐름 제어 수행 안 함 |
유니캐스트 | 유니캐스트, 멀티캐스트, 브로드캐스트 |
전이중(Full Duplex) | 반이중(Hlf Duplex) |
데이터 전송 | 실시간 트래픽 전송 |
이상으로 UDP에 대해서 간단히 알아봤습니다.