TIL 015 웹서버 기본

조성현·2021년 1월 28일
0

정글

목록 보기
17/21
post-custom-banner

📕 웹서버 (web server)

웹 서버가 어떻게 동작하는지 기본적인 구성에 대해 정리한다.

👉 웹 서버 구조

웹서버는 기본적으로 client & server 구조로 되어있다. IO bus의 disk처럼 연결되어 가상메모리의 데이터를 읽고 쓴다.

👉 네트워크 구조

네트워크는 계층 구조를 이룬다.

👉 프로토콜

네트워크를 이루는 물리적 환경은 정말 다양하다. (ex. 와이파이, 블루투스) 하지만, 밑단이 바뀐다고 데이터가 다 바뀌지 않도록 규약을 만들어 놓아 같은 레이어끼리 연결이 되도록 한다.

  • naming scheme(호스트 주소)
  • delievery mechanism(패킷)(헤더와 payload)

으로 이루어져 있다.

👉 IP주소

네트워크 장비들 고유의 식별 번호
IPv4 = 32bit의 ip 주소 -> 도메인 주소로도 통용된다.
IPv6 = 128bit의 ip 주소
도메인주소는 DNS에서 제공된다.

👉 포트

16bit integer
네트워크 서비스나 프로세스를 식별하는 번호

  • ephemeral port : 자동으로 주어지는 포트
  • well-known port : 특정 서비스를 위한 포트
    -> 80 : web server (http)
    -> 7 : echo (echo)
    -> 22 : ssh
    -> 25 : email (http)

👉 소켓

네트워크를 경유하는 프로세스 간 연결의 끝점이다. file descriptor로 볼 수 있다.

  • 인터넷 프로토콜
  • 포트 번호
  • ip 주소

를 담고 있다.

👉 소켓 인터페이스

  • getaddrinfo : 내부의 ip주소 등 정보, 도착지의 ip주소(client입장) 등의 정보를 소켓 구조체에 담음
  • socket : 소켓 식별자를 생성한다.
  • bind : 커널에 서버의 소켓주소와 소켓식별자를 연결 요청함
  • listen : 클라이언트 대신 커널에 소켓 사용을 요청함, 소켓 식별자에서 listen 소켓으로 변환
  • accept: 클라이언트로 부터 request를 받고 connection file descriptor를 할당시킴
    listening 식별자는 서버와 클라이언트 연결 요청의 끝점이다.
    connected 식별자는 서버와 클라이언트의 연결의 끝점이다. 서버가 acept 될 때마다 생성되면, 서버의 처리와 전송이 끝나면 사라진다.
  • connect : 소켓주소로 서버와 연결하려 시도함

👉 URL

Universial resource loacation

  • 주소 : 정보의 위치가 어디인지
  • suffix : 파일이름

👉 MIME

컨텐츠 타입의 표준 포맷

👉 웹컨텐츠

  • Static contents: 서버의 디스크 파일은 가져와 클라이언트에게 보낸다.
  • Dynamic contents: 서버의 실행파일을 실행시켜 그 결과를 클라이언트에게 보낸다.
    -> cgi(common gateway interface) : 웹서버에서 임의의 프로그램을 실행할 수 있도록 하는 기술 중 하나
    -> fork를 통해 child 프로세스를 생성시킨다. child 프로세스는 식별자 테이블을 복사하고, 파일 테이블은 공유한다.

👉 HTTP 구성요소

  • HTTP 요청 : Method URI version
    -> methods: GET, POST, OPTIONS, HEAD, PUT, DELETE, TRACE
    -> URI : 파일이름, 추가 argument
    -> version : HTTP 버젼
    요청 헤더: header-name: header-data
    -> 서버에 브라우저 정보, MIME 등 추가적인 정보를 보낸다.
  • HTTP 응답 : version status-code status-message
    -> version : HTTP 버젼
    -> status code : 상태 정보
    -> status message : 상태 메시지
profile
Jazzing👨‍💻
post-custom-banner

0개의 댓글