Application layer - 응용층

응용층에서 자주 사용하는 크게 2가지의 모델이 있다.

  • client-server model : 클라이언트, 서버가 고유 역할이 있음.
  • peer-to-peer model : 상황에 따라 클라이언트도, 서버도 된다.

Client - Server Model

클라이언트

  • 클라이언트는 로컬 컴퓨터에서 실행되는 프로그램
  • 능동적 개방 (Active open) : 사용자에 의해 원격 호스트의 IP주소와 그 컴퓨터에서 수행되는 특정 서버 프로그램의 포트 번호를 이용하여 통신 채널을 개설. 통신 채널 개설 후 요청을 보내고 이에 대한 응답을 수신
  • 능동적 종료 (Active close) : 사용자에 의한 통신 채널의 종료

서버

  • 원격 컴퓨터에서 동작하는 프로그램으로 클라이언트에게 서비스를 제공
  • 수동적 개방 (passive open) : 서버가 시작되면 클라이언트로부터 들어오는 요청을 위해 문을 열어두게 되며 서비스에 대한 요청이 들어오기 전에는 서비스를 시작하지 않는다.
  • 서버 프로그램은 무한 프로그램, 서버가 시작되면 문제가 일어나지 않는 한 계속해서 수행된다.
  • 클라이언트로부터 요청이 오기 전까지 대기하며 요청이 도착하면 순차적 또는 동시에 요청에 응답

처리방식

클라이언트의 동시성

  • 순차적(iteratively)실행

  • 동시 클라이언트(concurrent clients)

서버의 동시성

  • 순차 서버(iterative server)
  • 동시 서버(concurrent server)
  • 서버의 동작 : 비연결형 순차 서버, 비연결형 동시 서버,연결형 순차 서버, 연결형 동시 서버

비연결형 순차 서버

서버는 하나의 well-known port 만을 사용.

이 포트에 도착하는 모든 패킷은 일렬로 서비스를 받기 위해 기다린다(순차적).

연결형 동시 서버

TCP 사용, 서버는 동시성. 즉, 서버가 동시에 많은 클라이언트를 처리 - 요청마다 자식 프로세서가 생성되어 처리

각 연결들이 포트를 요청하여 많은 연결들이 동시에 개설되어야 하나 서버 는 오직 하나의 well-known port만을 사용할 수 있다.

하나의 well-known port와 많은 임시 포트를 사용

API

응용 프로그램과 운영체제 사이의 인터페이스 (통신 대상 간의 명령어 집합)

소켓 인터페이스

  • UNIX 기반,1980년대 초 버클리 대학에서 개발, 응용층과 OS간 통신 제공
  • 프로세스간 통신에 사용되는 명령어 집합

소켓

소켓 인터페이스는 응용 프로그램이 생성하고 사용하는 하나의 객체(Object)

IP 주소 + port number

통신 주체인 양단에서 각각 소켓을 생성하고 주소를 정확히 정의하면 데이터 송수신 관련 명령을 수행할 수 있다.

UDP를 사용한 통신

비연결형 순차 서버

UDP를 이용하는 서버는 비연결형 순차 방식으로 동작. 즉, 서버가 한번에 하나의 요구를 처리

서버처리

  • 소켓 생성(create a socket) : 운영체제에게 소켓의 생성을 요구
  • 바인드 (bind) : 운영체제로 하여금 생성된 소켓을 지정된 포트에 연결 요청(이 포트로 들어오는 패킷들을 연결해 달라는 의미)

다음 사항을 계속해서 반복

  • 요청 수신 (receive a request) : 운영체제에게 이 소켓으로 오는 클라이언트의 요청을 기다리도록 요청하고, 요청을 받는다.
  • 처리 (process) : 클라이언트의 요청을 처리
  • 전송 (send) : 클라이언트에게 응답을 전송

클라이언트 처리

  • 소켓 생성 (create a socket) : 운영체제에게 소켓의 생성을 요구. 바인딩은 필요 없음

클라이언트는 요청이 있는 한 다음 사항을 계속해서 반복

  • 전송 (send) : 운영체제에게 서버로 요청을 보내기를 요구
  • 수신 (receive) : 운영체제에게 응답을 기다리게 하고 요청에 대한 응답이 도착하면 이를 받는다.
  • 종료 (destroy) : 더 이상의 요청이 없으면 운영체제에게 소켓의 종료를 요구한다.

