지난 글에서, Transport layer action 중 demultiplexing(역다중화)에 대해서 언급한 적이 있다. 이번 글에서는 demultiplexing과 multiplexing에 대해서 정확히 정리해볼 예정이다.
1. Transport layer & Application layer
먼저 다음과 같은 상황이 있다고 가정해보자.

위 그림을 설명해보면, APACHE라는 HTTP server에서 client의 요청에 따라 메세지를 보내는 과정이다.
- APACHE HTTP 서버의 application layer에서 HTTP메세지를 transport layer에게 전달한다.
- transport layer는 segment header field 값들을 설정하고, segment를 만들어 network 계층에게 전달한다.
- 그 후 계층들을 통해 client의 transport 계층까지 도달한다.
이 때, 이 메세지에 대해서 transport는 client의 application layer 중 메세지에 맞는 application에 전달해야 된다. 그렇다면, transport계층에서 client에 있는 수많은 application 중에 올바르게 어떻게 전달할까?
이를 해결하는 방법이 바로 multiplexing과 demultiplexing이다.
2. Multiplexing
먼저 간단하게 multiplexing에 대해서 알아보자.
Multiplexing은 sender의 transport layer에서 진행되는 일이다.
다음과 같은 일이 처리된다.
- application에서 여러 socket을 통해 넘어오는 데이터들을 다루고,
- 그 데이터에 transport layer의 헤더를 추가하는 일을 진행한다.
위의 처리 과정 후에, network 계층으로 넘어가 reciever에게 전달된다. 후에 reciever 측의 transport layer에서 demultiplexing할 때 이용된다.
3. Demultiplexing
우리에게 중요한건 demultiplexing이다. demultiplexing에 대해서 간단하게 알아보자.
Demultiplexing은 reciever의 transport layer에서 진행되는 일이다.
다음과 같은 일이 진행된다.
- network 계층으로부터 넘어온 segment의 헤더를 확인하고(나에게 오는 데이터가 맞는지)
- 올바른 socket(application으로의 출입문)으로 전달한다.
위 과정을 조금 더 자세하게 알아보자.
다음은 TCP/UDP의 segment format이다.

위 그림을 설명하기 전에 정리하고 가야할 점은 3계층의 식별자와 4계층의 식별자이다.
- 3계층의 identifier(식별자)는 IP address이고,
- 4계층의 identifier(식별자)는 port number이다.
위, 그림은 TCP/UDP의 포맷으로, 4계층에 속하는 TCP/UDP의 포맷이다. 즉, host는 IP datagram을 받고, network 계층에서 IP address를 제거해 위 그림과 같은 형태로 transport 계층에 전달해 주는 것이다. transport 계층 전달받은 segment format의 port 번호를 확인해 알맞은 소캣을 통해 application 계층으로 전달한다.
그럼 이제, UDP의 demultiplexing과 TCP의 demultiplexing에 대해서 알아보자. 먼저 여기서 짚고 넘어가야 할 둘의 차이점은, UDP는 연결설정이 필요 없다는 것이고, TCP는 연결 설정이 필요하다는 것이다.
-Connectionless Demultiplexing(=UDP)
먼저, UDP의 demultiplexing에 대해서 알아보자.
UDP의 socket을 만들어서 데이터를 주고 받을 때는, socket에 데이터그램을 먼저 만들어야 된다. socket의 데이터그램에는 본인의 local port 번호 말고도 꼭 들어가야할 정보가 두 가지 존재하는데, 다음과 같다.
- 목적지 IP address
- 목적지 Port 번호
이렇게 데이터그램을 만들어서 데이터를 보내면, reciever는 다음과 같이 일을 처리한다.
- destination port번호를 확인한다.
- UDP segment를 port번호와 맞는 socket으로 보낸다.
만약, 같은 목적지와 같은 포트 번호를 가진 데이터그램이라면, IP 주소가 다르더라도, 결국에는 같은 socket으로 들어간다. 이 reciever의 일 처리 과정을 demultiplexing이라고 한다.

여기서 생기는 궁금점은, 각자 socket을 만들어서 각자 local port번호 있는 것은 알지만, 어떻게 상대방의 port번호를 알고 그 port번호를 실어서 보내는가?이다. 그에 대한 답은 다음과 같다.
- 표준 port 번호 사용(HTTP: 80/8080)하면 미리 알고 있는 정보가 된다.
- application layer에서 서로의 port 번호 공유
위 두가지 방법 외에도 더 존재하지만, 보통 표준 port 번호를 사용하는 경우가 많다.
-Connection-oriented Demultiplexing(=TCP)
반면, TCP의 demultiplexing 과정은 어떨까?
TCP는 UDP와 달리 4가지의 식별자가 필요하다. 그 식별자는 다음과 같다.
- source IP address
- source port number
- destination IP address
- destination port number
위의 4개가 다 필요한 이유는 UDP와 달리 1대1로 연결 설정한 뒤 데이터를 주고 받기 때문이다.
TCP는 server-client paradigm에서 작동하는 대표적인 protocol인데, server측은 동시에 많은 TCP socket을 가지고 있다. 그 이유는 한 명의 client만 두지 않기 때문에, 동시에 여려 client와 데이터를 주고 받으려면 여러 socket이 필요하기 때문이다.
이 때, 각각의 socket 위의 4가지 식별자가 존재한다. 각각의 socket은 서로 다른 클라이언트와 연결돼 있다. 서버는 4가지 정보를 다 담은 segment를 보내고, 클라이언트는 받은 TCP segment format의 4가지 식별자들 다 확인한 후 알맞는 socket으로 전달한다. 클라이언트 측에서 일어나는 이 과정을 Demultiplexing이라고 한다.

그럼 UDP때와 같이, 어떻게 목적지의 IP주소와 port 번호를 아냐는 것이다. TCP는 연결 설정을 미리 해놓기 때문에, 이 데이터들이 오고가기 전에, 1대1로 연결을 해준 뒤, 서로의 신원을 IP address와 port 번호로 확인한다. 그렇기 때문에 segment를 전송할 때도, 4가지 정보를 다 포함해서 전달할 수 있는 것이다.
4. 정리
- Multiplexing, Demulitplexing은 segment와 datagram의 header field의 값들에 의해 진행된다.
- UDP는 destination의 port 번호만 보고 demultiplexing을 진행하고,
- TCP는 4가지 식별자를 다 확인하고 demultiplexing을 진행한다.
- 이 multiplexing과 demultiplexing은 모든 layer에서 일어나는 일이다.
'학교공부 > [컴퓨터 네트워크]' 카테고리의 다른 글
| [컴퓨터 네트워크] - Transport layer_Principles of reliable data transfer(1): rdt (0) | 2025.04.24 |
|---|---|
| [컴퓨터 네트워크]-Transport layer_UDP (0) | 2025.04.24 |
| [컴퓨터 네트워크] - Transport layer_프롤로그 (0) | 2025.04.23 |
| [컴퓨터 네트워크] - Application layer_Socket Programming (0) | 2025.04.21 |
| [컴퓨터 네트워크]-Application layer_Video Streaming and CDNs (0) | 2025.04.21 |