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을 동적으로 갱신