TCP를 이용한 통신

연결 중심 동시 서버

TCP를 이용하는 서버는 연결 지향성이며 동시성을 갖는다. 즉, 서버가 여러 클라이언트를 동시에 서비스 할 수 있다.

부모와 자식 서버의 개념을 이용

서버처리

  • 소켓 생성(create a socket) : 운영체제에게 소켓의 생성을 요구
  • 바인드(bind) : 운영체제로 하여금 생성된 소켓을 지정된 포트에 연결 요청
  • 듣기(listen) : 연결을 요청하는 클라이언트를 기다린다.

다음 사항을 계속해서 반복 (부모 서버 프로세스)

  • 자식 생성 (create a child) : 클라이언트가 연결을 요청하면, 임시 자식 프로세스를 생성하고 클라이언트의 요청을 서비스하도록 지정.
  • 새로운 소켓 생성 (create a new socket) : 자식 프로세스를 위해 새로운 소켓 생성.

  • 클라이언트의 요청 처리를 위해 다음 단계를 반복 (자식 서버 프로세스)

    • 읽기 (read) : 클라이언트와의 연결로부터 바이트 스트림을 수신
    • 처리 (process) : 바이트 스트림을 처리
    • 쓰기(write) : 처리 결과를 연결을 통해 전송
  • 소켓 종료 (destroy socket) : 클라이언트를 서비스한 후 임시 소켓의 종료를 요구

클라이언트 처리

  • 소켓 생성 : 소켓의 생성을 요구
  • 연결(connect) : 연결을 요구
  • 반복
    • 쓰기 (write) : 연결을 통해 바이트 스트림을 전송
    • 읽기(read) : 서버로부터 연결을 통해 바이트 스트림을 수신
  • 종료 : 소켓의 종료를 요구. 연결도 종료된다.

WWW(World Wide Web)

핵 연구를 위한 유럽 기관인 CERN에서 1989에 Tim Berners-Lee에 의해 제안됨.

  • 링크 : 웹 페이지내의 Hypertext, Hypermedia
  • 구조 : 분산 Client / Server 서비스

자원 위치 지정자 (Uniform Resource Locator, URL)

웹 페이지(Resource)를 구별하기 위한 식별자

웹페이지접근

  • 프로토콜 (protocol) : HTTP나 FTP 등

웹페이지 정의

  • 호스트(host):서버의IP주소
  • 포트 (port) : well known port 번호
  • 경로(path):파일이름이따라오는디렉토리이름의집합

  • URL : 위 네가지 정보를 조합하여 특정 자원을 식별
    • protocol://host/path
    • protocol://host:port/path

HTTP(HyperText Transfer Protocol)

  • Nonpersistent connection (비영속 연결)
  • Persistent connection (영속 연결)

쿠키

  • 쿠키의 생성과 저장 서버가 클라이언트로 부터 요구를 받았을 때 클라이언트에 대한 정보를 파일이나 문자열로 저장
    • 서버는 클라이언트에 대한 응답에 쿠키를 포함
    • 클라이언트가 응답을 받으면 도메인 서버 이름으로 정렬되는 쿠키 디렉토리에 쿠키를 저장

쿠키의 사용

  • 전자 상점 : 고객이 상품을 선택하여 카트에 담을 때 상품 정보를 담은 쿠키를사용. 최종 결재시 상품들에 대한 쿠키를 읽어 계산
  • 등록된 사용자 : 클라이언트가 처음 등록할 때 클라이언트에게 쿠키 할당
  • 웹 포탈 : 사용자가 선호하는 페이지를 선택할 때 쿠키 생성
  • 광고 : 배너 광고를 자주 방문하는 주요 사이트에 게시

웹 캐싱(Web Caching): 프록시 서버

  • 최신 요청에 대한 응답들의 복사본을 갖고 있는 컴퓨터.
  • 클라이언트는 대상 서버대신 프록시를 액세스하도록 설정
  • HTTP 클라이언트는 프록시 서버로 요청을 보내고, 프록시 서버는 캐시를 검사, 응답이 캐시에 없으면 대응 서버로 요청을 보내 응답을 받고 이를 캐시에 저장한 후 클라이언트로 응답
  • 서버의 부하를 줄이고 트래픽을 감소, 지연을 개선하는 효과.

