[SW 사관학교 정글 8기] WEEK06 (Proxy-Lab)

유선·2024년 4월 28일
0

sw사관학교 정글

목록 보기
11/21
post-thumbnail

탐험준비 - 웹서버 만들기

💡 나만의 웹서버를 만들어보기! (프록시 서버까지)

  • 클라이언트의 request를 받고, response를 내어주는 웹서버를 만들어봅니다.
    - 웹서버는 어떤 기능들의 모음일까요?
  • ‘컴퓨터 시스템’ 교재의 11장을 보면서 차근 차근 만들어주세요.(기본 코드는 모두 있습니다!)
  • 웹 서버를 완성했으면 프록시(proxy) 서버 과제에 도전합니다.
    - http://csapp.cs.cmu.edu/3e/proxylab.pdf 출처: CMU (카네기멜론)
  • https://github.com/SWJungle/webproxy-jungle 의 내용대로 진행합니다.

▶️ 진행방법
1. 책에 있는 코드를 기반으로, tiny 웹서버를 완성하기 (tiny/tiny.c, tiny/cgi-bin/adder.c 완성)
2. AWS 혹은 container 사용시 외부로 포트 여는 것을 잊지 말기
3. 숙제 문제 풀기 (11.6c, 7, 9, 10, 11)
4. 프록시 과제 도전 (proxy.c 완성)

GOAL

tiny 웹서버를 만들고 → 숙제문제 11.6c, 7, 9, 10, 11 중 세문제 이상 풀기 → 프록시 과제 도전
브라우저의 발달에 따라 문제 11.7은 MPG 파일이 아니고 MP4 파일을 처리하도록 문제를 변경

완성

👩🏻‍💻 깃허브 구경가기
1. tiny 웹서버를 완성
2. 숙제 문제 풀기
3. 프록시 과제 도전

키워드 공부

WEEK05: BSD소켓, IP, TCP, HTTP, file descriptor, DNS

💡 BSD소켓

  • BSD는 "버클리 소프트웨어 배포판(Berkeley Software Distribution)"의 약자로, 네트워크 통신을 위한 소프트웨어 인터페이스
  • BSD 소켓은 BSD 운영 체제에서 개발되었으며, TCP/IP 프로토콜 기반 네트워크 통신을 가능하게 한다.
  • 일반적으로 socket이라고 하면 BSD 소켓을 말한다.

소켓이 연결되는 과정


💡server

  • Socket : 소켓 객체를 생성. 각 소켓은 file descriptor로 구분된다. 소켓은 아무런 IP 주소나 포트 번호와도 연결되어 있지 않는다.
  • Bind : 1에서 생성한 소켓에게 IP 주소와 Port 번호를 연결한다.
  • Listen : 소켓은 클라이언트의 연결 요청을 기다린다.
  • Accept : 이 과정에서 서버는 소켓을 하나 더 생성한다. 클라이언트 소켓에서 연결 요청이 왔을 때 함수가 불려지며, Listen 소켓은 현재 클라이언트 말고 다른 클라이언트에서 올 수도 있는 요청을 대기해야 하기 때문에, 연결 요청이 온 소켓에 대해서 새로운 소켓을 만들어 연결해 준다.
  • Send & Receive : 연결을 맺은 클라이언트 소켓과 데이터를 주고받는 과정이다.
  • Close Socket : 클라이언트 소켓이 연결을 종료하면 연결되어 있던 소켓을 반환한다.

💡client

  • Socket : 서버와 같이 소켓 객체를 생성하는 과정이다.
  • Connect : 서버와는 달리 클라이언트 소켓은 bind 과정이 빠져있다. 이는 클라이언트가 연결을 요청하는 주체이기 때문에 굳이 포트 번호를 알고 있을 필요가 없기 때문이다. connect 과정에서 소켓에게는 임의의 소켓 번호가 부여되며, 서버 소켓과 연결을 맺는다(3-way handshake).
  • Send & Receive : 연결을 맺은 서버 소켓과 데이터를 주고받는 과정이다.
  • Close Socket : 서버와 연결을 종료하고 소켓에게 할당된 자원을 반납한다.

    ✔️ 위의 과정을 보면, 소켓 통신은 1:N 통신이 아닌 1:1 통신을 지원한다는 것을 알 수 있다.


💡 IP

IP (Internet Protocol)

  • IP는 인터넷 프로토콜의 약자로, 컴퓨터 네트워크에서 데이터를 보내고 받는 데 사용된다.
  • IP 주소는 네트워크상에서 컴퓨터를 식별하는 데 사용된다.
  • IP는 데이터를 패킷으로 분할하여 전송하고, 이를 라우팅하여 목적지에 도달시킨다.

💡 TCP

TCP (Transmission Control Protocol)

  • TCP는 IP와 함께 사용되며, 신뢰성 있는 데이터 전송을 보장한다.
  • TCP는 흐름 제어, 혼잡 제어 등과 같은 기능을 통해 네트워크 상황을 감지하고 적절히 대응한다.
  • 웹 브라우징, 이메일, 파일 전송 등과 같은 대부분의 인터넷 애플리케이션에서 TCP가 사용된다.

