호우동의 개발일지

Today :

article thumbnail

웹의 등장과 특성

  • 1990년대 초, 새로운 애플리케이션인 월드와이드웹이 등장
  • 가장 큰 장점 → 웹이 온디맨드 방식
    • 온디맨드(On Demand) : 사용자의 요구가 있었을 때 그 요구에 따라 서비스를 제공하는 것
      • cf ) 라디오 / TV → 콘텐츠 제공자의 주파수를 사용자가 맞춰야 함

  • 이외의 장점
    • 개인이 웹 상에 어떠한 정보를 사용 가능하게 하는 것이 매우 쉬움
      → 모든 사람이 매우 낮은 비용으로 발행자가 될 수 있음

    • 하이퍼링크와 검색 엔진은 정보를 얻는데 많은 도움을 준다.

  • 웹과 관련된 프로토콜은 모바일 인터넷 애플리케이션을 위한 플랫폼을 제공

 

 


HTTP의 구현

  • 2가지 프로그램으로 구현됨 (클라이언트 프로그램, 서버 프로그램 )
    • 클라이언트 프로그램 → 각기 다른 종단 시스템에서 수행

  • 클라이언트 프로그램과 서버 프로그램이 HTTP 메시지를 교환하여 통신
    • HTTP는 메시지의 구조 및 클라이언트와 서버가 메시지를 어떻게 교환하는지 정의
      • HTTP : 웹의 애플리케이션 계층 프로토콜이자, 웹의 중심
        • HTTP → HyperText Transfer Protocol

 


HTTP와 관련된 웹 전문 용어

  • 객체(object) : 단순히 단일 URL로 지정할 수 있는 하나의 파일
    • HTML 파일, JPEG 이미지, 자바 스크립트, CSS 스타일 시트 파일, 비디오 클립
    • 웹 페이지는 객체들로 구성된다.
    • 웹 페이지가 HTML 텍스트와 5개의 JPEG로 구성된 경우
      → 해당 웹페이지는 6개의 객체를 가지고 있는 것

  • 기본 HTML 파일은 페이지 내부의 다른 객체를 그 객체의 URL로 참조
    • URL이 가지고 있는 2가지 요소
      • 객체를 갖고 있는 서버의 호스트 이름
      • 객체에 대한 경로의 이름
      • URL → http:://www.naver.com.test /...

 


예시를 통해 URL 요소 확인하기

http:// www.someSchool.edu/someDepartment/picture.gif

 


웹 브라우저(Web browser) vs 웹 서버(Web Server)

  • 웹 브라우저 : HTTP의 클라이언트 측을 구현
    → 웹의 관점에서 브라우저와 클라이언트라는 용어를 혼용 사용
    • 브라우저는 요구한 웹 페이지를 보여주고, 여러 가지 인터넷 서핑과 구성 특성을 제공

  • 웹 서버 : HTTP의 서버 측을 구현
    • URL로 각각을 지정할 수 있는 웹 객체를 지님
      • 아파치(Apache), 마이크로소프트 인터넷 인포메이션 서버 등

    • 웹 서버는 항상 켜져 있고, 고정 IP 주소를 가진다.
      • 잠재적인 수백만 브라우저로부터의 요청을 서비스한다.

 


HTTP의 역할

  • 웹 클라이언트와 웹 서버 간의 웹페이지 요청 및 전송하는 방법을 정의
  • 상호 작용 과정
    1. 사용자가 웹 페이지를 요청
    2. 브라우저는 페이지 내부의 객체에 대한 HTTP 요청 메시지를 서버에게 전달
    3. 서버는 요청을 수신하고 객체를 포함하는 HTTP 응답 메시지로 응답

  • HTTP는 데이터 손실이나 데이터 복구, 네트워크 내부에서 데이터 배열을 걱정할 필요 없음
    → TCP와 프로토콜 스택의 하위 계층이 이를 담당하기 때문
    → 계층 구조의 중요한 장점

 