FTP(파일 전송 프로토콜)

File Transfer Protocol (FTP)는 TCP/IP에서 제공되는 프로토콜로, 한 호스트에서 다른 곳으로 파일을 복사할 때 사용된다.

파일을 다른 곳으로 복사하기 위해서 3가지 문제들을 먼저 해결해야 한다.

  • 서로 다른 파일 이름 부여 방식 사용
  • 서로 다른 데이터 표현 방법
  • 서로 다른 디렉토리 구조

2가지 연결

  • The control connection
  • The data connection

control connection

전체 FTP 세션 연결을 유지시킨다.

data connection

데이터 연결의 목적은 파일의 전송 => 파일의 종류(유형), 데이터의 구조, 전송 모드를 정의하여야 함.

  • 파일 유형: ASCII, EBCDIC 파일, 이미지 파일
  • 데이터 구조: 파일 구조, 레코드 구조, 페이지 구조 중 선택
  • 전송 모드: 스트림 모드, 블록 모드, 압축 모드

ELECTRONIC MAIL

기존의 클라이언트-서버 모델과 같이 요청(우편)을 보내고 응답(답장)을 계속 기다릴 수 없음 수신자가 답장을 안 할 수도, 컴퓨터를 꺼 둘 수도 있음

  • 전자 우편을 보내는 행위는 단방향 트랜잭션 (one-way transaction)
  • 2개의 UA(User agent), 두 쌍의 MTA(message transfer agent)와 한 쌍의 MAA(message access agent)가 필요

프로토콜

MIME

전자우편을 통해 ASCII 아닌 데이터를 전송하기 위해 데이터를 ASCII로 변환하는 추가적인 프로토콜

DNS (Domain Name System)

IP주소를 이름에 맵핑 시키는 시스템

  • TCP/IP

Name Space

IP 주소도 고유하기 때문에 이름들은 모두 고유해야 한다. 각 주소를 고유한 이름으로 맵핑시키는 name space는 2가지 방법으로 구성될 수 있다.

  • Flat name space: 이름은 구조적이지 않은 문자의 연속, 중복되지 않기 위해 중앙에서 전체를 관리해야함.
  • Hierarchical name space: 각 이름은 여러 부분으로 나뉘어 의미를 가짐. name space를 할당하고 관리하는 기관을 분산시킬 수 있다.

Hierarch of name space

이름 공간의 분산 :

  • 전 세계의 모든 요청을 하나의 서버가 응답할 수 없음
  • 서버도 계층 구조로 분산

인터넷에서 도메인

도메인 name space는 3가지 다른 부분으로 나눠진다.

  • generic domains : 일반적인 특성에 따라 등록된 호스트를 정의
  • country domains : 국가에 따라 등록된 호스트를 정의
    • 두번째 레이블로 세부 기관 혹은 세부적인 분류를 할 수 있음
  • the inverse domains : 더이상 사용되지 않음

변환(Resolution)

이름을 연결된 주소로 바꾸는 것을 name-address resolution이라 한다.

  • 재귀 변환 : 서버가 알아서 계층적 상위 서버에게 질의를 하여 최종 정보를 응답함.
  • 반복 변환 : 서버가 IP 주소를 모를 경우 상위 서버의 IP 주소를 리턴하여 로컬 서버가 직접 IP 정보를 얻도록 함.

Caching

다른 클라이언트가 동일한 정보를 요청할 경우 자신의 캐시 메모리를 검색해 정보를 제공.

이 경우 “unauthoritative” 표시

  • 문제점 : 오래된 매핑 정보를 가질 수 있다.
    • 해결1 : 권한 있는 서버가 매핑 정보에 대해 TTL(time to live) 라는 추가 정보 제공, 이 시간이 지나면 캐시 정보 무효화
    • 해결2 : 각 서버가 캐시하고 있는 매핑 정보에 TTL 카운터를 갖고 캐시 메모리를 주기적으로 검색하여 만료된 TTL을 갖는 매핑을 삭제

DDNS

동적 도메인 이름 시스템(DDNS, Dynamic DNS)

DNS master file을 동적으로 갱신

김땡땡's blog

김땡땡's blog

김땡땡