0183

학교

[컴퓨터 네트워크] Chapter2. Application Layer (Part 1) - (2)

[7-0] HTTP request message

1) HTTP 메세지의 2가지 종류

  1. request: 클라이언트가 서버에 정보를 요청할 때 사용한다

  2. response: 서버가 클라이언트의 요청에 대해 답변을 보내는 메세지이다.

[7-1] HTTP request message

(1) 특징

  • ASCII (사람이 읽을 수 있는 형식으로 구성)

  • \r : 캐리지 리턴 문자

  • \n : 줄 바꿈 문자

  • 캐리지 리턴, 줄 시작 부분의 줄 바꿈은 헤더 줄의 끝을 나타낸다.

(2) 구조

  1. request line(GET, POST, HEAD commands): 클라이언트가 서버에 어떤 작업을 요청하는지를 명시

  2. header lines: 추가 정보를 담고 있다. (브라우저 종류, 요청 리소스의 언어 등)

  3. Body: POST나 PUT 같은 요청에서는 클라이언트가 서버로 전송하는 데이터가 이곳에 담긴다.

(3) general format

  1. request line : method + sp + URL + sp + version + cr + if

  2. header lines : header field name + value + cr + if

  3. body

(4) methods 종류

  1. GET method: 서버로부터 리소스를 가져온다.

  • 리소스 검색

  • HTTP GET 요청 메시지의 URL 필드( ? 뒤에 오는)에 사용자 데이터를 포함한다.

  1. POST method: 주로 폼 데이터 전송에 사용

  • 웹 페이지는 종종 form 입력이 포함된다.

  • HTTP POST 요청 메시지의 엔티티 본분(requet의 entity body)에서 클라이언트에서 서버로 전송된 사용자 입력

  1. PUT method: 서버에 새로운 데이터를 업로드하거나 기존 데이터를 대체한다.

  • 새 파일(객체)를 서버에 업로드한다.

  • 지정한 URL에 존재하는 파일을 POST HTTP 요청 메시지의 엔티티 본문(request의 entity body)에 있는 콘텐츠로 완전히 대체한다.

  1. HEAD method: GET 요청과 유사하지만, 응답 본문을 제외하고 헤더 정보만 요청된다.

  • 지정한 URL을 HTTP GET 메소드로 요청할 경우 반환되는 헤더(전용)을 요청한다.

[7-2] HTTP response message

1) 구조

  1. status line (프로토콜 상태 코드 상태 문구): 서버의 응답 상태

  2. header lines: 서버의 정보나 응답에 대한 추가 정보를 전달

  3. Body (예 : 요청된 HTML 파일): 클라이언트가 요청한 HTML 파일이나 리소스가 이곳에 담긴다.

2) HTTP response status code

: 상태 코드는 서버-클라이언트 응답 메시지의 첫 번째 줄에 나타난다.

  1. 200 OK: 요청 성공, 이 메세지 후반부에 요청된 객체

  2. 301 Moved Permanently: 요청된 객체가 다른 위치로 이동됨. 이 메세지 뒷 부부분에 새 위치가 저장됨. (위치 : 필드)

  3. 400 Bad Request: 서버가 요청 메세지를 이해하지 못함.

  4. Not Found: 요청된 문서를 이 서버에서 찾을 수 없음

  5. 505 HTTP Version Not Supported: 지원되지 않는 HTTP 버전

[8] Maintaining user/server staste : cookies (사용자 / 서버 상태 유지 : 쿠키)

1) 특징 1

  • Recall : HTTP GET/response 상호작용은 'state'가 없다.: HTTP는 기본적으로 무상태 프로토콜이다.

  • 웹 '트랜잭션'을 완료하기 위한 HTTP 메세지의 다단계 교환 개념이 없다.

    • 클라이언트 / 서버가 다단계의 교환 상태를 추적할 필요가 없다.

    • 모든 HTTP 요청은 서로 독립적이다. (이전에 했던 요청과 연관되지 않는다.)

    • 클라이언트 / 서버가 부분적으로 완료되었지만, 완전히 완료되지 않은 트랜잭션에서 복구할 필요가 없다.

  • 상태 저장 프로토콜: 쿠키는 클라이언트의 상태를 서버가 기억하도록 돕는다.: 클라이언트가 X를 두 번 변경하거나 전혀 변경하지 않는다.

2) 그림 설명

  • 클라이언트가 서버의 데이터 레코드 X에 대해 잠금, 업데이트, 잠금 해제 작업을 수행하는 과정을 보여준다.

  • 각 단계마다 서버는 'OK' 응답을 보내며, 데이터 상태가 변경된다. (X -> X', X' -> X'')