HTTP의 전송 프로토콜 → TCP

  • 연결 과정
    1. HTTP 클라이언트 → 먼저 서버에 TCP 연결
    2. 연결 후, 브라우저와 서버 프로세스는 그들의 소켓 인터페이스를 통해 TCP로 접속

 


관점 별 소켓 인터페이스 역할

클라이언트 관점

  • 클라이언트 프로세스와 TCP 연결 사이의 출입구
    1. 클라이언트는 HTTP 요청 메시지를 소켓 인터페이스로 전달
    2. 소켓 인터페이스로부터 HTTP 응답 메시지를 받음

 

서버 관점

  • 서버 측 → 서버 프로세스와 TCP 연결 사이의 출입구
    1. 서버는 소켓 인터페이스로부터 요청 메시지를 받음
    2. HTTP 응답 메시지를 소켓 인터페이스로 보냄

 


TCP가 HTTP에게 제공하는 신뢰적 데이터 전송 서비스

  • 클라이언트가 메시지를 소켓 인터페이스로 보내면, 메시지는 TCP의 소유
  • TCP가 HTTP에게 신뢰적인 데이터 전송 서비스를 제공한다.
    → 클라이언트 프로세스의 HTTP 요청 메시지가 결과적으로 서버에 잘 도착했다는 것을 의미
    • 서버에서도 적용되는 의미
      → 서버 프로세스가 발생시킨 각 HTTP 응답 메시지가 클라이언트에 잘 도착했다.

 


비상태 프로토콜(stateless protocol)

  • 서버가 클라이언트에게 요청 파일을 보낼 때, 서버는 클라이언트에 관한 어떤 정보도 저장 X
    비상태 프로토콜이라고 부르는 이유

  • HTTP 서버는 클라이언트에 대한 어떤 정보도 유지하지 않기 때문에 비상태 프로토콜로 불림

 

 


비지속 연결과 지속 연결

  • 클라이언트-서버 상호작용이 TCP상에서 발생할 때 2가지 방식 중 하나를 채택해야 함
    1. 비지속 연결 : 각 요구/응답 쌍이 분리된 TCP 연결을 통해 보내짐
    2. 지속 연결 : 모든 요구와 해당하는 응답들이 같은 TCP 연결상으로 보내짐

  • HTTP는 기본 모드로 비지속 연결을 사용
    • 지속연결로 변경도 가능

 


비지속 연결(non-persistent connection)

연결 수행 과정

  1. HTTP 클라이언트는 HTTP의 기본 포트 번호 80을 통해 서버로 TCP 연결 시도
    • TCP 연결과 관련된 클라이언트와 서버에 각각 소켓이 있음

  2. HTTP 클라이언트는 설정된 TCP 연결 소켓을 통해 서버로 HTTP 요청 메시지를 보냄
    • 해당 요청 메시지는 경로 이름(/someDepartment/home.index..)을 포함한다.

  3. HTTP 서버는 설정된 연결 소켓을 통해 요청 메시지를 받는다.
  4. 저장장치로부터 경로이름 객체를 추출하고 HTTP 응답 메시지에 그 객체를 캡슐화
  5. 응답 메시지를 소켓을 통해 클라이언트로 보냄
  6. HTTP 서버는 TCP에게 TCP 연결을 끊으라고 신호
    • But, TCP 클라이언트가 응답 메시지를 받을 때까지 연결은 끊어지지 않음

  7. HTTP 클라이언트가 응답 메시지를 받으면, TCP 연결이 중단됨
  8. 클라이언트는 응답 메시지로부터 파일을 추출하고 HTML 파일 조사 및 객체에 대한 참조 확인
    • 메시지는 캡슐화된 객체가 HTML 파일인 것을 나타냄

  9. 참조되는 각 객체에 대해 1 ~ 6단계를 반복

 

