Principle of Network Application

KVV·2024년 10월 11일

네트워크 애플리케이션 개발의 중심은 다른 위치의 End System에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것이다.


위 그림에서처럼 End System에만 애플리케이션 소프트웨어가 존재하며, 애플리케이션 개발자는 애플리케이션을 개발할 때, End System에서 실행되는 소프트웨어만 개발하면 되고 네트워크 코어 장비까지 개발할 필요는 없다. (no need to write software for network-core devices)

A) Network Application Architecture

고정되어있는 네트워크 구조(Internet Protocol Stack)과 다르게 애플리케이션 구조는 개발자가 설계하며 애플리케이션이 다양한 End System에서 어떻게 조직되어야 하는지를 알려준다.

  • 네트워크 구조는 고정되어 있고 해당 애플리케이션에 특정 서비스 집합을 제공한다.
  • 애플리케이션 개발자는 현대 네트워크 애플리케이션에서 사용되는 두 가지의 가장 잘 알려진 구조 (clinet-server / P2P) 중 하나로 개발할 것이다.

Client-Server Architecture

항상 동작하고 있는 서버가 존재하고, 클라이언트라는 다른 호스트들로부터 서비스 요청을 받는 구조

  • Server: 항상 동작하고 있는 호스트

    • 고정 IP 주소라는 잘 알려진 주소를 갖는다.
    • 서버가 항상 동작하기 때문에 클라이언트는 서버 주소로 패킷을 보내 언제든지 서버에 연결할 수 있다.
    • always-on host
      - permanent IP address
      - often in data center
  • Client: Server에게 서비스 요청을 하는 다른 호스트

    • 가끔 또는 항상 켜져 있을 수 있다.

    • 클라이언트끼리는 직접적으로 통신하지 않는다.

      • do not communication directly with each other
    • intermittently connected
      - may have dynamic IP addresses

  • Data Center: 많은 수의 호스트를 갖춰 가상의 서버를 생성하는 역할을 한다.

    • 클라이언트로부터 하나의 서버에 수많은 요청을 하는 경우에 사용한다.
    • 인기 있는 서비스들은 하나 이상의 데이터 센터를 사용한다.


Client-Server 구조의 예시로는 웹, 파일 전송, 원격 로그인, 전자 메일 등이 있다.

P2P(Peer to Peer) Architecture

항상 켜져 있는 인프라스트럭처 서버에 최소로 의존하거나 전혀 의존하지 않는 구조

  • Peer: 간헐적으로 연결된 호스트 쌍
    • P2P 구조는 Peer 내부의 호스트 쌍이 직접 통신하도록 한다.
    • Service provider가 소유하지 않고 사용자들이 제어하는 데스크톱과 랩톱
    • 대부분의 Peer들은 가정, 대학, 사무실에 위치한다.
    • peers request service from other peers, provide service in return to other peers.
  • Self Scalability(자기 확장성): 시스템의 부하가 증가할 때 그 부하를 분산시켜 전체 성능이 유지되도록 하는 시스템의 능력
    • 예를 들면, 파일 공유 애플리케이션에서는 사용자가 서로 파일을 공유합니다. 이때, 네트워크에 많은 사용자가 참여할수록 시스템에 부하가 증가하지만, 그 피어들이 파일을 다른 피어들에게 분배함으로써 그 시스템에 서비스 능력을 추가한다.
      - new peers bring new service capacity, as well as new service demands.
  • 비용 효율적
    • 데이터 센터같은 상당한 서버 인프라스트럭처와 서버 대역폭을 요구하지 않는다.


대표적인 예시로는 파일 공유 래플리케이션인 BitTorrent가 있다.

B) Interprocess communication

two processes communicatation within same host uses interprocess communication

process: 네트워크를 통해 데이터를 송수신하는 소프트웨어 프로그램 또는 작업 단위

  • 실제 통신하는 것은 프로그램이 아니라, 실행되고 있는 프로그램인 프로세스이다.

2개의 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지 교환으로 서로 통신한다.

송신 프로세스는 메시지를 만들어서 보내고 수신 프로세스는 메시지를 받고 역으로 메시지를 보냄으로써 응답한다.

Client and Server Process

네트워크 애플리케이션은 네트워크에서 서로 메세지를 보내는 두 프로세스로 구성된다.

-Server Process: 통신 세션을 시작하기 위해 접속을 기다리는 process

-Client Process: 통신을 초기화(다른 process와 세션을 시작하려고 접속을 초기화)하는 process

Interface(교차점) between Process and Computer Network

  • Socket: 프로세스가 네트워크로 메세지를 보내고 받을 수 있도록 해주는 역할
    • Process: House / Socket: Door 로 비유된다.
    • 네트워크 애플리케이션이 인터넷에 만든 프로그래밍 인터페이스이므로, 애플리케이션과 네트워크 사이의 API(Application Programming Interface) 라고도 한다.


위 그림에서 보이듯이, Socket은 호스트의 애플리케이션 계층과 트랜스포트 계층간의 인터페이스이다.

애플리케이션의 개발자는 애플리케이션 계층에 대한 모든 통제권을 갖지만 트랜스포트 계층에 대한 통제권은 거의 갖지 못한다.

  1. 트랜스포트 프로토콜의 선택

  2. 트랜스포트 계층 매개변수의 설정

    • 최대 버퍼
    • 최대 세그먼트 크기

Process Address Assignment

프로세스끼리 패킷을 보내기 위해서는 수신 프로세스가 주소를 갖고 있을 필요가 있다.

  • 수신 프로세스를 식별하기 위해서는 두 가지 정보가 명시되어야 한다.
    1. 호스트 주소

      • IP 주소 (32 비트, 호스트를 유일하게 식별)
    2. 그 목적지 호스트 내의 수신 프로세스를 명시하는 식별자

