다중화(Multiplexing)와 역다중화(Demultiplexing)
네트워크의 전송 계층의 기능 중에 다중화(Multiplexing)와 역다중화(Demultiplexing)가 있습니다. 이것은 프로세스에서 메시지를 보낼 때 알맞은 프로세스를 찾아 그 프로세스에 보내는 방식입니다.
이렇게 말하면 크게 와닿지 않기 때문에, 쉬운 예와 그림을 통해 간단하게 설명해보겠습니다.
다중화와 역다중화는 편지를 보내는 것과 같습니다.
두 개의 큰 집이 있고, 각 집에는 세 명씩 사람이 살고 있습니다. 이들은 서로 편지를 주고 받으며 소통합니다. 그런데 직접 편지를 주고받으러 다니는 것은 비효율적입니다. 여기서 효율성을 높이는 방법이 바로 '다중화'와 '역다중화'입니다.
다중화 (Multiplexing)
각 집에는 '집안의 우체국장'이 있습니다. 1번 집에는 C 사람이, 2번 집에는 D 사람이 이 역할을 합니다. 집 안의 사람들이 보내는 편지는 모두 이 우체국장에게 모입니다. 그리고 우체국장은 이 편지들을 하나의 큰 봉투에 넣어 우편 시스템에 전달합니다.
이 과정이 바로 다중화입니다. 서로 다른 소스에서 오는 데이터(편지)를 하나의 채널(큰 봉투)로 모으는 것입니다.
역다중화 (Demultiplexing)
편지가 다른 집에 도착하면, 그 집의 우체국장이 큰 봉투를 받습니다. 우체국장은 봉투를 열고 각 편지를 받을 사람에게 정확히 분배합니다.
이 과정이 바로 역다중화입니다. 하나의 채널로 받은 데이터를 다시 여러 대상에게 전달하는 것입니다.
이제 이 비유를 컴퓨터 네트워크에 적용해볼 수 있습니다.
네트워크 상에서, 컴퓨터(집)는 서로 데이터(편지)를 주고 받습니다. 각 컴퓨터는 여러 애플리케이션(집안의 사람)을 실행하고 있고, 각 애플리케이션은 데이터를 주고 받고 싶어 합니다.
컴퓨터는 실행 중인 모든 애플리케이션에서 오는 데이터를 하나의 네트워크 연결을 통해 전송합니다. 집안의 모든 편지를 하나의 큰 봉투에 넣어 보내는 것과 같습니다.
데이터가 목적지 컴퓨터에 도착하면, 해당 컴퓨터는 데이터를 올바른 애플리케이션으로 전달합니다. 우체국장이 편지를 각자에게 정확히 분배하는 것과 같습니다.
이제 이 과정을 조금 더 이론적인 측면에서 다루어보겠습니다.
(1) 다중화(Multiplexing)
다중화는 위의 예시에서 보았듯, 발신자가 수행하는 과정입니다.
이 과정은 여러 애플리케이션 계층의 소켓에서 전송되는 데이터를 모아 하나의 큰 "봉투"로 모으는 것과 같습니다. 여기서의 큰 봉투는 세그먼트 (Segment) 라고 할 수 있습니다. 세그먼트는 상위 애플리케이션(Application) 계층의 여러 개의 소켓에서 전송된 데이터를 한데 모은 것입니다.
다중화는 전송(Transport) 계층에서만 할 수 있는 것이 아니라, 어느 계층에서든 여러 곳에서 나온 데이터를 하나로 묶을 때에 사용합니다. 전송 계층에서의 다중화 데이터는 세그먼트라 부르지만 네트워크 계층에서 다중화한 것은 패킷이라고 부릅니다. 패킷에 대해서는 이후 포스팅에서 다루겠습니다.
계층마다 다중화를 하게 되면 메시지를 어떻게 읽어야할지 헷갈릴 수 있습니다. 그래서 이렇게 다중화한 메시지엔 헤더(Header)가 붙게 됩니다.
여기서 헤더는 데이터가 정확이 어디로 전달되어야할지에 대한, 주소 역할을 합니다.
정리하자면, 전송 계층에서의 다중화란, 여러 소켓의 패킷을 수집해 하나의 세그먼트로 캡슐화하여 Network Layer로 내려주는 것을 말합니다.
(2) 역다중화(Demultiplexing)
수신자가 수행하는 과정으로, 세그먼트가 Application Layer로 전달될 때, 올바른 소켓으로 전달하는 과정을 말합니다.
각 세그먼트의 헤더에는 이 데이터를 어떤 소켓으로 전달해야 할지에 대한 정보가 포함되어 있습니다.
(3) 세그먼트
세그먼트의 개념에 대해 간단히 정리해보겠습니다.
세그먼트는 전송(Transport) 계층에서 다중화하여 만들어진 데이터입니다.
헤더(header)에는 전송 측의 포트(source port #)와 목표 포트(dest port #), 그리고 기타(other header fields)가 들어갑니다.
전달하는 쪽의 포트 번호를 source port, 전달받는 쪽의 포트 번호를 dest port로 하여 헤더에 저장합니다.
데이터에는 메시지 (application data)가 들어가는데, 일반적으로 헤더의 크기보다 데이터의 크기가 훨씬 큽니다.
(4) TCP와 UDP의 비교
TCP와 UDP는 모두 다중화와 역다중화 과정을 수행하지만, 그 방식에는 차이가 있습니다.
1. TCP
TCP는 연결 지향적 통신을 제공하며, 데이터를 전송하기 위해 수신자와 발신자 사이에 명확한 1:1 연결을 생성합니다. 이 과정에서 소스 IP, 소스 포트, 목적지 IP, 목적지 포트 네 가지 정보를 사용하여 고유한 소켓을 결정합니다.
TCP에서는 각 클라이언트 소켓마다 서버 소켓 하나가 매핑됩니다. 예를 들어, 사용자가 웹페이지에 접속할 때마다 그 사용자를 위한 독립된 소켓이 생성된다는 것입니다. 그래서 TCP는 클라이언트의 수만큼 소켓이 필요합니다. 그렇기에 UDP에 비해 더 많은 네트워크 자원을 소비합니다.
2. UDP
반면 UDP는 연결 없는 통신을 제공하며, 주로 목적지 포트 번호만을 이용하여 데이터를 올바른 소켓으로 전달합니다. 따로 Connection을 생성하지 않습니다.
UDP의 역다중화 헤더에는 Source port와 Dest port, length, checksum(에러판단 목적)이 존재합니다. UDP는 이 중 dest IP와 dest Port만을 이용해 어떤 소켓으로 가야할지 목적지를 결정합니다.
다시 말해 전송 계층에서 UDP는 멀티플렉싱과, 에러 처리의 크게 두 가지 역할을 수행합니다.
이후 포스팅에서, TCP와 UDP의 헤더를 통해 TCP와 UDP의 차이를 살펴보겠습니다.
참고자료
[컴퓨터 네트워크 - 한양대학교 이석복 교수님]
http://www.kocw.net/home/cview.do?cid=6166c077e545b736
https://the-square-of-y.tistory.com/215
https://the-brain-of-sic2.tistory.com/52
https://dev-nicitis.tistory.com/26
'CS > Network' 카테고리의 다른 글
[네트워크] 전송 계층 : TCP (0) | 2024.02.15 |
---|---|
[네트워크] Pipelined Protocol (0) | 2024.02.12 |
[네트워크] RDT(Reliable Data Transfer) (0) | 2024.02.11 |
[네트워크] OSI 7계층, TCP/IP Updated 을 쉽게 이해해보자 (2) (0) | 2024.02.08 |
[네트워크] OSI 7계층을 쉽게 이해해보자 (1) (0) | 2024.02.08 |