HTTP란

김민지·2022년 9월 24일
0

백엔드로드맵

목록 보기
2/13

HTTP란

  • 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜
  • 하이퍼 텍스트를 전송하는 프로토콜

HTTP 특징

  • HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해 해석이 된다.
  • TCP/IP를 이용하는 응용 프로토콜이다.
  • HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
    (이러한 단점을 해결하기 위해 Cookie와 Session이 등장하였다.)
  • HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청-응답 방식으로 동작한다.

비연결성이란?

  • 비연결성은 클라이언트와 서버가 한 번 연결을 맺은 후, 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질을 말합니다.

HTTP는 어떻게 동작하나요?

  • Stateless한 프로토콜
  • 각 요청은 독집적인 트랜잭션으로 클라이언트가 서버에게 요청하기 전에 연결하는 과정이 필요하고, 서버의 응답을 받으면 종료한다.
  1. 접속
  2. 정보 요청
  3. 응답
  4. 연결 종료
  • 사용자가 웹 브라우저에 URL 주소를 입력한다.
  • DNS 서버에 도메인 이름을 IP주소로 변경해달라고 요청을 보내요.
  • 웹서버와 TCP 연결을 시도한다(3way-handshaking)
  • 연결됐음을 확인하고, 클라이언트가 서버에게 요청한다.
  • 서버가 클라이언트에게 데이터를 응답한다.
  • 서버 클라이언트 간 연결종료 (stateless의 특징이 나타남)
    4-way-handshaking

질문

HTTP의 동작방식에 대해 궁금한점이 있습니다
맨 처음.. 웹서버와 TCP연결을 시도하게 되고, 연결됐음을 확인한 이후에 클라이언트가 서버에게 HTTP 요청을 하게 됩니다.
서버는 클라에게 응답을 보내게 되고 응답이 끝났음을 확인하면 TCP연결을 끊게 됩니다.
그니까 HTTP요청 하나 보내고 응답 하나 받으면 TCP연결도 다 끊어지게 되는건가요?
아니면 TCP연결이 된 이후에 HTTP는 stateless로 통신을 계속하고 tcp연결은 나중에 끊어지는건가요?

  • 전자가 맞음

질문

HTTP는 응용계층 프로토콜이고 TCP는 전송계층 프로토콜이에요
HTTP는 TCP기반위에서 만들어져서 TCP성격을 모두 포함한대요
근데 TCP는 핸드쉐이킹 방식을 이용해서 stateful한데 비해 http는 stateless해요
이런부분이.. tcp성격을 모두 포함한다고 할 수 있는건가요?

  • stateful, stateless개념은 tcp에 기반을 두었다 해서 그것을 그대로 따라가지 않는다. (왜지?)
  • 말씀하신 것처럼 TCP의 연결지향과 HTTP의 비연결성은 결이 다른 것으로 이해해주시면 될 것 같습니다.
    TCP는 UDP와 다르게 먼저 내가 요청 보낼 곳과 연결할 수 있는지를 체크하는 로직이 있다는 점에서 연결지향적인 것이고.
    HTTP는 기본적으로 SOCKET 통신(TCP/IP)과 달리 요청과 응답을 받고 나면 연결을 끊고, 요청이 필요할 때마다 연결을 하는 비연결성을 보입니다.
    또한 TCP 연결 후 HTTP 연결이 이루어지는데요
  • 정리하면... 브라우저에서 URL 입력하고 엔터를 누르면
    1) DNS 서버 에서 해당 URL의 아이피를 조회합니다.
    2) 아이피에 해당하는 서버와 TCP 연결을 합니다.
    3) 이후 HTTP 요청/응답을 합니다.

정리

HTTP란 무엇인가요?

  • HTTP는 TCP/IP위에서 동작하는 텍스트 기반의 통신규약입니다.
    HTTP는 연결상태를 유지하지 않는 비연결성 프로토콜입니다. 이러한 단점을 극복하기 위해 세션이나 쿠키 등을 활용합니다

HTTP는 어떻게 동작하나요?

  • 먼저 사용자가 웹브라우저에 URL을 입력합니다. 그러면 DNS로 요청이 가게되는데요 그래서 도메인 이름을 IP주소로 바꿔줘서 그 주소로 요청이 가게 됩니다. 웹서버와 TCP연결을 시도하게 되고, 연결됐음을 확인한 이후에 클라이언트가 서버에게 HTTP 요청을 하게 됩니다. 서버는 클라에게 응답을 보내게 되고 응답이 끝났음을 확인하면 TCP연결을 끊게 됩니다. 이걸 매번 반복합니다.

네트워크 4계층의 각각의 프로토콜에 대해서 설명해주세요

  • 클라이언트와 서버에 해당하는 컴퓨터 두개를 가져왔다 그리고 이 둘을 케이블로 연결한다
    그럼 이때 사용되는 계층이 네트워크 인터페이스 계층이다
    하지만 둘이 매우 멀리 떨어져있다고 가정하다. 이때 인터넷이 필요하고 인터넷은 케이블의 역할을 대신한다
    이때 인터넷 계층이 필요하다 즉, 인터넷을 거쳐야한다
    하지만 이렇게 인터넷계층으로만 통신을 하다보면 한계가 있다. 비연결성과 비신뢰성에있다
    비연결성 - 연결되어있지 않은 상태여도 패킷을 전송한다
    비신뢰성 - 중간에 패킷이 사라지거나 순서대로 오지 않아도 이런부분에 대해 체크를 하지 않는다
    프로그램 구분 - 같은 ip를 사용하는 서버에서 통신하는 애플리케이션이라면 둘을 어떻게 구분할 것인가?
    이러한 IP 프로토코르이 한계를 극복하는 방법이 TCP프로토콜이다
    그래서 TCP를 계층이 추가된다. 그러니까 인터넷계층까지로만 통신을 하다보면 비연결성과 비신뢰성 등 여러 문제가 생기는데 전송계층까지로 범위를 넓혀서 사용하게되면
    이 문제를 해결할 수 있다

출처
https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
https://www.inflearn.com/questions/313406

profile
안녕하세요!

0개의 댓글