Tiny Web Server

wu2ee·2021년 1월 26일
0

OS PROJECT

목록 보기
3/10

이 글은 bryant 컴퓨터 시스템에 기반하여 정리 하였다.

tiny web server 구현하기에 앞서 Robust I/O package 에 대한 이해가 중요할 것 같아 코드 정리가 된 블로그를 첨부함

- Robust I/O package

참고로 rio_t 구조체는 다음과 같이 선언되어 있다.

size_t와 ssize_t의 차이?

x86-64에서 size_t는 unsigned long으로 정의되고, ssize_t(signed size)는 long으로 정의된다.

💻인터넷 연결 구조

소켓은 end point로 이해할 수 있다. 각 소켓은 인터넷 주소와 16비트 정수 포트로 이루어진 소켓 주소를 가진다.

리눅스 커널의 관점으로 보면, 소켓은 통신을 위한 끝점이다.

Unix 프로그램의 관점으로 보면, 소켓은 해당 식별자를 가지는 열린 파일이다.

위 그림은 웹 클라이언트와 서버 간의 연결을 보여 준다.

  • 웹 클라이언트 소켓 주소
    128.2.194.242:51213

    여기서 포트 51213은 커널이 할당한 단기 포트이다.

  • 웹 서버의 소켓 주소
    208.216.181.15:80

    여기서 포트 80은 웹 서비스와 연관된 잘 알려진 포트이다.

💻소켓 인터페이스 기반 네트워크 응용프로그램의 개요

이 그림은 전형적인 클라이언트 - 서버 트랜잭션의 문맥에서 소켓 인터페이스의 전반적인 흐름을 보여주고 있다. 이 내용에 대해서는 뒷 부분에 tiny web server를 구현해 보면서 자연 스럽게 받아 들일 수 있다.

그림으로 좀 더 이해하기 쉽도록 그려 보았다.

telnet으로 연결요청하면 header와 body정보를 모두 불러준다.

👀Tiny web server 설계 전 알아야 할 내용

웹 클라이언트와 서버는 HTTP(Hypertext Transfer Protocol)라고 하는 텍스트 기반 응용 수준 프로토콜을 사용해서 상호 연동한다.

웹 클라이언트(브라우저라고 불림)는 서버로의 인터넷 연결을 오픈하고 컨텐츠를 요청한다.

서버는 요청한 컨텐츠로 응답하고, 그 후에 연결을 닫아 준다. 브라우저는 컨텐츠를 읽고 이것을 스크린에 보여준다.

🤔웹 컨텐츠란?

웹 클라이언트와 서버에게 컨텐츠란 MIME(Multipurpos Internet Mail Extensions)타입을 갖는 바이트 배열을 의미한다.

다음 표는 MIME 타입의 예를 보여준다.

웹 서버는 두가지 방법으로 클라이언트에게 컨텐츠를 제공한다.

  1. 디스크 파일을 가져와서 그 내용을 클라이언트에게 보낸다. 디스크 파일은 정적 컨텐츠 라고 하며, 파일을 클라이언트에게 돌려주는 작업을 정적 컨텐츠를 처리한다고 말한다.

  2. 실행 파일을 돌리고, 그 출력을 클라이언트에게 보낸다. 실행 파일이 런타임에 만든 출력을 동적 컨텐츠라고 하며, 프로그램을 실행하고 그 결과를 클라이언트에게 보내주는 과정을 동적 컨텐츠를 처리한다고 말한다.

💻 HTTP 트랜잭션

HTTP가 인터넷 연결 위로 전송된 텍스트 라인들에 기초하고 있기 때문에 리눅스 TELNET 프로그램을 사용해서 인터넷 상의 모든 웹 서버와 트랜잭션을 수행할 수 있다.

1 linux> telnet www.aol.com 80 			Client: open connection to server
2 Trying 205.188.146.23... 			Telnet prints 3 lines to the terminal
3 Connected to aol.com.
4 Escape character is ’^]’.
5 GET / HTTP/1.1 				Client: request line
6 Host: www.aol.com 				Client: required HTTP/1.1 header
7 						Client: empty line terminates headers
8 HTTP/1.0 200 OK 				Server: response line
9 MIME-Version: 1.0 				Server: followed by five response headers
10 Date: Mon, 8 Jan 2010 4:59:42 GMT
11 Server: Apache-Coyote/1.1
12 Content-Type: text/html 			Server: expect HTML in the response body
13 Content-Length: 42092 			Server: expect 42,092 bytes in the response body
14 						Server: empty line terminates response headers
15 <html> 					Server: first HTML line in response body
16 ... 						Server: 766 lines of HTML not shown
17 </html> 					Server: last HTML line in response body
18 Connection closed by foreign host. 		Server: closes connection
19 linux> Client: closes connection and terminates

😀 My Tiny Web Server 구현하기

다음 프로젝트에 대한 내용은 github에 주석으로 잘 정리해 두었다.
https://github.com/Wu22e/JUNGLE_OS_PROJECT/tree/main/WEEK07

profile
즐겁게 코딩합시다

0개의 댓글