[컴퓨터 네트워크] HTTP

Pakxe·2023년 9월 22일
1

컴퓨터 네트워크

목록 보기
7/16
post-thumbnail

구성

  • HTTP
  • 비지속 연결
  • 지속 연결
  • message

이 정리는 23-2에 수강한 컴퓨터 네트워크 강의를 기반으로 하였습니다.

HTTP

HTTP(hypertext transfer protocol) 는 웹에서 데이터를 전송하기 위한 프로토콜이다. 주로 html문서를 주고받는데 쓰인다.

HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. 클라이언트가 html을 달라고 요청하면, 서버는 이에 응답하여 파일을 보내는 식의 방식이다.

HTTP안에 포함되어있는 hypertext란 웹 문서 파일인 html의 주 구성 요소인데, 기존의 문서는 1, 2, 3번 이렇게 순차적으로 나열되어 있다면, 하이퍼 텍스트는 링크를 어디다 두냐에 따라 차례가 바뀌는 방식이다. 즉 정해진 순서가 있는 것이 아니며 하이퍼 링크로 연결된 문서들은 특정 이벤트(클릭 등)로 자유롭게 이동할 수 있다. 그래서 hyper(건너편의, 초월) + text를 합성한 용어인 것이다.

그래서 HTTP(hypertext transfer protocol)은 정해진 순서가 없이 돌아다닐 수 있는 웹페이지를 송수신하는 프로토콜이라고 정의할 수 있다.

client-server

client-server에 대한 설명
HTTP는 client-server model을 기반으로 동작한다.

클라이언트는 HTTP를 이용해 요청(request)하고 받는다(receive). 그리고 받은 오브젝트들을 웹 브라우저를 통해 띄워 볼 수 있다.

서버는 HTTP를 이용해 요청(request)에 응답(response)한다.


이렇게 개발자도구에서 request url에 get으로 요청을 보내 서버가 200이라고 응답을 주는 것을 확인할 수 있다.

비지속 연결과 지속 연결

클라이언트-서버의 통신이 TCP 상에서 발생할 때 TCP 연결 종류 중 하나를 선택할 수 있다.

  • 비지속 연결(non-persistent HTTP)
  • 지속 연결(persistent HTTP)

비지속 연결

비지속 연결은 하나의 파일은 한번의 tcp연결로 전송되는 것이다. 10개의 파일이 있다면 10번의 tcp연결이 필요하다. 그러므로 각 tcp 연결은 하나의 요청 메세지와 하나의 응답 메세지만 전송한다.

예로 1개의 기본 html파일과, 10개의 이미지를 전달받아야한다고 해보자.

연결 과정은 아래와 같다.
1. HTTP 클라이언트가 HTTP의 기본 포트 번호인 80을 통해 서버로 TCP 연결을 시도한다. 이 TCP연결과 관련해서 클라이언트와 서버 각각의 소켓이 존재한다.
2. 설정된 TCP 연결 소켓을 통해 서버로 HTTP 요청 메세지를 보낸다.
3. HTTP 서버는 연결 소켓을 통해 요청 메세지를 받는다. 그리고 요청된 html를 꺼내 HTTP 응답 메세지에 캡슐화해 담는다. 포장이 끝난 응답 메세지를 소켓을 통해 클라이언트로 보낸다.
4. TCP 클라이언트가 응답 메세지를 올바르게 받았다면, HTTP 서버는 TCP에게 TCP 연결을 끊으라고 한다.
5. HTTP 클라이언트가 응답 메세지를 전달받으면, TCP 연결이 중단된다. 받은 캡슐화된 메세지 안에는 html라는 정보가 포함되어있다. 클라이언트는 html파일을 조사해 10개 이미지에 대한 참조를 찾는다.
6. 참조되는 각 이미지 파일에 대해 1~4를 반복한다.

이 과정으로 예시를 수행하면 11개의 tcp 연결이 만들어진다. 10개의 이미지를 받는 과정을 병렬적(pipeline)으로 수행할지 직렬로 수행할지는 사용자가 동시성을 조절해 변경할 수 있다. 당연하게도 파이프라인으로 연결을 수행하면 응답시간을 줄일 수 있다.

비지속 연결의 응답 시간

이 연결이 얼마만큼의 시간이 필요한지 측정해보자.

