본문 바로가기
네트워크

네트워크 애플리케이션의 원리

by SpearZero 2024. 1. 10.

2.1 네트워크 애플리케이션의 원리

2.1.1 네트워크 애플리케이션 구조

클라이언트-서버 구조(client-server architecture)에서는 항상 동작하고 있는 호스트를 서버(server)라고 부르는데, 서버와의 서비스는 클라이언트(client)라는 다른 호스트들로부터 서비스 요청을 받는다.

  • 클라이언트-서버 구조에서는 클라이언트 서로가 직접적으로 통신하지 않는다.
  • 클라이언트-서버 구조에서는 서버가 고정 IP 주소라는 잘 알려진 주소를 갖는다. 서버는 항상 동작하고 있으므로 클라이언트는 서버 주소로 패킷을 보내서 언제든지 서버에 연결할 수 있다.

P2P 구조에서는 항상 켜져 있는 인프라스트럭처 서버에 최소로 의존한다.(혹은 전혀 의존하지 않음). 대신에 애플리케이션은 피어(peer)라는 간헐적으로 연결된 호스트 쌍이 서로 직접 통신하게 한다.

  • 특정 서버를 통하지 않고 피어가 통신하므로 이 구조를 peer-to-peer, P2P라고 한다.
  • 피어들은 파일을 요구함으로써 부하를 만들어내지만, 파일을 다른 피어들에게 분배함으로써 그 시스템에 서비스 능력을 추가한다.(자가 확장성이 있다.)
  • 상당한 서버 인프라스트럭처와 서버 대역폭을 요구하지 않음

2.1.2 프로세스 간 통신

2개의 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지(message) 교환으로 서로 통신한다. 송신 프로세스는 메시지를 만들어서 네트워크로 보낸다. 수신 프로세스는 메시지를 받고 역으로 메시지를 보냄으로써 응답한다.

클라이언트와 서버 프로세스

두 프로세스 간의 통신 세션에서 통신을 초기화(다른 프로세스와 세션을 시작하려고 접속을 초기화)하는 프로세스를 클라이언트라 하고, 세션을 시작하기 위해 접속을 기다리는 프로세스를 서버라고 한다.

 

웹에서는 브라우저 프로세스가 클라이언트고 웹 서버 프로세스는 서버다.

프로세스와 컴퓨터 네트워크 사이의 인터페이스

프로세스는 소켓(socket)을 통해 네트워크로 메시지를 보내고 받는다.

 

소켓은 호스트 애플리케이션 계층과 트랜스포트 계층 간의 인터페이스다. 또한 소켓은 네트워크 애플리케이션이 인터넷에 만든 프로그래밍 인터페이스 이므로, 애플리케이션과 네트워크 사이의 API(Application Programming Interface)라고도 한다.

프로세스 주소 배정

한 호스트상에서 수행되고 있는 프로세스가 패킷을 다른 호스트에서 수행되고 있는 프로세스로 패킷을 보내기 위해서는 수신 프로세스가 주소를 갖고 있을 필요가 있다.

 

수신 프로세스를 식별하기 위해서는 호스트의 주소와, 그 목적지 호스트 내의 수신 프로세스를 명시하는 식별자가 필요하다.

 

호스트 주소는 IP 주소로 식별된다. 수신 프로세스(수신 소켓)는 포트 번호로 식별된다.

2.1.3 애플리케이션이 이용 가능한 트랜스포트 서비스

송신 측의 애플리케이션은 소켓을 통해 메시지를 보낸다. 소켓의 반대편에서 트랜스포트 프로토콜은 네트워크를 통해 그 메시지를 수신 프로세스의 소켓으로 이동시킬 책임이 있다.

 

트랜스포트 프로토콜은 여러 종류가 있으며, 애플리케이션을 개발할 때 사용 가능한 트랜스포트 프로토콜 중 하나를 선택해야 한다.

 

트랜스포트 계층 프로토콜이 그것을 이용하는 애플리케이션에게 제공할 수 있는 서비스는 넓은 범위에서 신뢰적 데이터 전송, 처리율, 시간, 보안이라는 네 가지 차원으로 분류할 수 있다.

신뢰적 데이터 전송

