본문 바로가기
네트워크

트랜스포트 계층 개요, 다중화와 역다중화

by SpearZero 2024. 1. 26.

3.1 트랜스포트 계층 서비스 및 개요

트랜스포트 계층 프로토콜은 각기 다른 호스트에서 동작하는 애플리케이션 프로세스간의 논리적 통신(logical communication)을 제공한다.

  • 애플리케이션의 관점에서 보면 프로세스들이 동작하는 호스트들이 직접 연결된 것처럼 보인다.
  • 애플리케이션 프로세스는 메시지 운반에 사용되는 물리적 인프라스트럭처의 세부 사항에 상관없이 서로 메시지를 송신하기 위해 트랜스포트 계층에서 제공하는 논리적 통신을 사용한다.

트랜스포트 계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현된다.

  • 송신 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터 수신한 메시지를 트랜스 포트 계층 세그먼트(segment)라고 알려진 트랜스포트 계층 패킷으로 변환한다.
    • 애플리케이션 메시지를 세그먼트로 만들기 위해 작은 조각으로 분할하고, 각각의 조각에 트랜스포트 계층 헤더를 추가한다.
  • 트랜스포트 계층은 송신 종단 시스템에 있는 네트워크 계층으로 세그먼트를 전달한다.
  • 세그먼트는 네트워크 계층 패킷(데이터그램) 안에 캡슐화되어 목적지로 전달된다.
    • 네트워크 라우터는 네트워크 계층 필드에 대해서만 동작한다. 즉, 라우터는 데이터그램 안에 캡슐화된 트랜스포트 계층 세그먼트의 필드를 검사하지 않는다.
  • 수신 측에서 네트워크 계층은 데이터그램으로부터 트랜스포트 계층 세그먼트를 추출하고 트랜스포트 계층으로 세그먼트를 보낸다.
  • 트랜스포트 계층은 수신 애플리케이션에서 세그먼트 내부의 데이터를 이용할 수 있도록 수신된 세그먼트를 처리한다.

3.1.1 트랜스포트 계층과 네트워크 계층 사이의 관계

  • 트랜스포트 계층 프로토콜
    • 각기 다른 호스트에서 동작하는 프로세스들 사이의 논리적인 통신 제공
  • 네트워크 계층 프로토콜
    • 호스트들 사이의 논리적 통신을 제공한다.

트랜스포트 계층 프로토콜들은 종단 시스템에 존재한다.

  • 종단 시스템 안에서 트랜스포트 프로토콜은 애플리케이션 프로세스에서 네트워크 경계(네트워크 계층)까지 메시지를 운반한다.
  • 메시지가 네트워크 계층 내부에서 어떻게 이동하는지는 언급하지 않는다.

트랜스포트 계층이 제공할 수 있는 서비스는 하위 네트워크 계층 프로토콜의 서비스 모델에 의해 제약 받는다.

  • 네트워크 계층 프로토콜이 호스트 사이에서 전송되는 트랜스포트 계층 세그먼트에 대한 지연 보장이나 대역폭 보장을 제공할 수 없다면, 트랜스포트 계층 프로토콜은 프로세스끼리 전송하는 메시지에 대한 지연 보장이나 대역폭 보장을 제공할 수 없다.

하위 네트워크 프로토콜이 상응하는 서비스를 제공하지 못할 때도 특정 서비스는 트랜스포트 프로토콜에 의해 제공될 수 있다.

  • 하위 네트워크 프로토콜이 비신뢰적이라도, 트랜스포트 계층은 신뢰적인 데이터 전송 서비스를 제공할 수 있다.

3.1.2 인터넷 트랜스포트 계층의 개요

  • UDP(User Datagram Protocol)
    • 비신뢰적이고 비연결형인 서비스를 요청한 애플리케이션에게 제공한다.
  • TCP(Transmission Control Protocol)
    • 신뢰적이고 연결지향형 서비스를 요청한 애플리케이션에게 제공한다.

인터넷 프로토콜(Internet Protocol, IP)

  • 인터넷의 네트워크 계층 프로토콜
  • 호스트들 간에 논리적 통신을 제공하는 최선형 전달 서비스(best-effort delivery service)
    • 통신하는 호스트들 간에 세그먼트를 전달하기 위해 최대한 노력을 하지만, 어떠한 보장도 하지 않음
    • 세그먼트의 전달을 보장하지 않으며, 순서대로 전달된다는 것도 보장하지 않음
    • 세그먼트 내부 데이터의 무결성을 보장하지 않음
    • 비신뢰적인 서비스(unreliable service)라고도 불린다.

트랜스포트 계층 다중화(transport-layer multiplexing)와 역다중화(demultiplexing)

  • '호스트 대 호스트' 전달을 '프로세스 대 프로세스 전달'로 확장한다.

UDP와 TCP는 헤더에 오류 검출 필드를 포함함으로써 무결성 검사를 제공한다.

3.2 다중화와 역다중화

프로세스는 소켓(socket)을 갖고 있다.

  • 네트워크에서 프로세스로 데이터를 전달하고, 또한 프로세스로부터 네트워크로 데이터를 전달하는 출입구 역할을 한다.
  • 수신 측 호스트의 트랜스포트 계층은 실제로 데이터를 직접 프로세스로 전달하지 않고, 대신에 중간 매개자인 소켓에게 전달한다.

