UroA 개발 블로그

[Network] (트랜스포트 계층) 다중화와 역다중화 본문

Network

[Network] (트랜스포트 계층) 다중화와 역다중화

UroA 2015. 11. 30. 19:59

다중화와 역다중화

 

 

트랜스포트(전송) 계층(trransport layer)은 애플리케이션(응용)계층과 네트워크 계층 사이에 존재한다.

트랜스포트 계층은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스에게 직접 통신 서비스를 제공하는 기능을 한다.

 

 

트랜스포트 계층 개요

 

 - 트랜스포트 계층 프로토콜은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스들간의 논리적 통신을 제공

  * 네트워크 계층 프로토콜은 호스트들 사이의 논리적 통신을 제공

 - 논리적 통신 : 애플리케이션의 관점에서 보면 프로세스들이 동작하는 호스트는 직접 연결된 것처럼 보인다는 것

 

 - 트랜스포트 계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현
 - 세그먼트 : 트랜스포트 계층에서 전송되는 패킷 호칭
 
 - 애플리케이션에서 보낸 메시지 길이가 길어 세그먼트에서 지원하는 길이를 초과하면?
  -> 두 개 이상의 세그먼트로 나눠 전송
  -> 네트워크 계층의 데이터그램에 캡슐화되어 전송 (※네트워크 라우터들은 오로지 데이터그램의 네트워크 계층 필드들에 대해서만 동작)
 
 - 네트워크 애플리케이션에는 하나 이상의 트랜스포트 계층 프로토콜이 사용 가능
   ex) 인터넷 : TCP, UDP 두 개의 프로토콜을 가짐 (서로 다른 서비스 집합 제공)

 

 - UDP(User Datagram Protocol) : 애플리케이션에게 비신뢰적이고 비연결형인 서비스를 제공
 - TCP(Transmission Control Protocol) : 애플리케이션에게 신뢰적이고 연결지향형 서비스 제공
   (*애플리케이션 개발자는 네트워크 애플리케이션 설계시 두 가지 프로토콜 중 하나를 명시해야 함)
 
 - IP는 호스트들 간에 논리적 통신을 제공 (최선형 전달 서비스(best effort delivery service))
  -> 호스트들 간 세그먼트를 전달에 있어 최대한 노력하지만, 반드시 전달됨을 보장하지 않는다. (+ 순서대로 도착하는 것도 보장x)
  -> 안정성↓
 - TCP와 UDP 모두 IP 데이터그램을 사용해 세그먼트 전송
 
 - 트랜스포트 계층은 여러 개의 소켓(socket)과 네트워크 계층간의 다중화(multiplexing)와 역다중화(de-multiplexing) 동작 지원
   * 네트워크 계층은 호스트와 호스트간의 데이터 전송을 맡음
 - 소켓? -> 네트워크에서 프로세스로 데이터를 전달하고, 프로세스로부터 네트워크로 데이터를 전달하는 출입구

 

다중화 역다중화

 

 - 하나의 애플리케이션(이하 AP)은 하나 이상의 소켓을 생성할 수 있다.
 - 네트워크 계층은 서로 다른 호스트간에 데이터그램을 전송하기 위한 계층
   트랜스포트 계층은 호스트에 존재하는 여러 개의 소켓 간에 데이터를 전달하기 위한 계층
    -> 하나의 IP로 들어온 패킷을 여러 개의 소켓 중 어느 소켓으로 전달할 것인지 ?
    -> 역다중화 필요
 - 여러 개의 소켓으로부터 들어오는 패킷을 서로 공유하는 네트워크 계층을 통해 전송
    -> 다중화 필요

 

 간단하게 다중화란 여러소켓으로부터 데이터를 수집하여 헤더를 붙여 전송하는것을 말하고, 역다중화란 수신된 세그먼트(다중화로 생성된 패킷)를 올바른 소켓에 전달하는 것을 합니다.

 

 -포트(port)
   *다중화 및 역다중화를 구현하기 위해 포트 번호 사용 (호스트 내에서 unique하게 부여)
    -> 소켓 IP주소 + 포트번호로 인터넷 상에 uniquely identified
   *0~65535 범위 (16bit)
   *0~1023는 well-known 포트 번호 (ex> HTTP 80, FTP 21)
   *그 외 번호 -> 일반 응용 프로그램에 의해 사용됨 (OS가 할당)

 

 - 역다중화 과정
   *TCP 소켓은 4개 투플(출발지 IP주소, 출발지 포트번호, 목적지 IP 주소, 목적지 포트번호)로 된 집합에 의해 식별
      -> 네트워크로부터 호스트에 TCP 세그먼트 도착
         * 다른 출발지 주소/포트번호를 가지고 도착한 두 개의 TCP 세그먼트는 두 개의 다른 소켓으로 향하게 됨
      (Socket clientSocket = new Socket ("SeverHostName", 4652);  -> TCP 연결 설정 세그먼트 생성 명령)
      -> 클라이언트 프로세스를 위한 TCP 소켓을 생성 (이 소켓을 통해서만 데이터는 클라이언트 프로세스로 들어오고 떠남)
      -> 서버 컴퓨터의 호스트 OS가 세그먼트 수신
      -> 연결요청을 포트넘버 4652로 연결 수락을 기다리는 서버 프로세스로 보냄
      (Socket connectionSocket = welcomeSocket.accept();)
 
#서버 호스트는 동시에 존재하는 많은 TCP 소켓 지원 가능
   -> 각각의 소켓은 프로세스에 접속돼있고, 네 가지 투플에 의해 식별됨

 

[출처] 컴퓨터 네트워킹 하향식접근 (제 6판)

Comments