Blog
스터디
CS Study with SON
2주차
Multiplexing / Demultiplexing

출처 - https://github.com/jmxx219/CS-Study (opens in a new tab)

Mutiplexing & Demultiplexing

배경

전송계층과 애플리케이션 계층

  • 전송계층 프로토콜은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스 간의 논리적인 통신(Logical Communication)을 제공
    • 논리적 통신(Logical Communication) : 실제 물리적인 전송이 아닌, 메세지를 주고받는 과정에서 오류체크, 흐름제어 등의 역할
    • 즉, 네트워크를 통한 안정적, 신뢰성있는 데이터 전달로 애플리케이션 프로세스들이 직접 연결된 것 처럼 보이게 함
  • 전송계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현 됨
    • 애플리케이션의 메시지를 분할하여 전송계층 헤더를 추가해 세그먼트로 변환
  • 어플리케이션 계층의 클라이언트들은 각각 독립적인 프로세스로 실행 됨

전송계층과 네트워크 계층

  • 전송계층의 메시지 운반
    • 애플리케이션 계층 프로세스 → 네트워크 계층(네트워크 계층의 경계 지점)
    • 네트워크 계층 → 애플리케이션 계층 프로세스
  • 예시: 편지 보내기
    • 토끼 가족과 고양이 가족이 편지를 주고 받는다.
    • 엄마 토끼는 가족들의 편지를 모아서 집배원에게 편지를 전달해준다.
    • 고양이네 집에 편지가 도착하면 엄마 고양이가 편지들을 가족들에게 나눠준다.
      • 편지 : 애플리케이션 메시지
      • 집 : 호스트(종단 시스템)
      • 가족들 : 각 프로세스
      • 엄마 : 전송계층 프로토콜
      • 우편 서비스 : 네트워크 계층의 프로토콜
      • 집배원 : 소켓
      • 다중화 : 엄마 토끼가 가족의 우편물을 모아 집배원에게 넘겨주는 작업
      • 역다중화 : 엄마 고양이가 우편물을 가족들에게 직접 나눠주는 작업
  • IP 서비스 모델
    • 최선형 전달 서비스(Best Effort Delivery)
      • 비신뢰적 서비스
      • 네트워크를 통해 데이터를 전송할 때 최선을 다하지만, 패킷 손실, 중복, 순서 변경 등의 문제가 발생할 수 있음
    • 신뢰적 서비스
      • 이 서비스는 데이터 손실, 중복, 순서 병경 등의 문제 없이 데이터를 전송할 것을 보장
  • TCP는 IP의 호스트 간의 비신뢰적인 서비스를 프로세스 사이의 신뢰적인 데이터 전송 서비스로 만들어줌


소켓 (opens in a new tab)

하나의 호스트에서 여러개의 네트워크 애플리케이션 프로세스가 실행 중 이다.
전송계층은 하위의 네트워크 계층으로부터 수신한 데이터를 여러 프로세스들 중 하나에게 전달해야한다.
이때 수신 측 호스트의 전송계층은 데이터를 직접 프로세스에게 전달하지 않고, 호스트가 가진 여러개의 소켓들 중 적절한 한 개의 소켓으로 전달하는 역할을 한다.


개념

  • 전송계층이 제공하는 응용 프로세스 통신 통로 자료구조
    • 어플리케이션 프로세스가 전송계층에 실제 데이터를 주고받는 자료구조

사용 이유

  • 소켓 주소(IP주소 + 포트번호)를 통해 응용 프로세스의 소켓 주소를 구분할 수 있으며 프로세스는 여러 개의 소켓을 가질 수 있음
    • 즉, 소켓 주소를 가지고 있지 않으면 어떤 프로그램으로 전달되야 하는지, 어떤 프로그램의 어떤 소켓으로 전달되어야 할지를 알 수 없음
  • IP주소를 통해 네트워크에서 통신하는 각 호스트를 식별함
    • 호스트는 NIC을 통해 네트워크에 연결되고, 각 NIC는 고유한 IP주소를 할당 받음
      • NIC (Network Interface Card): 컴퓨터의 내부에 위치하는 하드웨어 장치로, 이를 통해 컴퓨터가 네트워크에 연결되고 통신할 수 있음
    • 따라서 IP주소는 NIC를 통해 연결된 호스트들을 식별함
  • 전송계층은 하나의 NIC로부터 다른 NIC까지 데이터를 전송함
    • 이때 IP주소만으로는 NIC의 여러 프로세스를 구분할 수 없음 (IP는 호스트의 NIC를 구분함)
    • 따라서 어플리케이션 프로세스는 포트 번호를 통해 같은 NIC을 사용하는 어플리케이션 프로세스를 구분함
