💡 나만의 웹서버를 만들어보기! (프록시 서버까지)
▶️ 진행방법
1. 책에 있는 코드를 기반으로, tiny 웹서버를 완성하기 (tiny/tiny.c, tiny/cgi-bin/adder.c 완성)
2. AWS 혹은 container 사용시 외부로 포트 여는 것을 잊지 말기
3. 숙제 문제 풀기 (11.6c, 7, 9, 10, 11)
4. 프록시 과제 도전 (proxy.c 완성)
tiny 웹서버를 만들고 → 숙제문제 11.6c, 7, 9, 10, 11 중 세문제 이상 풀기 → 프록시 과제 도전
브라우저의 발달에 따라 문제 11.7은 MPG 파일이 아니고 MP4 파일을 처리하도록 문제를 변경
👩🏻💻 깃허브 구경가기
1. tiny 웹서버를 완성
2. 숙제 문제 풀기
3. 프록시 과제 도전
WEEK05: BSD소켓, IP, TCP, HTTP, file descriptor, DNS
✔️ 위의 과정을 보면, 소켓 통신은 1:N 통신이 아닌 1:1 통신을 지원한다는 것을 알 수 있다.
IP (Internet Protocol)
TCP (Transmission Control Protocol)
TCP/IP의 전송(Transport) 계층은 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당하는 계층
TCP (Transmission Control Protocol) | UDP (User Datagram Protocol) |
---|---|
연결이 성공되야 통신이 가능(연결형 프로토콜) | 비 연결형 프로토콜(연결없이 통신 가능) |
데이터 경계를 구분하지 않음(Byte-Stream Service) | 데이터 경계를 구분함(Datagram Service) |
신뢰성 있는 데이터 전송(데이터의 재전송 존재) | 비 신뢰성있는 데이터 전송(데이터의 재전송 없음) |
일 대 일(Unicast) 통신 | 일 대 일, 일 대 다(Broadcast), 다 대 다(Multicast) 통신 |
▶️ 신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고 간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에서는 UDP를 사용
시스템으로부터 할당받은, 파일(File)을 대표하는 음수가 아닌 정수이다.
시스템이 파일을 사용할 때, 단순히 파일명으로 접근하기에는 불편함이 있다. 만약 사용할 파일이 길고 복잡한 파일명이면 쓸 때마다 길고 복잡한 파일명을 참조해야 한다.
=> 파일에다가 별명을 붙여 사용하기 쉽게 하자!
여기서 '별명'이 파일 디스크립터라고 이해하면 된다.
프로그램이 메모리에 탑재되어 실행이 될 때, 기본적으로 할당되는 파일 디스크럽터가 있다.
바로 0(stdin, 표준 입력), 1(stdout, 표준 출력), 2(stderr, 표준 에러) 이다. 이들은 프로그램이 실행되면, 기본적으로 할당되는 파일 디스크립터이다. 그래서 파일 디스크립터는 3부터 할당된다.
프로세스가 파일 디스크립터를 할당받게되면 3번부터 OPEN_MAX값까지 차례대로 할당받는다.
파일 디스크립터는 프로세스마다 같을 수도, 다를 수도 있다.
서로 같은 파일을 써도 프로세스가 다르면, 다른 파일 디스크립터를 가질 수 있고
서로 다른 프로세스가 서로 다른 파일을 사용해도, 파일 디스크립터는 같은 값일 수 있다.
=> 따라서 프로세스마다 FD테이블을 가지고 있다.
IP주소의 집합을 사람에게 친숙한 도메인 이름 집합으로 매핑한다. 도메인 이름 집합은 계층구조를 형성하고 있으며, 각 도메인 이름은 계층구조에서 자신의 위치를 인코드한다. 아래 그림을 보면, 계층구조는 트리로 나타낸다.
인터넷은 도메인 이름의 집합과 IP 주소 집합 사이에 매핑을 정의한다. 이들의 매핑을 관리하는 데이터베이스를 DNS(Domain Name System)라고 한다.
이번 주차는 핀토스를 들어가기 전,,, 압축 ver? 이라고 생각했다. 하나의 웹 서버를 구현해야하고, 이것을 여러 방식으로 디벨롭해야했기 때문이다. 핀토스 1주차를 하고 있는 아직까지도 웹서버에 캐시를 구현하는 방법을 제대로 이해못해 포스팅을 못하고 있다. 주말을 이용해서 꼭 정리하고 싶다... 화이팅!!