한 호스트가 많은 애플리케이션을 수행하고 있는 경우 어떻게 애플리케이션끼리 구별할 수 있을까?

  • 목적지 포트 번호(Port Number)를 사용한다.
  • 애플리케이션마다 특정한 포트 번호가 할당된다.

C) Transpost Services available to the application

Transport Protocol은 네트워크를 통해 애플리케이션 메세지를 전달해야한다. 애플리케이션 개발자는 어떤 기준을 가지고 Transport Protocol을 선택해야할까?

Reliable Data Transfer

Transport Protocol이 신뢰적 데이터 전송 서비스를 제공하면 송신 프로세스는 데이터를 소켓으로 보내고 그 데이터가 오류 없이 수신 프로세스에 도착할 것이라는 확신을 갖는다.

  • Loss Tolerant Application: Reliable Data Transfer을 제공하지 않는 애플리케이션
    • 어느 정도의 데이터 손실을 참아낼 수 있는 오디오/비디오 등에서 사용될 수 있다.

Throughput

송신 프로세스가 수신 프로세스로 비트를 전달할 수 있는 비율

  • 트랜스포트 프로토콜은 가용한 처리율이 항상 적어도 r bps임을 보장해야한다.
  • 이 처리율이 보장되지 않으면 애플리케이션은 낮은 속도로 인코딩하거나 포기해야한다.
  1. Bandwidth Sensitive Application: 처리율 요구사항을 갖는 애플리케이션

    • 멀티미디어 애플리케이션
  2. Elastic Application: 가용한 처리율대로 이용할 수 있는 애플리케이션

    • 전자 메일, 파일 전송, 웹 전송 등

Time

트랜스포트 계층 프로토콜은 Timing Guarantee(시간 보장)을 제공할 수 있다.

  • 실시간 애플리케이션에 대체로 사용된다.

Secure

트랜스포트 계층 프로토콜은 하나 이상의 보안 서비스를 제공할 수 있다.

  • 예를 들어, 트랜스포트 계층 프로토콜은 송신 호스트에서 암호화, 수신 호스트에서 해독을 할 수 있다.
  • Confidentiality(기밀성), Integrity(무결성), Authentication(종단 인증) 등의 다른 보안 서비스들도 포함되어있다.

D) Services provided by Internet Transfer Protocol

애플리케이션 개발자로서, TCP와 UDP 중 어떤 트랜스포트 프로토콜을 사용할 것인가?

TCP Service

  1. 연결지향형 서비스(connection-oriented)
    client-server process 전에 세팅하는 것.

    a. 애플리케이션 계층 메세지를 전송하기 전에 클라이언트와 서버가 서로 전송 제어 정보를 교환하게 한다.(Hand-Shaking)

    b. 이 핸드쉐이킹 과정이 클라이언트와 서버에 패킷이 곧 도착하니 준비하라고 알려주는 역할을 한다.

    c. 핸드쉐이킹 과정을 지나면 TCP 연결이 두 프로세스의 소켓 사이에 존재한다고 말할 수 있다.

    d. (c) 과정에서 TCP 연결은 두 프로세스가 서로에게 동시에 메세지를 보낼 수 있기에 full-duplex(전이중) 연결이라고 한다.

    e. 메세지 전송을 마치면 연결을 끊는다.

  2. 신뢰적인 데이터 전송 서비스

    • 애플리케이션의 한 쪽이 바이트 스트림을 소켓으로 전달하면 그 바이트 스트림이 손실되거나 중복되지 않게 수신 소켓으로 전달한다.
  3. 혼잡 제어(congestion control) 방식

    • 네트워크가 혼잡 상태에 이르면 프로세스(서버 또는 클라이언트)의 속도를 낮춘다.
    • 통신하는 프로세서의 직접적인 이득보다 인터넷 전체의 성능 향상을 추구한다.

UDP Service

  • 최소의 서비스 모델을 가진 간단한 전송 프로토콜

  • UDP는 비연결형으로 핸드셰이킹 과정이 없고, 비신뢰적인 데이터 전송 서비스를 제공하여 데이터가 전달되는 것을 보장하지 않는다.

  • UDP는 또한 혼잡 제어 방식을 포함하지 않아 프로세스의 속도 저하 없이 네트워크를 이용할 수 있다.
    • 혼잡으로 인해 종단 간 처리율이 낮아져서 속도가 오히려 더 낮아질 수 있다.

Services not provided by Internet Transport Protocol

TCP와 UDP는 처리율 혹은 시간 보장 서비스를 제공하지 않는다.

시간 민감 애플리케이션 같은 경우에는 이러한 처리율 및 시간 지연에 잘 대처할 수 있도록 설계되어 있다.

그러나 지연이 과도할 때는 보장이 없기 때문에 한계가 있다.

E) Application Layer Protocol

다른 종단 시스템에서 실행되는 애플리케이션의 프로세스가 서로 메세지를 보내는 방법을 정의하는 프로토콜

Application Layer Protocol이 정의하는 것

  • 여러 애플리케이션 계층 프로토콜은 RFC에 명시되어 있어 공중 도메인에서 쉽게 찾을 수 있다.

    • 예를 들어 브라우저 개발자가 HTTP 규칙을 따른다면 어떤 웹 서버에서도 웹페이지를 가져올 수 있다.
  • 일부 애플리케이션 계층 프로토콜은 독점적이며 공중 도메인에서 찾을 수 없다.

  • 애플리케이션 계층 프로토콜은 네트워크 애플리케이션의 한 요소일 뿐이며, 웹 애플리케이션은 문서 포맷 표준, 웹 브라우저, 웹 서버 등 다양한 요소로 구성된다.

0개의 댓글