컴퓨터네트워크

컴퓨터네트워크_02.애플리케이션 계층

강용민 2021. 10. 11. 07:57

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

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

예를 들어, 웹 서버 소프트웨어는 웹 브라우저 소프트웨어와 통신한다.

 

따라서 새로운 애플리케이션을 개발할 때는 여러 종단 시스에서 실행 되는 소프트웨어를 작성할 필요가 있다.

중요한 것은 라우터나 링크 계층 스위치와 같이 네트워크 코어 장비에서 실행되는 소프트웨어를 작성할 필요는 없다는 점이다.

또한 이들 네트워크 코어 장비를 위한 애플리케이션 소프트웨어를 개발하더라도 그렇게 할 수 없다.

 

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

애플리케이션 구조는 네트워크 구조(5계층의 인터넷 구조)와 다르다.

애플리케이션 개발자 관점에서 네트워크 구조는 고정되어 있고 애플리케이션에 특정 서비스 집합을 제공한다.

애플리케이션 구조(application architecture)는 애플리케이션 개발자에 의해 설계되고 애플리케이션이 다양한 종단 시스템에서 어떻게 조직되어야 하는지를 지시한다.

 

클라이언트-서버구조와 P2P구조

클라이언트-서버 구조

서버(server) 클라이언트(client)
항상 운영되는 호스트
고정 IP 주소 할당
확장 대비한 데이터센터에서 운영
서버와 통신
필요 시 서버와 접속
클라이언트 간 직접적으로 통신하지 않고, 서버를 거친다.
유동 IP주소 사용

P2P구조

  • 항상 운영되는 호스트는 없다.
  • 대신 피어라는 간헐적으로 연결된 호스트 쌍이 서로 직접적으로 통신이 가능하다.
  • 피어는 다른 피어에 서비스를 요청하거나 제공할 수 있다.
    • 자가 확장 - 새로운 피어는 서비스 요청과 제공 모두 가능
  • 피어는 필요 시 접속되며 IP 주소가 변경되어 관리가 어렵다.

프로세스 간 통신(IPC)

호스트에서 실행되는 프로그램. 즉, 실제 통신하는 것은 프로그램이 아니라 프로세스다.

동일한 호스트 내 두 프로세스는 운영체제가 제공하는 inter-process communication 사용하여 상호 통신한다.

하지만 다른 호스트에서 프로세스는 각각 실행되는 프로세스 간에 합의된 통신 프로토콜 기반 메시지를 교환하여 통신한다.

 

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

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

두 프로세스 간의 통신 세션에서 서버에 통신을 요청하는 프로세스를 클라이언트 프로세스, 클라이언트 연결을 대시하는 프로세스를 서버 프로세스라고 정의한다.

P2P 구조 어플리케이션은 클라리언트 프로세스와 서버 프로세스의 속성을 모두 보유하고 있다.

 

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

하나의 프로세스로부터 다른 프로세스로 보내는 메시지는 네트워크를 통해 움직인다.

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

프로세스는 집이고 소켓은 출입구로 비유된다. 송신 프로세스는 메시지를 출입문 밖으로 전송. 송신 프로세스는 출입문 밖에 있는 전송 하부구조에 의존하여 수신 프로세스가 존재하는 호스트의 소켓으로 메시지를 전송한다.

 

프로세스 주소 배정

특정 목적지로 유편 메일을 보내기 위해서는 목적지가 고유 주소를 갖고있어야만 한다. 마찬가지로, 한 호스트상에서 수해오디고 있는 프로세스가 패킷을 다른 호스트에서 수행되고 있는 프로세스로 패킷을 보내기 위해서는 수신 프로세스가 주소를 갖고 있을 필요가 있다.

고유 주소는 IP주소(32비트)와 해당 프로세스와 연결된 포트번호로 구성된다.

 

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

  • 교환 메시지 형식
    • 요청, 응답
  • 메시지 문법 :
    • 메시지에 포함된 필드
    • 필드 간 구분법
  • 메시지 의미
    • 필드가 의미하는 내용
  • 프로세스는 언제, 어떻게 메시지를 송수신할 것인가에 대한 규칙 구현
  • 공개된 프로토콜
    • RFC에 정의
    • 상호 작용을 고려
      • HTTP, SMTP등
  • 독점적인 프로토콜
    • Skype등

 