비지속 연결 수행 과정 분석

  • 서버가 객체를 보낸 후 각 TCP 연결이 끊어짐 → 비지속 연결을 사용
    • 연결이 다른 객체를 위해 유지되지 않는다.
    • 각 TCP 연결은 하나의 요청 메시지와 하나의 응답 메시지만 전송한다.
      • 웹 페이지가 기본 HTML 파일 + 10개의 JPEG 이미지 파일로 구성된 경우
        → 사용자가 웹 페이지를 요청할 때 11개의 TCP 연결이 만들어짐

  • HTTP/1.0은 비지속 연결을 사용

 

동시성(동시 연결)

  • 사용자가 동시성 정도를 조절할 수 있도록 브라우저를 구성할 수 있다.
    • 클라이언트가 순차적 TCP 연결을 통해 여러 개의 파일을 얻는 방식
    • 클라이언트가 동시에 TCP 연결을 만들어 파일을 얻는 방식연결
  • 브라우저는 여러 개의 TCP 연결을 설정하며 웹 페이지의 각기 다른 원하는 부분 요청 가능
  • 동시 연결을 사용하면 응답 시간을 줄일 수 있음.

 

TCP 통신간의 RTT 측정

  • RTT(round-tip time) : 패킷이 클라이언트로부터 서버까지 갔다가 되돌아오는 데 걸리는 시간
    • RTT는 패킷 전파 지연, 패킷 큐잉 지연, 패킷 처리 지연 등을 포함

Three-Way Handshake를 통해 RTT 측정

세방향 핸드셰이크 방식
세방향 핸드셰이크 방식

  • 브라우저와 웹 서버 사이에 TCP 연결하는 과정
    • 이는 세 방향 핸드셰이크(three-way handshake)를 포함

    1. 클라이언트가 작은 TCP 메시지를 서버로 보냄
    2. 서버는 작은 메시지로 응답
    3. 마지막으로 클라이언트가 다시 서버에게 응답

  • 처음 2개 (1번과 2번 단계)가 지나면 하나의 RTT가 계산된다.
  • 클라이언트가 HTTP 요청 메시지를 TCP연결로 보내면서 응답(3단계)을 같이 보냄
    • 요청 메시지가 서버에 도착하면 서버는 HTML 파일을 TCP 연결로 보냄
    • 이 HTTP 요청/응답은 하나의 RTT를 필요로 한다.

  • 따라서 대략 총 응답시간 = 2 RTT + HTML 파일을 서버가 전송하는 데 걸리는 시간

 

비지속연결의 단점

  • 각 요청 객체에 대한 새로운 연결이 설정되고 유지되어야 함
    • TCP 버퍼가 할당되고, TCP 변수들이 클라이언트와 서버 양쪽에 유지되어야 함
      → 많은 클라이언트의 요청을 동시에 서비스하는 웹서버에게 큰 부담

    • 각 객체는 2 RTT를 필요로 한다.
      • TCP 연결 설정에 1 RTT, 객체 요청하고 받는데 1 RTT

 


지속 연결 HTTP

  • HTTP/1.1 지속 연결에서는 서버가 응답을 보낸 후에 TCP 연결을 그대로 유지
    → 같은 클라이언트와 서버 간의 통신은 같은 연결을 통해 이뤄짐

  • 전체 웹페이지를 하나의 지속 TCP 연결을 통해 보낼 수 있다.
  • 같은 서버에 있는 여러 웹 페이지들을 하나의 지속 TCP 연결을 통해 보낼 수 있다.
    • 객체에 대한 요구는 진행 중인 요구에 대한 응답을 기다리지 않고 연속해서 요구 가능
      파이프라이닝(pipelining)

  • HTTP 서버는 일정 기간(타임아웃 기간) 사용되지 않으면 연결을 끊는다.
    • 서버가 연속된 요구를 수신한다면, 서버는 객체를 연속해서 보낸다.(연결 끊지 않음)

  • HTTP의 디폴트 모드는 파이프라이닝을 이용한 지속 연결을 사용