이를 위해 작은 패킷이 클라이언트로부터 서버까지 가고, 다시 클라이언트로 되돌아오는 데 걸리는 시간인 RTT(round-trip time) 개념을 사용한다. RTT는 전파, 큐잉, 처리 등의 지연을 포함하는 시간이다.

사용자가 버튼을 누르거나 하는 액션을 위해 새로운 페이지로 이동한가면 브라우저가 브라우저와 웹 서버 사이의 TCP 연결을 시도한다. 이는 3way handshake를 포함한다.

3way handshake
클라이언트가 작은 tcp 메세지(컨트롤 패킷)를 서버로 보내고, 서버는 작은 메세지로 응답, 마지막으로 클라이언트가 다시 서버에게 응답한다.

세 방향 핸드셰이크가 중 처음 두 부분이 끝나면 1 RTT가 계산된다. 그리고 두 부분이 끝난 후 클라이언트는 HTTP요청 메세지를 TCP 연결로 보내면서 세번째 부분(응답)을 함께 보낸다.

요청 메세지가 서버에 도착하면 서버는 HTML파일을 TCP 연결로 보낸다. 당연하게도 이 HTTP 요청/응답 쌍은 또 1 RTT가 필요하다. 따라서 대략의 응답 시간은 2 RTT + HTML 파일 전송 시간 이다.

지속 연결

비지속 연결은 매 TCP마다 TCP 버퍼가 할당되어야 하고 TCP 변수들이 클라이언트와 서버 양쪽에 유지되어야하기 때문에, 클라이언트 수가 많아질 수록 서버에게 큰 부담이 간다. 또한 각 객체(이미지 등)는 최소 2 RTT를 필요로 하여 불필요한 시간(한번의 TCP 연결로 모든 객체를 보낼 수 있다면 TCP 연결을 위해 필요한 1 RTT를 절약할 수 있으므로)이 소모된다.

결국 위와 같은 단점을 해소하기 위해 지속 연결 TCP 방식을 선택할 수 있다.

지속 연결은 하나의 TCP 연결에 여러 개의 요청과 응답을 전송할 수 있는 방식이다(기존은 1TCP = 1req, 1res). 이로 인해 동시에 여러 데이터를 다운로드할 때 성능이 향상된다. 또한 하나의 TCP 연결로 모든 데이터를 다운할 수 있으므로, 서버의 부하를 줄일 수 있어, 더 많은 클라이언트를 수용할 수 있다.

지속 연결의 응답 시간

HTTP request message

HTTP의 메세지 종류에는 request, response 이렇게 두 가지가 있다고 배웠다. 이 중 요청(request) 메세지에 대해서 알아보자.

아래 이미지가 HTTP 요청 메세지이다.

사람이 읽을 수 있도록 ascii 텍스트로 쓰여있다. HTTP 요청 메세지의 첫번째 줄은 요청 라인이라고 하고, 그 이후 줄은 헤더 라인이라고 한다.

GET부분은 method 필드인데, 이 부분에 HEAD가 오면 헤더 정보만 응답이 온다. 이는 데이터 양이 줄어줄어 빠르게 서버 상태를조회할 수 있다는 장점이 있고 이후 배울 캐시에서 사용된다.

HTTP response message

HTTP 응답 메세지는 아래 형태와 같다.


첫번째 줄은 상태 라인, 그 밑은 헤더 라인이다. 그리고 데이터.. 라고 쓰여진 부분은 body라고 한다.

post 메서드같은 경우는 클라이언트가 서버에게 메세지를 담을 수 있으며 이는 entity body안에 담겨서 보내진다.

요약

  • HTTP: 웹에서 사용되는 프로토콜, 요청과 응답 두 가지가 존재한다.
  • 비지속 연결: 한번하고 끊긴다
  • 지속 연결: 한번 연결해놓으면 쭉 쓸 수 있다.
  • 메세지: 메세지의 형태가 각각 다르며, 캐시에 사용할 수 있는 메서드인 헤드가 있다

잘못된 내용이 있으면 pigkill40@naver.com 으로 연락주시기 바랍니다.

profile
내가 꿈을 이루면 나는 또 누군가의 꿈이 된다.

1개의 댓글

comment-user-thumbnail
2024년 6월 16일

그래서 지속 연결의 응답 시간은 뭔데요

답글 달기