다중화
-
Multiplexing, deMultiplexing2023.10.25
Multiplexing, deMultiplexing
3.1 트랜스포트 계층 서비스 및 개요

트랜스포트 계층은 애플리케이션 프로세스 간의 논리적 통신을 제공한다. 실제로는 각각의 프로세스들은 수많은 라우터와 다양한 형태의 링크들을 통해 연결되지만, 이러한 세부사항에 관계없이 각 종단간의 시스템간 메세지 전송을 위해 트랜스포트 계층에서 제공하는 논리적 통신을 사용한다.
각 계층별로 사용하는 데이터의 명칭은 아래와 같다.
- application : 메세지
- transport: 세그먼트 (RFC 에서 UDP 에 대한 패킷은 데이터 그램으로 표현한다)
- network: 데이터그램
- link: 프레임
- physical: 비트
네트워크 계층과 트랜스포트 계층 차이
트랜스포트 계층은 프로세스대 프로세스의 통신을 담당하며, 네트워크 계층은 호스트대 호스트 통신을 제어한다. 즉 각 계층은 고유의 역활을 수행하며 이전 계층의 데이터를 기반으로 작업을 한다.
예를들어 네트워크 계층은 트랜스포트 계층에서 받은 세그먼트를 데이터그램으로 캡슐화 하며, 이 데이터그램을 링크 계층으로 전달한다.
3.2 다중화 및 역 다중화
트랜스포트 계층에서 사용되는 프로토콜은 UDP, TCP 프로토콜이다. UDP 와 TCP 프로토콜이 공통적으로 제공하는 기능은 다중화(transport-layer-multiplexing) 및 역다중화 (demultiplexing) 와 오류 검출 이다.
multiplexing
각 종단 시스템에 존재하는 프로세스는 소켓을 갖는다. 수신 호스트의 트랜스포트 계층은 네트워크 계층으로 부터 데이터를 받는다. 이후 데이터를 프로세스로 전달을 해야하는데 앞서 말했듯이 프로세스로 전달을 하기위해선 각 프로세스에 맞는 소켓으로 전달을 해야한다.
이렇게 데이터를 올바른 프로세스나 서비스로 전달하기 위해 적절한 소켓을 사용하는 것 역다중화 라고 한다.
송신 시스템의 트랜스포트 계층은 애플리케이션 계층으로부터 받은 데이터에 헤더 정보를 추가하여 세그먼트로 만들고, 이를 네트워크 계층으로 전달하는 것을 다중화라고 한다

위 사진에서 프로세스 P1 과 P2 가 올바른 데이터를 받기 위해선 받기 위해선 반드시 역다중화가 필요하며, 이 과정은 앞서 말했듯이 트랜스포트 계층에 도착한 세그먼트를 각 프로세스의 소켓으로 전달되야 함을 의미한다.
UDP 세그먼트

위 사진은 대략적인 UDP세그먼트의 형태이다. 대부분의 프로토콜은 해당 프로토콜의 헤더에 핵심 기능이 담겨있다.
위 세그먼트의 형태를 보면 출발지 및 목적지 포트번호가 존재한다. 즉 역다중화에 사용할 목적지 포트번호를 세그먼트의 헤더에 기록하고 있으며, 이 포트번호를 통해 수신 종단시스템의 특정 프로세스 소켓에 역다중화가 정확하게 될수 있는것이다.

위에서 보이는것 처럼 UDP 소켓이 목적지 IP 주소와 목적지 포트 번호로 구성된 두 요소로 된 집합에 의해 식별 된다.
출발지 포트 번호를 헤더에 추가하는 이유는 서버 측에서 세그먼트를 다시 호스트 A로부터 받기 위해 서버 B에서 출발한 세그먼트의 목적지 주소로 사용하기 위함이다.
TCP 세그먼트
UDP 의 세그먼트는 출발지 포트와 목적지 포트번호를 가지고 있음을 확인했다.
TCP의 세그먼트는 UDP 와 다르게 4개의 요소(four-tuple)를 가지고있다.
- 출발지 IP 주소
- 출발지 포트 번호
- 목적지 IP주소
- 목적지 포트번호
TCP 세그먼트는 역다중화를 위해 위 4가지 요소를 사용하며 이를 통해 알맞은 프로세스의 소켓을 통해 데이터를 전달한다.

위 사진을 보면 호스트 A 와 호스트 C 는 웹서버 B 에 TCP 연결후 데이터를 전송하고 있다. UDP 는 비연결 프로토콜이지만 TCP 는 연결 프로토콜임을 기억해야한다. UDP 를 사용하면 서버측에선 하나의 소켓(고유한 포트번호)에서 여러 데이터를 동시에 받는 시스템이고, TCP 프로토콜을 사용하면 서버측에선 하나의 리스닝 소켓을 통해 연결을 수락하며, 각 연결을 4개의 요소를 통해 고유한 소켓을 사용하여 데이터를 받는다.
즉 정리하자면
UDP에서는 하나의 포트에 하나의 소켓만 바인딩되지만, 여러 클라이언트로부터의 데이터를 수신할 수 있다.
TCP에서는 하나의 포트에 "리스닝 소켓"이 바인딩되며, 이 소켓을 통해 여러 개의 연결을 수락하고 각 연결에 대해 별도의 소켓이 할당된다. (즉 TCP 에선 80번 포트를 갖는 여러개의 소켓이 존재할수 있다 이 각 소켓은 4개의 요소로 인해 구분(인덱싱) 된다.)
위 사진에서 호스트 C는 웹서버 B와 2개의 TCP 연결을 하고있다. 우리가 기존에 사용한 UDP 세그먼트의 헤더와 다르게 TCP 세그먼트의 헤더엔 출발지 IP 및 목적지 IP 가 추가적으로 있다.
결국 이 4개의 요소를 사용하여 목적지에 특정 소켓을 구분할수 있는것이다. 사진 왼쪽에 있는 헤더와 오른쪽에 있는 헤더는 출발지 포트가 다르기 때문에 웹서버 B에서 데이터를 보내야할 소켓을 구분할수 있을거고, 오른쪽 헤더와 아래 헤더는 출발지 IP 를 통해 서로다른 소켓을 구분하여 역다중화를 적절하게 수행할수 있을 것이다.
'네트워크' 카테고리의 다른 글
TCP(1) (1) | 2023.11.21 |
---|---|
RDT(Reliable Data Transfer) (1) | 2023.11.21 |
소켓 (0) | 2023.10.23 |
DNS (0) | 2023.10.19 |
HTTP1/HTTP2/HTTP3 (0) | 2023.10.19 |