어플리케이션을 지원하는 전송 서비스 종류

소켓이 어플리케이션 프로세스와 트랜스포트 프로토콜 간의 인터페이스다.

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

트랜스포트 계층 프로토콜이 그것을 이용하는 애플리케이션들에게 제공할 수 있는 서비스는 무엇인가?

넓은 범위에서 가능한 서비스들을 신뢰적 데이터 전송, 처이류, 시간, 그리고 보안이라는 네 가지 차원으로 분류할 수 있다.

  • 신뢰적 데이터 전송
    • 오버플로우나 패킷의 비트가 잘못되면 호스트 혹은 라우터에 의해 버려질 수 있다.
    • 하여 특정 애플리케이션(파일 전송, 웹 트랜잭션 등)은 100% 신뢰적 데이터 전송이 필요하다.
  • 처리율
    • 특정 애플리케이션(음성, 영상 등)은 최소 처리율을 필요로 함.
    • 유연성을 요구하는 애플리케이션을 위한 유연한 처리율 필요
  • 시간
    • 특정 애플리케이션(인터넷전화, 상호동작 게임등)은 낮은 지연 시간 필요
  • 보안
    • 암호화, 데이터 정합성 등

 

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

인터넷(그리고 일반적인 TCP/IP 네트워크)은 애플리케이션에게 2개의 전송 프로토콜, 즉 UDP(User Dtagram)와 TCP(transmission control Protocol)를 제공한다.

 

TCP 서비스

  • 연결지향형 서비스와 신뢰적인 데이터 전송 서비스를 포함한다.
  • 연결 기반 : 클라이언트와 서버 프로세스 간 사전 설정 필요
  • 흐름 제어 : 송신자의 송신역량은 수신자의 수신역량을 초과할 수 없음
  • 혼잡 제어 : 네트워크 혼잡 시 송신자는 송신량을 조절
  • 제공하지 않는 서비스 : 타이밍, 최소 처리율 보장, 보안등

UDP 서비스

  • 송수신 프로세스 간 신뢰할 수 없는 데이터 전송
  • 비연결 기반 : 클라이언트와 서버 프로세스 간 사전 설정 불필요
  • 제공하지 않는 서비스 : 신뢰성 프름 제어, 혼잡제어, 타이킹, 처리율 보장, 보안, 연결 설정 등

TCP보안

TCP와 UDP의 공통점 암호화 지원하지 않음.

패스워드가 평문으로 인터넷을 통해 암호화없이 그대로 전송

SSL/ TLS

TCP 상에 보안 기능 추가 제공

데이터 정합성

종단간 인증

 

애플리케이션 계층에서 SSL/TLS 설정

애플리케이션은 SSL/TLS라이브러리 사용하여 TCP 경유하여 상대방과 암호 통신

 

SSL/TLS socket API

패스워드가 암호문으로 변경되어 인터넷을 통해 전성

 

웹과 HTTP

웹이란?

  • 웹 페이지는 객체로 구성됨
  • 객체에 HTML 파일, JPEG image, Java applet, audio 파일 등이 있음.
  • 웹 페이지는 기본 HTML 파일과 다양한 참조객체로 구성됨
  • 각 객체는 URL로 지정됨.
  • www.comeschool.edu(host name)/someDept/pic.gif(path name)

HTTP 개요

웹의 애플리케이션 계층 프로토콜인 HTTP(HyperText Transfer Protocol)는 웹의 중심이다.

HTTP는 두 가지 프로그램으로 구현된다(클라이언트 프로그램과 서버 프로그램).

서로 다른 종단 시스템에서 수행되는 클라이언트 프로그램과 서버 프로그램은 서로 HTTP 메시지를 교환하여 통신한다.