역다중화(demultiplexing)

  • 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업(수신자의 관점)

다중화(multiplexing)

  • 출발지 호스트에서 소켓으로부터 데이터를 모으고, 이에 대한 세그먼트를 생성하기 위해 각 데이터에 헤더 정보(나중에 역다중화에 사용됨)로 캡슐화 하고, 그 세그먼트들을 네트워크 계층으로 전달하는 작업(송신자의 관점)

트랜스포트 계층 다중화에서 요구하는 사항

  • 소켓은 유일한 식별자를 갖는다.
  • 각 세그먼트는 세그먼트가 전달될 적절한 소켓을 가리키는 특별한 필드를 갖는다.
    • 출발지 포트 번호 필드(source port number field)
    • 목적지 포트 번호 필드(destination port number field)

역다중화 순서(UDP에서 역다중화 동작 방식)

  1. 호스트의 각 소켓은 포트 번호를 할당 받는다.
  2. 세그먼트가 호스트에 도착하면 트랜스포트 계층은 세그먼트 안의 목적지 포트 번호를 검사하고 상응하는 소켓으로 세그먼트를 보낸다.
  3. 세그먼트의 데이터는 소켓을 통해 해당되는 프로세스로 전달된다.

비연결형 다중화와 역다중화

UDP 소켓은 목적지 IP 주소와 목적지 포트 번호로 구성된 두 요소로 된 집합에 의해 식별된다.

  • 2개의 UDP 세그먼트가 출발지 IP 주소와 출발지 포트 번호가 모두 다르거나 출발지 IP 주소와 출발지 포트번호 중 어느 하나가 다를지라도, 같은 목적지 IP 주소와 목적지 포트 번호를 가지면 2개의 세그먼트는 같은 목적지 소켓을 통해 같은 프로세스로 향한다.

출발지 포트 번호는 '회신 주소'의 한 부분으로 사용된다.

A에서 출발지 포트 번호는 9157이다. B에서 회신할 때 출발지 포트번호 9157을 사용한다.

 

그림에서 C의 dest port는 6428일 것이다.(A와 같은 소켓을 사용함)

연결지향형 다중화와 역다중화

TCP 소켓은 4개 요소의 집합(four-tuple)에 의해 식별된다.

  • 출발지 IP 주소
  • 출발지 포트 번호
  • 목적지 IP 주소
  • 목적지 포트번호

UDP와는 다르게 다른 출발지 주소 또는 다른 출발지 포트 번호를 가지고 도착하는 2개의 TCP 세그먼트는(초기 연결 설정을 요청하는 TCP는 제외) 2개의 다른 소켓으로 향하게 된다.

TCP 연결 설정

  • TCP 서버 애플리케이션은 '환영 소켓'을 갖고 있다. 이 소켓은 포트 번호 12000을 가진 TCP 클라이언트로부터 연결 설정 요청을 기다린다.
  • TCP 클라이언트는 소켓을 생성하고 연결 설정 요청 세그먼트를 보낸다.
  • 연결 설정 요청은 목적지 포트번호 12000과 TCP 헤더에 설정된 특별한 연결 설정 비트를 가진 TCP 세그먼트다. 또한 그 세그먼트는 출발지 포트 번호를 포함하는데, 클라이언트가 선택한 포트 번호이다.
  • 서버 프로세스로 동작하는 컴퓨터의 호스트 운영체제가 목적지 포트 12000을 포함하는 연결 요청 세그먼트를 수신하면, 이 세그먼트를 포트 번호 12000으로 연결 수락을 기다리는 서버 프로세스로 보낸다.
  • 새롭게 생성된 연결 소켓은 4개 요소의 값에 의해 식별될 것이다.

그림에서 보듯이 목적지 IP 주소와 포트번호가 같아도, 출발지의 IP주소와 포트번호가 각각 다르면 각각의 소켓이 생성된다.

웹 서버와 TCP

웹 서버는 각각의 연결에 따라서 새로운 프로세스를 만든다. 이들 프로세스는 각자 연결 소켓을 가지며, 이 연결 소켓을 통해 HTTP 요청을 수신하고 응답을 전송한다.

 

그러나 연결 소켓과 프로세스 사이에 항상 일대일 대응이 이루어지는 것은 아니다. 오늘날의 많은 고성능 웹 서버는 하나의 프로세스만을 사용한다. 그러면서, 각각의 새로운 클라이언트 연결을 위해 새로운 연결 소켓과 함께 새로운 스레드를 생성한다.

 

클라이언트와 서버가 지속적인(persistent HTTP)사용

  • 지속적인 연결시간 동안 같은 서버 소켓을 통해 HTTP 메시지를 전달한다.

클라이언트와 서버가 비지속적인(non-persistent) HTTP 사용

  • 모든 요청/응답마다 새로운 TCP 연결이 생성되고 종료된다. 즉, 매번 새로운 소켓이 생성되고 종료된다.

'네트워크' 카테고리의 다른 글

신뢰적인 데이터 전송의 원리  (0) 2024.02.01
UDP  (0) 2024.01.29
DNS  (1) 2024.01.22
웹과 HTTP  (0) 2024.01.15
네트워크 애플리케이션의 원리  (1) 2024.01.10