CS/Network

[Network]다중화와 역다중화란 무엇인가?

frog-in-well 2022. 7. 26. 09:03

0. 들어가기 전에…

TCP가 제공하는 신뢰적인 데이터 전달 서비스는 무엇일까?

TCP는 프로세스가 자신의 수신 버퍼로부터 읽은 데이터 스트림이 손상되지 않았으며 손실이나 중복이 없다는 것과 순서가 유지된다는 것을 보장한다. 즉, 수신자가 받은 바이트 스트림은 송신자가 전송한 것과 같은 바이트 스트림이다.

어떻게 이러한 서비스를 제공하는 것일까?

1. 트랜프스포트 계층 서비스

1.0 트랜스포트 계층과 애플리케이션 계층

트랜스포트 계층 프로토콜은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스들 간의 논리적인 통신을 제공한다. 즉, 애플리케이션의 관점에서 프로세스들이 동작하는 호스트들이 직접 연결된 것처럼 보이도록 한다.

  • 트랜스포트 계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현된다.
  • 애플리케이션의 메시지를 분할하여 트랜스포트 계층 헤더를 추가해서 트랜스포트 계층 세그먼트(트랜스포트 계층 패킷)로 변환한다.

1.1 트랜스포트 계층과 네트워크 계층

편지를 보내는 일을 생각해보자. 개구리네 가족은 고양이네 가족과 편지를 주고 받는다. “조이"라는 개구리는 가족들의 우편물을 모아서 집으로 찾아오는 집배원에게 편지를 전해준다. 고양이네 집에 편지가 도착하면 “헤이”라는 고양이는 우편물을 가족들에게 나눠 준다.

  • 봉투 안의 편지 = 애플리케이션 메시지
  • 가족들 = 프로세스
  • 집 = 호스트(종단 시스템)
  • “조이", “헤이" = 트랜스포트 계층 프로토콜
  • 우편 서비스과 집배원 = 네트워크 계층 프로토콜 (집배원은 소켓으로 생각해도 될 것 같다.)

정리하자면, 트랜스포트 계층은 종단 시스템의 애플리케이션 프로세스에서 네트워크 계층(네트워크의 경계 지점)까지 메시지를 운반하고, 또한 네트워크 계층에서 애플리케이션 프로세스로 메시지를 운반하는 역할을 한다.

추가로 조이가 가족들의 우편물을 모아서 집배원에게 넘겨줄 때 다중화 작업을, 헤이가 우편물을 가족들에게 직접 나눠주는 것을 역다중화 작업에 비유할 수 있다.

1.2 인터넷 트랜스포트 계층

TCP/IP 네트워크에서 네트워크는 2가지 유형의 트랜스포트 계층 프로토콜을 제공한다. - UDP와 TCP

  • UDP는 비신뢰적이고 비연결형 서비스이고 TCP는 신뢰적이고 연결지향형 서비스이다.
  • UDP와 TCP는 헤더에 오류 검출 필드를 포함해 무결성 검사를 제공한다.
  • UDP는 프로세스 간 데이터 전달과 오류 검출이라는 최소한의 서비스를 제공한다.
  • TCP는 흐름제어, 순서번호, 확인응답, 타이머를 사용해 신뢰적인 데이터 전달을 제공한다. + 혼잡 제어
  • UDP는 허용하는 한 어떤 속도로도 데이터를 전송할 수 있다.

IP 서비스 모델은 최선형 전달 서비스이다. 즉 IP는 호스트 간에 세그먼트 전달을 보장하지는 않는다.(비신뢰적 서비스) TCP는 IP의 호스트 간의 비신뢰적인 서비스프로세스 사이의 신뢰적인 데이터 전송 서비스로 만들어준다.

2. 다중화와 역다중화

하나의 호스트에서 여러 개의 네트워크 애플리케이션 프로세스가 실행 중이라고 생각해보자.

트랜스포트 계층이 하위의 네트워크 계층으로부터 데이터를 수신하면 여러 프로세스들 중 하나에게 데이터를 전달해야 한다.

이 때, 수신 측 호스트의 트랜스포트 계층은 실제로 데이터를 직접 프로세스로 전달하지 않는다. 호스트가 가진 여러 개의 소켓들 중 적절한 한 개의 소켓으로 전달하는 역할을 한다.

2.1 다중화와 역다중화

출발지 호스트에서 소켓으로부터 데이터를 모아 헤더 정보를 더해 캡슐화 한다. 캡슐화된 세그먼트들을 네트워크 계층으로 전달하는 작업을 다중화라고 한다.

네트워크 계층을 통해 도착한 데이터를 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업을 역다중화라고 한다.

소켓은 유일한 식별자를 가지고 세그먼트는 각 세그먼트가 전달될 적절한 소켓을 가리키는 특별한 필드를 갖고 있어야 한다.

UDP와 TCP의 동작 방식은 다르다. 간단하게 설명하자면 UDP 소켓은 포트 번호를 기반으로 연결한다. TCP 소켓은 포트번호와 IP 주소를 기반으로 연결한다.

2.2 UDP 다중화/역다중화

  • UDP 소켓이 생성될 때, 트랜스포트 계층은 포트 번호를 소켓에게 할당한다.
  • 송신 호스트는 애플리케이션 메세지와 함께 헤더에 출발지 포트 번호 목적지 포트 번호를 담아 트랜스포트 계층 세그먼트로 캡슐화한다. 
  • 네트워크 계층으로 전달되어 IP 데이터 그램으로 캡슐화되고 수신 호스트로 전달한다.
  • 수신 호스트의 트랜스포트 계층은 세그먼트 안의 목적지 포트 번호를 검사하고 올바른 소켓에 전달한다.
  • UDP 소켓은 목적지의 IP주소와 목적지 포트 번호로 식별된다. (목적지 IP 주소는 네트워크 계층에서 알아낸다. 출발지 포트 번호는 복귀 주소로 사용하기 위해 보내졌다.)

즉, UDP 세그먼트들의 출발지의 IP주소와 포트번호와는 상관없이 목적지 IP 주소와 목적지 포트 번호가 같다면 동일한 목적지 소켓을 통해 동일한 프로세스로 향한다.

2.3 TCP 다중화/역다중화

TCP 소켓과 UDP 소켓의 차이점은 TCP 소켓은 출발지 IP 주소, 출발지 포트 번호, 목적지 IP 주소, 목적지 포트 번호에 의해 식별된다는 것이다. 

즉, TCP 세그먼트들은 출발지가 다르면 서로 다른 목적지 소켓을 통해 프로세스로 전달된다.