클라이언트/서버 모델

  • 클라이언트 : HTTP 프로토콜을 사용하여 웹 객체를 요청, 수신, 표시하는 브라우저
  • 서버 : HTTP 프로토콜을 사용하여 브라우저에서 요청한 객체를 전송하는 웹 서버

HTTP는 웹 클라이언트가 웹 서버에게 웹 페이지를 어떻게 요청하는지와 서버가 클라이언트로 어떻게 웹 페이지를 전송하는지를 정의한다.

 

HTTP는 TCP를 전송 프로토콜로 사용한다.순서는 다음과 같다.

  • HTTP 클라이언트는 소켓을 열고 80번 포트를 이용하여 웹 서버와 TCP연결을 시도한다.
  • HTTP 서버는 소켓 인터페이스로부터 요청 메시지를 받고 응답 메시지를 소켓 인터페이스로 보낸다.
  • HTTP 메시지(URL, HTML파일 등)가 웹 서버와 웹 브라우저 간에 송수신된다.
  • 전송 후 TCP 연결을 종료한다.

HTTP는 TCP 연결 상태를 유지하지 않으므로 클라이언트에게 요청 파일을 보낼 때, 서버는 클라이언트에 관한 어떠한 상태 정보도 저장하지 않는다. 즉, 클라이언트의 과거 요청 정보를 관리하지 않는다는 뜻이다.

만약 특정 클라이언트가 몇 초 후에 같은 객체를 두 번 요청한다면, 잠시 전에 이미 그 객체를 보냈다고 서버가 알려 주면 좋겠지만 서버는 이전에 한 일을 기억하지 않으므로 그 객체를 또 보낸다.

더보기

과거 상태를 저장할 경우 프로토콜 복잡도가 증가한다.

과거 기록이 보존되어야 하며, 서버/클라이언트 연결 중 끊어지게 되면, 다시 상호 연결 작업을 시도하여야 한다.

그래서 결과적으로 서버에 부하가 증가한다.

 

비지속 연결과 지속 연결

많은 인터넷 애플리케이션에서 클라이언트와 서버는 클라이언트가 일련의 요구를 하고 서버가 각 요구에 대해 응답하면서 상당한 기간 동안 통신한다.

이 클라이언트-서버 상호작용이 TCP상에서 발생할 때 애플리케이션 개발자는 중요한 결정을 할 필요가 있다.

각 요구/응답 쌍이 분리되 TCP 연결을 통해 보내져야 하는가? 혹은 모든 요구와 해당하는 응답들이 같은 TCP 연결상으로 보내져야 하는가? 전자 방식의 경우 애플리케이션은 비지속연결이라고 하고 후자 방식의 경우 지속 연결이라고 한다.

 

  • 비지속 연결 HTTP
    • I개 객체가 TCP연결을 통해 전달
      • 그 후 연결 종료
    • 다수 객체 다운로드 할 경우 순차적인 다수 연결 필요
  • 지속 연결 HTTP
    • I개의 TCP 연결을 통해 서버와 클라이언트 간에 다수 객체가 송수신됨

비지속 연결

웹 페이지를 서버에서 클라이언트로 전송하는 단계를 살펴보자.

페이지가 기본 HTML파일과 10개의 JPEG 이미지로 구성되고, 이 11개의 객체가 같은 서버에 있다고 가정하자

기본 HTML 파일의 URL은 다음과 같다.

www.someSchool.deu/someDepartment/home.index 

  • HTTP 클라이언트는 TCP연결을

 

비지속 연결 HTTP 지속 연결 HTTP
I개 객체가 TCP연결을 통해 전달. 그 후 연결 종료
다수 객체 다운로드 할 경우 순차적인 다수 연결 필요
I개의 TCP 연결을 통해 서버와 클라이언트 간에 다수 객체가 송수신된다.

 

전자메일

SMTP

POP3

IMAP

 

 

DNS

 

 

P2P 애플리케이션

 

 

비디오 스트리밍과 content distribution network

 

 

UDP와 TCP 소켓 프로그래밍