* IP주소 → NIC 구분
* 소켓 주소(IP주소+포트번호) → 어플리케이션 프로세스 구분

해당 포트번호를 가지고 어플리케이션 프로세스를 구분해서 데이터를 전달 할 수 있도록 하는것이 전송계층의 다중화 서비스



Mutiplexing

다중화 (MUX)


개념

  • 여러 애플리케이션의 소켓들로부터 들어오는 데이터를 수집하여, 세그먼트로 만들어 하위 레이어로 전송하는 것
  • 애플리케이션 계층의 여러개의 소켓에서 전송되는 데이터를 모으고, 데이터에 헤더 정보를 포함한 세그먼트들을 네트워크 계층에 전달
    - 세그먼트: 전송계층에서 다중화하여 만들어진 데이터
    - IP 데이터그램: 네트워크 계층에서 다중화하여 만들어진 데이터
  • 출발지 호스트에서 소켓으로부터 데이터를 모아 헤더 정보를 더해 캡슐화 한 후, 캡슐화된 세그먼트들을 네트워크 계층으로 전달하는 작업
  • 여러 애플리케이션들이 전송계층으로 메세지를 전달하면, 전송 계층에서는 헤더를 붙여 캡슐화하고 네트워크 계층으로 일렬로 보냄


Demultiplexing

역다중화 (DEMUX)


개념

  • 하위 레이어로부터 수신된 세그먼트의 정보를 확인하여 응용계층의 각각 올바른 소켓으로 전달해주는 과정
    • 세그먼트의 헤더정보 속 포트번호를 사용하여 올바른 소켓으로 전달
    • 이때 프로토콜(TCP/UDP)에 따라 구체적인 헤더 정보가 다름
  • 수신 측에서 도착한 세그먼트를 해당 소켓으로 전달하기 위해 수신 측 포트 번호를 사용하여 세그먼트를 구분하는 과정


다중화 유형

연결형 다중화/역다중화(connection-oriented)

  • 통신 소켓간에 1:1 논리적 연결 설정
  • 소켓 식별: 출발지 IP주소 + 출발지 포트번호 + 목적지 IP주소 + 목적지 포트번호
  • TCP에서 사용
  • 서버호스트는 동시에 많은 TCP소켓 지원 가능
  • 웹 서버는 연결되는 각 클라이언트마다 다른 소켓을 가짐
    • 하지만 오늘날의 고성능 웹서버들은 하나의 프로세스만 사용
    • 각각의 새로운 클라이언트 연결을 위해 새로운 연결 소켓과 함께 새로운 스레드를 생성하는 방식 이용

비연결형 다중화/역다중화(connectionless)

  • 통신 소켓간에 1:1 논리적 연결 미설정
  • 한개의 소켓이 여러개의 소켓과 연결이 가능함 (1:N 통신 가능)
  • 소켓 식별: 목적지 IP주소 + 목적지 포트번호
  • UDP에서 사용
    • UDP 소켓은 목적지 IP 주소와 목적지 포트번호에 의해서만 식별되므로 프로세스가 데이터를 받았지만 누구의 데이터인지 확인할 방법이 없음
    • 이로인해 UDP는 단방향 통신이며 응답 메시지가 없는 통신임

해당 내용은 전송계층에서의 다중화와 역다중화에 초점이 맞춰져있지만, 다중화와 역다중화는 한 계층의 프로토콜이 상위 계층의 프로토콜에 의해 사용될 때마다 필요한 작업이다.



캡슐화 (encapsulation)



개념

  • 네트워크 프로토콜에서 데이터를 전송하기 위해 데이터에 헤더와 트레일러 같은 제어정보를 추가하는 프로세스

전송계층의 캡슐화

  • 전송계층에서 헤더에 다중화에 필요한 출발지 포트 번호, 목적지 포트 번호를 붙여서 세그먼트 만듦
  • 네트워크 계층으로 보낸 해당 세그먼트는 IP데이터그램에 의해 인캡슐레이션 됨
    • 세그먼트가 IP데이터그램의 data부분에 들어감

IP 데이터그램
IP패킷이라 많이 부르지만, 패킷이란 표현은 일반적으로 많이 사용되는 표현이다. 따라서 IP데이터그램이 더 정확한 이름이다.



Ref

[Network]다중화와 역다중화란 무엇인가? (opens in a new tab)
3.2 다중화와 역다중화 (opens in a new tab)