프로토콜이 보장된 데이터 전송 서비스를 제공한다면 신뢰적 데이터 전송(reliable data transfer)을 제공한다고 한다.

 

트랜스포트 계층 프로토콜이 신뢰적 데이터 전송을 하지 않을 때, 송신 프로세스가 보낸 데이터는 수신 프로세스에 전혀 도착하지 않을 수 있다. 이것은 손실 허용 애플리케이션(loss-tolerant application)의 경우, 받아들여질 수 있다.

  • 실시간 혹은 저장 오디오/비디오 멀티 미디어 애플리케이션에서 받아들여질 수 있다.

처리율

처리율 요구 사항을 갖는 애플리케이션은 대역폭 민감 애플리케이션(bandwidth-sensitive application)이라고 한다.

 

탄력적 애플리케이션(elastic application)은 가용한 처리율이 많으면 많은 대로 적으면 적은 대로 이용할 수 있다.

  • 전자메일, 파일 전송, 웹 전송 등이 있다.

시간

트랜스포트 계층 프로토콜은 또한 시간 보장(time guarantee)을 제공할 수 있다. 실시간 상호작용 애플리케이션이 효과적으로 동작하기 위해서는 데이터 전송에 엄격한 시간제한이 요구된다.

보안

트랜스포트 프로토콜은 애플리케이션에 하나 이상의 보안 서비스를 제공할 수 있다.

2.1.4 인터넷 전송 프로토콜이 제공하는 서비스

인터넷은 애플리케이션에게 2개의 전송 프토로콜을 제공한다.

  • TCP(Transmission Control Protocol)
  • UDP(User Datagram Protocol)

TCP 서비스

TCP 서비스 모델은 연결지향형 서비스와 신뢰적인 데이터 전송 서비스를 포함한다.

 

연결 지향형 서비스

  • 애플리케이션 계층 메시지를 전송하기 전에 TCP는 클라이언트와 서버가 서로 전송 제어 정보를 교환하게 한다. 이 핸드셰이킹 과정이 클라이언트와 서버에 패킷이 곧 도달할 테니 준비하라고 알려주는 역할을 한다.
  • 핸드셰이킹 단계를 지나면, TCP 연결이 두 프로세스의 소켓 사이에 존재한다고 말한다.
    • 이 연결은 두 프로세스가 서로에게 동시에 메시지를 보낼 수 있기에 전이중(full-duplex) 연결이라고 한다.
  • 애플리케이션이 전송을 마치면 연결을 끊어야 한다.

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

  • 통신 프로세스는 모든 데이터를 오류 없이 올바른 순서로 전달하기 위해 TCP에 의존한다.

TCP 혼잡 제어 방식은 네트워크가 혼잡 상태에 이르면 프로세스(클라이언트 또는 서버) 속도를 낮춘다.

UDP 서비스

UDP는 비연결형이므로 두 프로세스가 통신을 하기전에 핸드셰이킹을 하지 않는다.

 

UPD는 메시지가 수신 소켓에 도착하는 것을 보장하지 않으며, 도착하는 메시지들의 순서가 바뀔 수 있다.

 

UDP는 혼잡 제어 방식을 포함하지 않는다.

2.1.5 애플리케이션 계층 프로토콜

애플리케이션 계층 프로토콜(application-layer protocol)은 다른 종단 시스템에서 실행되는 애플리케이션의 프로세스가 서로 메시지를 보내는 방법을 정의한다.

 

애플리케이션 계층 프로토콜은 다음과 같은 내용을 정의한다.

  • 교환 메시지 타입(예: 요청 메시지와 응답 메시지)
  • 여러 메시지 타입의 문법(예: 메시지 내부의 필드와 필드 간의 구별 방법)
  • 필드의 의미, 즉 필드에 있는 정보의 의미
  • 언제, 어떻게 프로세스가 메시지를 전송하고 메시지에 응답하는지 결정하는 규칙

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

DNS  (1) 2024.01.22
웹과 HTTP  (0) 2024.01.15
프로토콜 계층과 서비스 모델  (0) 2024.01.07
컴퓨터와 네트워크 인터넷  (1) 2024.01.05
HTTP Method PUT, PATCH  (0) 2020.05.25