junyeokk
Blog
Network·2025. 04. 20

multiplexing, demultiplexing

네트워크를 공부하다 보면 ’멀티플렉싱(multiplexing)’과 ’디멀티플렉싱(demultiplexing)’이라는 단어가 자주 등장한다. 생소하지만 일상 생활 속 택배 시스템과 비슷하다.

📡 multiplexing

컴퓨터에서는 수많은 애플리케이션(예: 웹 브라우저, 게임, 채팅 프로그램 등)이 동시에 네트워크를 사용한다. 이 프로그램들은 각각 독립적으로 데이터를 주고받고 싶어 한다. 하지만 우리가 사용할 수 있는 네트워크 연결은 제한적이다. 그래서 여러 프로그램의 데이터를 하나의 연결로 묶어서 보내야 할 필요가 있다.

image.png

이걸 바로 Multiplexing(멀티플렉싱)이라고 한다.

전송 계층(TCP 또는 UDP)은 각 애플리케이션(정확히는 소켓)으로부터 데이터를 받아 그 위에 헤더(header)라는 라벨을 붙인다. 이 라벨은 나중에 수신 측에서 ‘이건 누구한테 가는 택배다’라고 알려주는 송장 같은 것이다. 송신 측에서는 멀티플렉싱을 통해 데이터를 모아 하나의 큰 택배 상자처럼 만들어 네트워크에 실어 보낸다.

📡 demultiplexing

이제 반대로 수신 측에서는 네트워크를 타고 온 데이터에서 각 라벨을 읽어내고, 그 데이터를 정확한 애플리케이션에게 전달해야 한다. 이 과정이 바로 Demultiplexing(디멀티플렉싱)이다.

택배 비유를 계속하자면, 택배 아저씨가 상자를 들고 집에 도착했을 때 상자에 써 있는 이름과 방 번호를 보고 각자에게 배달해주는 과정이라고 보면 된다. 네트워크에서는 이때 포트 번호(port number)와 IP 주소 등의 정보를 사용해서 누가 받을 데이터인지를 판단한다.

📡 UDP와 TCP에서의 차이점

디멀티플렉싱 방식은 사용하는 프로토콜에 따라 다르다. 대표적으로 UDP(비연결형)과 TCP(연결형)을 비교해보자.

UDP

UDP는 비연결형 프로토콜이다. 데이터를 보낼 때 따로 연결을 맺지 않고 그냥 던진다. 편지처럼 주소만 적어서 우체통에 넣는 셈이다.

디멀티플렉싱에서도 UDP는 목적지 포트 번호만 보고 어떤 소켓으로 데이터를 전달할지 결정한다. 즉, 포트 번호만 일치하면 어떤 출발지에서 오든 간에 같은 소켓으로 전달된다.

image.png

예를 들어, 아래와 같이 서버 소켓이 있다면

plain
DatagramSocket serverSocket = new DatagramSocket(6428);

6428 포트로 오는 모든 메시지는, 출발지 IP가 어디든 누가 보내든 목적지 포트만 맞으면 그 serverSocket으로 간다.

TCP

TCP는 훨씬 정교하다. TCP는 연결형 프로토콜이다. 데이터를 보내기 전에 먼저 상대와 연결을 맺고, 그 연결을 유지하면서 데이터를 주고받는다.

이 때 서버 입장에서 보면 여러 클라이언트가 동시에 연결할 수 있다. 따라서 서버는 각 클라이언트와의 연결을 정확하게 구분해서 관리해야 한다.

image.png

다음 4가지 정보(4-tuple)를 모두 확인한다.

  1. 출발지 IP 주소
  2. 출발지 포트 번호
  3. 목적지 IP 주소
  4. 목적지 포트 번호
출발지 IP출발지 포트목적지 IP목적지 포트
192.168.1.105000203.0.113.180
192.168.1.205000203.0.113.180

이 둘은 모두 동일한 서버 IP와 포트로 연결을 시도하지만, 출발지 IP가 다르다. 두 연결은 모두 목적지 포트 80이지만, 4-tuple 전체가 다르기 때문에 TCP는 이를 서로 다른 연결로 처리한다.