3) Q. 't' 시점에서 네트워크 연결이 끊기거나, 클라이언트가 충돌하면 어떻게 되는가?

A. 't' 시점에서 연결이 끊기거나, 클라이언트가 충돌하면 다음과 같은 상황이 발생할 수 있다.

  1. 데이터 일관성 문제: X'로 업데이트 된 후 X''로의 업데이트가 완료되지 않은 상태에서 중단되어, 서버의 데이터가 불완전한 상태로 남을 수 있다.

  2. 잠금 해제 실패: 클라이언트가 데이터 잠금을 해제하지 못해, 다른 클라이언트가 해당 데이터에 접근하지 못할 수 있다.

  3. 트랜잭션 미완료: 전체 작업이 완료되지 않아 데이터의 경합성이 깨질 수 있다.

이러한 문제를 해결하기 위해 서버 측에서 '타임아웃 메커니즘, 트랜잭션 롤백, 자동 잠금 해제' 등의 방법을 구현해야 하며, 클라이언트 측에서는 '재연결 및 상태 복구 로직'을 구현하여 중단된 작업을 안전하게 재개하거나 취소할 수 있어야 한다.

4) 특징 2 (쿠키의 구성 요소)

: 웹 사이트와 클라이언트 브라우저는 쿠키를 사용하여 트랜잭션 사이의 '네 가지 구성 요소의 상태'를 유지한다.

  1. HTTP 응답 메시지의 쿠키 헤더 라인: 서버가 클라이언트에게 쿠키를 전달한다.

  2. 다음 HTTP 요청 메시지의 쿠키 헤더 라인: 클라이언트는 이후 요청에서 서버에게 쿠키를 다시 보낸다.

  3. 사용자의 호스트에 보관되고, 사용자의 브라우저에 의해 관리되는 쿠키 파일: 쿠키는 사용자의 브라우저에 저장된다.

  4. 웹 사이트의 백엔드 데이터베이스: 서버는 쿠키 정보를 통해 사용자 상태를 저장하고 관리한다.

5) 예시

  • 수찬이 노트북에서 브라우저를 사용하여 특정 어커머스 사이트를 처음 방문함

  • 초기 HTTP 요청이 사이트에 도착하면 사이트에서 생성된다.

    • 고유한 ID (일명, 쿠키)

    • 백엔드 데이터베이스의 ID 항목

  • 수찬이 이 사이트로 보내는 후속 HTTP 요청에는 쿠키 ID 값이 포함되어 사이트가 수찬을 식별할 수 있다.

[9] HTTP 쿠키 : 코멘트

1) 쿠키의 사용 목적

  1. authorization: 사용자가 웹사이트에 로그인하면, 쿠키를 통해 인증 정보를 저장하여 로그인을 유지할 수 있다.

  2. shopping carts: 쇼핑몰에서 상품을 장바구니에 담았을 때, 쿠키를 통해 해당 상품 정보를 저장하여 페이지를 이동해도 장바구니가 유지된다.

  3. recommendations: 사용자의 활동 기록을 바탕으로 맞춤형 추천 콘텐츠를 제공할 수 있다.

  4. user session state (Web e-mail): 웹 메일이나 기타 웹 서비으세어 사용자의 세션을 유지하여 사용자가 계속 작업을 이어갈 수 있도록 한다.

2) 상태 유지 방법

  1. 프로토콜 엔드 포인트: 여러 트랜잭션에 걸쳐 발신자/수신자의 상태 유지

  2. 쿠키 : HTTP 메시지를 통해 클라이언트의 상태 정보를 전달하여 서버가 사용자의 상태를 기억할 수 있도록 한다.

3) 쿠키 및 개인 정보

  • 쿠키를 사용하면 사이트가 사이트에서 사용자에 대한 많은 정보를 얻을 수 있다.

  • 타사 영구 쿠키 (추척 쿠키)를 사용하면 여러 웹 사이트에서 공용 ID (쿠키 값)을 추적할 수 있다.

[10] Web caches (프록시 서버)

: 목표는 원본 서버의 개입 없이 클라이언트 요청 충족하는 것이다.
: 웹 캐시는 클라이언트가 원본 서버에 직접 접속하지 않고도 필요한 리소스를 빠르게 제공받을 수 있도록 도와주는 시스템이다.

1) 특징 1 (웹 캐시의 동작)

  1. 사용자가 웹 캐시를 가리키도록 브라우저를 구현한다. (브라우저 설정을 통해 웹 캐시 서버를 가리키도록 설정 가능)

  2. 브라우저가 모든 HTTP 요청을 캐시로 전송한다.a. 캐시에 객체가 있는 경우: 캐시는 객체를 클라이언트에게 반환한다.b. 그렇지 않은 경우: 캐시는 원본 서버에서 객체를 요청하고, 수신된 객체를 캐시한 다음 객체를 클라이언트에게 반환한다.

  3. fast loading / cpu-memory

  4. bottle leck, large data 에도 용이하다

