[컴퓨터 네트워크] multiplexing / demultiplexing

Pakxe·2023년 10월 3일
6

컴퓨터 네트워크

목록 보기
11/16
post-thumbnail

구성

  • 다중화
  • 역다중화

이 정리는 23-2에 수강한 컴퓨터 네트워크 강의를 기반으로 하였습니다.

시작하기

multiplexing(다중화)demultiplexing(역다중화) 이라는 용어는 트랜스포트 계층에서 사용하는 용어이다. 지금부터 송신자의 애플리케이션 계층에서부터 수신자의 애플리케이션 계층까지 데이터가 여행하는 여정을 살펴보며 다중화와 역다중화를 알아보자.

다중화

클라이언트1, 클라이언트2, 서버 이렇게 3개가 있다고 해보자.

클라이언트1은 포트 넘버 100번의 프로세스가 하나 있고, 클라이언트2는 포트넘버 200번의 프로세스가 하나 있다.

서버는 현재 10번과 11번 포트넘버를 사용하는 2개의 프로세스가 실행되고 있으며, 10번은 100번과, 11번은 200번과 서로 데이터를 주고받을 수 있다.

서버의 애플리케이션 계층에서 클라이언트1, 2의 애플리케이션 계층으로 데이터를 보내려고 한다.

각 프로세스는 각자의 출입문인 소켓을 갖고 데이터를 받아오고 보낼 수 있다.

이제 대략 구조가 머릿속에 그려질 것이다. 지금부턴 서버의 소켓 부분에 집중해보자.

서버의 10번 11번 프로세스는 각각 소켓을 갖고 있다. 그리고 두 프로세스 전부 소켓으로 데이터를 밀어냈다. 그런데, 트랜스포트 계층은 하나이다. 그러면 트랜스포트는 이 각 소켓에서 오는 데이터를 받아서 트렌스포트 헤더를 붙여 세그먼트로 만들고(캡슐화), 그 세그먼트들을 네트워크 계층으로 전달하는 업무를 맡게된다.

(트랜스포트 계층에서 송신을 위한 과정)

이게 다중화(multiplexing)다. 본래 다중화는 여러 데이터 소스를 한 곳에 모으는 작업이나 기술을 말하는데 트랜스포트에서 사용되는 다중화도 이와 비슷한 느낌이다. 그렇다면 역다중화에 대해서도 어느정도 감을 잡을 수 있었을 것이다. 일단 데이터의 흐름대로 과정을 계속 따라가보자.

이렇게 네트워크 계층으로 넘어가 이 계층에서 해야할 일을 수행하고 링크, 물리 계층으로 가서 비트 단위로 전달 매체를 따라 목적지인 100, 200으로 간다.

사실 예시 그림에서 간략화된 부분인데, 트랜스포트 헤더에 단순히 출발지 포트 번호인 10, 11만 붙이는 것이 아니라 더 다양한 필드를 붙인다.

  • 출발지 IP 주소 (tcp 헤더에만)
  • 출발지 포트 #
  • 목적지 IP 주소 (tcp 헤더에만)
  • 목적지 포트 #

    (헤더에는 이외에도 다양한 필드가 존재, checksum 등)

패킷 오류시 재전송 요청을 보내야하기 때문에 출발지 IP 주소와, 포트번호가 필요하다.
그리고 목적지 IP 주소는 당연히 주소를 알아야 수신자의 호스트에 도착할 수 있으므로 필요하고, 이 호스트의 프로세스가 꼭 한개가 아닐 수도 있으므로 이를 구분하기 위해 목적지의 포트 번호도 필요한 것이다.

이렇게 목적지 IP 주소와, 목적지 포트번호로 클라이언트1과 클라이언트2에게 데이터가 잘 전달됐다.

역다중화

이제 클라이언트1과 클라이언트2가 서버에게 데이터를 보낸다고 해보자.

서버에서 했던 과정과 마찬가지로 애플리케이션 계층에서 소켓을 통해 트랜스포트 계층으로 데이터를 넘긴다. 그리고 트랜스포트 계층이 이를 취합해 헤더를 붙이고 네트워크 계층으로 넘긴다.

그렇게 2개의 클라이언트에서 하나의 서버로 데이터가 모이게 되는데, 트랜스포트 계층에서 이 각각의 세그먼트를 헤더의 목적지 포트 번호 필드를 확인해(decapsulation) 맞는 프로세스에 전달해주는 과정이 필요하다. 이를 역다중화(demultiplexing)라고 한다. 여러곳에서 모으는 것이 다중화니까 이와 반대인 역다중화는 한 곳에 모인 것을 여러 곳으로 분산시키는 것이다.

connectionless demultiplexing(demux)

connectionless라는 것은 두 종단 사이 핸드셰이킹을 안하는 UDP 연결을 의미하는데, UDP의 demultiplexing 에선 목적지 IP 주소목적지 포트 번호가 같으면 동일한 소켓을 사용한다.

당연히 IP 주소와 포트 번호가 같으면 같은 소켓을 사용한다고 생각하겠지만, IP 주소와 포트 번호가 같아도 다른 소켓을 사용하는 경우가 존재한다.

connection-oriented demultiplexing(demux)

connection-oriented는 서로 연결부터 맺고 데이터를 전송하는 TCP 연결을 의미한다. TCP에선 4개의 튜플로 다른 소켓을 사용할지 말지를 구분한다. 3개 요소가 동일해도 한개라도 다르면 다른 소켓을 사용한다.

  • 출발지 IP 주소
  • 출발지 포트 #
  • 목적지 IP 주소
  • 목적지 포트 #

이는 신뢰성있는(reliable) 전송을 위한 방식이다. 신뢰성이라함은 비트 오류가 없고 패킷 로스가 없어야 함을 의미한다. 패킷을 잃으면 다시 요청해서 받아올 수 있도록 출발지와 목적지의 IP 주소를 알고 있어야 하므로 TCP 헤더엔 출발지와 목적지의 IP 주소 필드가 있다.

요약

  • 다중화: 여러 곳(소켓)에서 모으기
  • 역다중화: 모아서 여러 곳으로(소켓들로) 뿌리기
profile
내가 꿈을 이루면 나는 또 누군가의 꿈이 된다.

0개의 댓글