[Week 07] web-proxy lab
Week 07 주제 : web-proxy lab
▶ 클라이언트의 request를 받고, reponse를 내어주는 웹서버를 만들어보고 웹서버 기능들을 알아보자
▶ tiny 웹서버를 완성하기 (컴퓨터시스템 교재 기반)
▶ 숙제 문제 풀기 (11.6c, 7, 9, 10, 11)
▶ 프록시 과제 도전 (proxy.c 완성)
키워드
- BSD소켓
- TCP/UDP
- IP
- HTTP
- file descriptor
- DNS
11. 1 클라이언트-서버 프로그래밍 모델
- 서버: 서비스를 제공하는 프로그램
- 클라이언트: 서비스를 요청하는 프로그램
- 서버가 제공하는 서비스 : 웹 서버, FTP 서버, 이메일 서버
- 클라이언트/서버와 호스트와의 관계: 클라이언트와 서버는 종종 별도의 호스트에서 돌아가며, 통신한다.
호스트에겐 단지 I/O 디바이스이다. (소스/싱크로 서비스)
- 네트워크에서 들어온 데이터는 I/O와 메모리버스를 거쳐서 메모리로 DMA 전송 복사된다. 반대로도 가능하다.
- LAN/WAN : 근거리 통신/ 장거리 통신
- 이더넷 세그먼트 : (전선) + (허브)
- 허브의 역할
- 호스트는 프레임이라고 부르는 비트들을 세그먼트의 다른 호스트에 보낼 수 있다. (프레임 소스/목적지, 프레임의 길이를 식별할 수 있는 고정된 비트를 가지고 있다.)
- 서로 다른 호스트들 간에 네트워크를 해주기 위해서는 프로토콜 소프트웨어가 필요하다. 이 프로토콜은
1. Naming scheme(명명법): internet 프로토콜로 각 호스트 주소를 부여한다.
2. delivery machanism(전달 기법): 패킷이라고 부르는 비연속적인 방식으로 차이점을 줄인다.
패킷 (패킷 크기와 소스 및 목적지 호스트 주소를 포함하는 헤더와 데이터로 구성)
- 라우터 통신 과정
1. 호스트 A의 클라이언트는 가상 주소공간에서 커널 버퍼로 데이터를 복사하는 시스템 콜을 호출한다.
2.
- 프레임
- 커널 버퍼?
- DNS (Domain Name Service)
모든 네트워크 응용 프로그램은 클라이언트-서버 모델을 기초하고 있다.
클라이언트-서버 모델이란 무엇일까?
Application은 한 개의 서버(server) 프로세스, 한 개 이상의 클라이언트(client) 프로세스로 구성된다. 서버는 일부 리소스를 관리하고 조작해서 클라이언트를 위한 서비스를 제공한다.
Application 종류
- 웹 서버
- FTP 서버
- 이메일 서버
클라이언트 서버 모델(client–server model)은 서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해주는 분산 애플리케이션 구조이자[1] 네트워크 아키텍처를 나타낸다. 웹 시스템도 확장된 '클라이언트 서버 시스템'으로 분류되나, 일반적으로는 클라이언트 서버 시스템이라고 하면 웹 시스템이 나오기 이전의, 사용자 PC에는 클라이언트가 설치되어 화면을 처리하고 서버에서는 자료를 처리하는 시스템을 일컫는다.
소켓이란...
소켓은 인터넷에서 소프트웨어와 소프트웨어를 연결하는 역할을 한다. 소프트웨어간 데이터 통신
소켓은 소켓 API로 이용하는데 소프트웨어간 연결을 한다.
연결에는 다양한 바익
1. 서버 클라이언트 모델
2. 메니저 에이전트 모델
3. p2p모델 : 모든 노드와 동등한 자격ㄱ으로 네트워크 참여로 클라이언트와 ㅓ버가 둘다 작동
Proxy lab 과제
proxy I: sequential |
proxy II: concurrent |
proxy III: cache |
프록시(Proxy) 관하여
프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크로 접속할 수 있게 해 주는 컴퓨터시스템을 가리킨다.
프록시: 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것
프록시 서버: 그 중계 기능을 하는 것
프록시를 쓰는 이유는 뭘까?
- 프록시 서버에 요청된 내용들을 캐시를 이용하여 저장할 수 있어, 전송시간을 절약할 수 있다.
- 불필요한 외부와의 연결을 줄이고, 외부와의 트래픽을 줄이기 때문에 네트워크 병목현상을 줄일 수 있다.
프록시 과제에 앞서 개념 정리
소켓(Sockets) : application이 쓰고 읽을 수 있는 파일 식별자(file descriptor)이다.
프록시는 서버이면서 클라이언트이다.
Part 1. sequential web proxy
sequential web proxy는 한 번에 하나씩 요청을 처리하는 웹 서버이다. 트랜잭션이 완료되면 다음 커넥션이 처리한다. 처리 도중에 모든 다른 커넥션이 무시되므로 심각한 성능 문제를 만들어낸다.
[실제 코드 실행]
이 외
2) 멀티프로세스와 멀티스레드 웹 서버
여러 요청을 동시에 처리하기 위해 여러개의 프로세스 혹은 고효율 스레드를 할당한다. 스레드/프로세스는 필요할때마다 만들어질 수 있고 미리 만들어질 수 있다. 서버가 무수히 많은 동시 커넥션을 처리할때 그로인해 만들어진 수많은 프로세스/스레드는 너무 많은 메모리나 시스템 리소스를 소비하기 때문에 스레드/프로세스의 최대 갯수에 제한을 걸어야한다.
3) 다중 I/O 서버
대량의 커넥션을 지원하기 위해, 많은 웹 서버는 다중 아키텍처를 채택했다. 다중 아키텍처에서는 모든 커넥션은 동시에 그 활동을 감시당한다. 커넥션의 상태가 바뀌면 그 커넥션에 대해 작은 양의 처리가 수행된다. 그 처리가 완료되면, 커넥션은 다음번 상태 변경을 알리기위해 열린 커넥션 목록으로 돌아간다. 스레드/프로세스의 리소스 낭비가 적다.
4) 다중 멀티스레드 웹 서버
여러개의 스레드는 각각 열려있는 커넥션을 감시하고 각 커넥션에 대해 조금씩 작업을 수행한다