TCP vs UDP

TCP/IP의 전송(Transport) 계층은 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당하는 계층

TCP (Transmission Control Protocol)UDP (User Datagram Protocol)
연결이 성공되야 통신이 가능(연결형 프로토콜)비 연결형 프로토콜(연결없이 통신 가능)
데이터 경계를 구분하지 않음(Byte-Stream Service)데이터 경계를 구분함(Datagram Service)
신뢰성 있는 데이터 전송(데이터의 재전송 존재)비 신뢰성있는 데이터 전송(데이터의 재전송 없음)
일 대 일(Unicast) 통신일 대 일, 일 대 다(Broadcast), 다 대 다(Multicast) 통신

▶️ 신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고 간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에서는 UDP를 사용


💡 HTTP

  • 웹에서 데이터를 주고받는 서버-클라이언트 모델의 프로토콜
  • HTTP는 일반적으로 TCP/IP 위에서 동작
  • 기본적으로 클라이언트가 요청(Request)을 보내고 서버가 응답(Response)을 반환하는 방식으로 동작
  • 클라이언트-서버 모델에 기반을 둔 상태 없는(stateless) 프로토콜
    ✔️ 이전 요청과 다음 요청 간에 상태 정보가 유지되지 않는다는 것을 의미
  • 먼저 사용자가 웹사이트를 방문하면 브라우저가 웹서버로 리소스를 요청한다.
  • 요청을 받은 웹서버는 HTML, CSS와 같은 리소스를 응답으로 돌려준다.
  • 클라이언트의 요청과 서버의 응답 사이에는 여러 프록시 서버가 있다.
  • 프록시 서버는 캐시를 보관하거나 보안을 위해 서버의 IP 주소를 숨기는 등 다양한 역할을 한다.
  • 이 모든 통신은 안전하기 이뤄지기 위해 TCP(Transmission Control Protocol) 연결을 사용한다.

▶️ [네트워크] HTTP 프로토콜
▶️[네트워크] HTTP 메소드
▶️[네트워크] HTTP 상태코드


💡 file descriptor

시스템으로부터 할당받은, 파일(File)을 대표하는 음수가 아닌 정수이다.

시스템이 파일을 사용할 때, 단순히 파일명으로 접근하기에는 불편함이 있다. 만약 사용할 파일이 길고 복잡한 파일명이면 쓸 때마다 길고 복잡한 파일명을 참조해야 한다.

=> 파일에다가 별명을 붙여 사용하기 쉽게 하자!

여기서 '별명'이 파일 디스크립터라고 이해하면 된다.

프로그램이 메모리에 탑재되어 실행이 될 때, 기본적으로 할당되는 파일 디스크럽터가 있다.

바로 0(stdin, 표준 입력), 1(stdout, 표준 출력), 2(stderr, 표준 에러) 이다. 이들은 프로그램이 실행되면, 기본적으로 할당되는 파일 디스크립터이다. 그래서 파일 디스크립터는 3부터 할당된다.
프로세스가 파일 디스크립터를 할당받게되면 3번부터 OPEN_MAX값까지 차례대로 할당받는다.

파일 디스크립터는 프로세스마다 같을 수도, 다를 수도 있다.

서로 같은 파일을 써도 프로세스가 다르면, 다른 파일 디스크립터를 가질 수 있고

서로 다른 프로세스가 서로 다른 파일을 사용해도, 파일 디스크립터는 같은 값일 수 있다.

=> 따라서 프로세스마다 FD테이블을 가지고 있다.


💡 DNS

IP주소의 집합을 사람에게 친숙한 도메인 이름 집합으로 매핑한다. 도메인 이름 집합은 계층구조를 형성하고 있으며, 각 도메인 이름은 계층구조에서 자신의 위치를 인코드한다. 아래 그림을 보면, 계층구조는 트리로 나타낸다.

  • 0단계 : 이름 없는 루트 노드
  • 1단계 : 비영리조직(ICANN)이 정의한 도메인(com, edu, gov 등)
  • 2단계 : 비영리조직이 인정하는 대행사가 요청한 도메인(cmu 등)
  • 3단계 : 서브도메인 내에서 자유롭게 생성

인터넷은 도메인 이름의 집합과 IP 주소 집합 사이에 매핑을 정의한다. 이들의 매핑을 관리하는 데이터베이스를 DNS(Domain Name System)라고 한다.

회고

이번 주차는 핀토스를 들어가기 전,,, 압축 ver? 이라고 생각했다. 하나의 웹 서버를 구현해야하고, 이것을 여러 방식으로 디벨롭해야했기 때문이다. 핀토스 1주차를 하고 있는 아직까지도 웹서버에 캐시를 구현하는 방법을 제대로 이해못해 포스팅을 못하고 있다. 주말을 이용해서 꼭 정리하고 싶다... 화이팅!!

profile
Sunny Day!

0개의 댓글