2) 특징 2 (웹 캐시의 특징)

  1. 웹 캐시는 클라이언트와 서버 역할을 모두 수행한다.a. 원본 요청 클라이언트를 위한 서버 (클라이언트를 위한 서버 역할): 클라이언트가 요청한 리소르를 반환한다.b. 클라이언트에서 원본 서버로 (서버를 위한 클라이언트 역할): 원본 서버로부터 데이터를 받아오고 저장한다.

  2. 일반적으로 캐시는 ISP(대학, 회사, 주거용)에서 설치한다.

  3. CDN와 유사하다. (Content Delivery Network)

3) Q. 왜 캐싱인가?

  • 클라이언트 요청에 대한 응답 시간 단축

    • 캐시가 클라이언트에 더 가깝게 위치한다.

  • 교육 기관 접속 링크의 트래픽 감소

  • 인터넷은 캐시와 밀접되어 있다. (효율적인 콘텐츠 제공)

    • 열약한 콘텐츠 제공업체가 콘텐츠를 보다 효과적으로 제공할 수 있도록 지원한다.

[11] Caching example

1) 시나리오

  • access link rate (접속 링크 속도) : 1.54 Mbps

  • RTT from institutional router to server (서버와의 왕복 시간) : 2 sec (1 RTT)

  • Web object size (웹 객체 크기) : 100K bits

  • Average request rate from browser to origin server (원본 서버에 대한 평균 요청 빈도) : 15회/sec

    • average data rate to browsers (브라우저로의 평균 데이터 전송 속도) : 1.50 Mbps (15 req/sec * 100K bits)

2) Performance (성능 분석)

  • LAN untilization (LAN 사용률) : .0015

  • access link utlization (접속 링크 사용률) : 0.97 (1.5 M

  • end-end delay = Internet delay + access link delay + LAN delay= 2 sec + minutes + useces

Web Cache 설치 후 액세스 링크 이용률 및 엔드-투-엔드 지연 계산

  1. 캐시 히트율이 0.4 (40%)라고 가정: 40%의 요청이 캐시에서 만족되고, 60%는 원본 서버에서 만족됨.

  2. 액세스 링크: 60%의 요청이 액세스 링크를 사용함.

  3. 브라우저로의 데이터 전송 속도: 액세스 링크를 통한 전송 속도는 0.6 * 1.5 Mbps = 0.9 Mbps

  4. 액세스 링크 사용률: 0.9 / 1.54 = 0.58.

  5. 평균 엔드-투-엔드 지연: 0.6 * 2.01 + 0.4 * ms: 약 1.2초로 지연이 감소됨.

결론: 웹 캐시를 사용하면 154Mbps 링크보다 평균 엔드-투-엔드 지연이 더 낮아지고, 비용도 절감됨.

[12] Exercise

1) 캐싱 없는 경우 성능 계산 예시

  1. 액세스 링크 속도: 15Mbps.

  2. 기관 라우터에서 서버까지의 RTT: 3초.

  3. 웹 객체 크기: 850,000비트.

  4. 브라우저에서 원본 서버로의 평균 요청 속도: 16개 요청/초.

  5. 평균 액세스 지연 계산 (t / 1 - (t*a)): t는 객체를 액세스 링크를 통해 전송하는 데 필요한 평균 시간.: t = 0.0567초. ( L / R = 850,000 / 15,000,000): 요청 도착 속도 a = 16/초.: 트래픽 강도와 평균 액세스 지연 계산= 0.0567 / (1 - (0.0567 * 16/sec))= 0.0567 / (1 - 0.9072)= 0.0567 / 0.0928= 0.6109913793=> 약 0.6초

  6. 총 평균 응답 시간: RTT + average access delay = 3초 + 0.6초 ≈ 3.6초.

2) 캐시를 사용하는 경우 성능 계산 예시

  1. 캐시가 설치된 상황에서의 성능:: 캐시 미스율 0.4 가정.

  2. 캐시 히트율 60%의 경우:: 캐시 히트 시 응답 시간이 거의 0에 가까움.

  3. 캐시 미스 시 액세스 지연:: 캐시 미스율이 0.4일 때, 액세스 링크를 통해 데이터 전송 시 평균 지연 시간은 1.44초.: 최종 응답 시간 계산 시 캐시 미스를 고려한 결과= 0.6 * 0 + 0.4 * 3.61= 0 + 1.444 = 1.444= 약 1.44초


목차