![[Network] multiplexing, demultiplexing](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGVS2o%2FbtsNsn07y1C%2FAgENBDOymsiDbgKbyivsB0%2Fimg.jpg)
네트워크를 공부하다 보면 ’멀티플렉싱(multiplexing)’과 ’디멀티플렉싱(demultiplexing)’이라는 단어가 자주 등장한다. 생소하지만 일상 생활 속 택배 시스템과 비슷하다.
📡 multiplexing
컴퓨터에서는 수많은 애플리케이션(예: 웹 브라우저, 게임, 채팅 프로그램 등)이 동시에 네트워크를 사용한다. 이 프로그램들은 각각 독립적으로 데이터를 주고받고 싶어 한다. 하지만 우리가 사용할 수 있는 네트워크 연결은 제한적이다. 그래서 여러 프로그램의 데이터를 하나의 연결로 묶어서 보내야 할 필요가 있다.
이걸 바로 Multiplexing(멀티플렉싱)이라고 한다.
전송 계층(TCP 또는 UDP)은 각 애플리케이션(정확히는 소켓)으로부터 데이터를 받아 그 위에 헤더(header)라는 라벨을 붙인다. 이 라벨은 나중에 수신 측에서 ‘이건 누구한테 가는 택배다’라고 알려주는 송장 같은 것이다. 송신 측에서는 멀티플렉싱을 통해 데이터를 모아 하나의 큰 택배 상자처럼 만들어 네트워크에 실어 보낸다.
📡 demultiplexing
이제 반대로 수신 측에서는 네트워크를 타고 온 데이터에서 각 라벨을 읽어내고, 그 데이터를 정확한 애플리케이션에게 전달해야 한다. 이 과정이 바로 Demultiplexing(디멀티플렉싱)이다.
택배 비유를 계속하자면, 택배 아저씨가 상자를 들고 집에 도착했을 때 상자에 써 있는 이름과 방 번호를 보고 각자에게 배달해주는 과정이라고 보면 된다. 네트워크에서는 이때 포트 번호(port number)와 IP 주소 등의 정보를 사용해서 누가 받을 데이터인지를 판단한다.
📡 UDP와 TCP에서의 차이점
디멀티플렉싱 방식은 사용하는 프로토콜에 따라 다르다. 대표적으로 UDP(비연결형)과 TCP(연결형)을 비교해보자.
UDP
UDP는 비연결형 프로토콜이다. 데이터를 보낼 때 따로 연결을 맺지 않고 그냥 던진다. 편지처럼 주소만 적어서 우체통에 넣는 셈이다.
디멀티플렉싱에서도 UDP는 목적지 포트 번호만 보고 어떤 소켓으로 데이터를 전달할지 결정한다. 즉, 포트 번호만 일치하면 어떤 출발지에서 오든 간에 같은 소켓으로 전달된다.
예를 들어, 아래와 같이 서버 소켓이 있다면
DatagramSocket serverSocket = new DatagramSocket(6428);
6428 포트로 오는 모든 메시지는, 출발지 IP가 어디든 누가 보내든 목적지 포트만 맞으면 그 serverSocket으로 간다.
TCP
TCP는 훨씬 정교하다. TCP는 연결형 프로토콜이다. 데이터를 보내기 전에 먼저 상대와 연결을 맺고, 그 연결을 유지하면서 데이터를 주고받는다.
이 때 서버 입장에서 보면 여러 클라이언트가 동시에 연결할 수 있다. 따라서 서버는 각 클라이언트와의 연결을 정확하게 구분해서 관리해야 한다.
다음 4가지 정보(4-tuple)를 모두 확인한다.
- 출발지 IP 주소
- 출발지 포트 번호
- 목적지 IP 주소
- 목적지 포트 번호
출발지 IP | 출발지 포트 | 목적지 IP | 목적지 포트 |
---|---|---|---|
192.168.1.10 | 5000 | 203.0.113.1 | 80 |
192.168.1.20 | 5000 | 203.0.113.1 | 80 |
이 둘은 모두 동일한 서버 IP와 포트로 연결을 시도하지만, 출발지 IP가 다르다. 두 연결은 모두 목적지 포트 80이지만, 4-tuple 전체가 다르기 때문에 TCP는 이를 서로 다른 연결로 처리한다.
references
Computer Networking: A Top-Down Approach, 8th edition
COMP0414 수업 내용
'CSE > 네트워크 (network)' 카테고리의 다른 글
[Network] reliable data transfer (0) | 2025.04.20 |
---|---|
[Network] UDP (0) | 2025.04.20 |
[Network] Fairness (0) | 2025.04.20 |
[Network] TCP Congestion control (0) | 2025.04.20 |
[Network] HTTP/0.9 (0) | 2025.02.22 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!