[Network] HTTP 통신 과정

🧠·2022년 8월 31일
0

NETWORK

목록 보기
1/1

HTTP?

HyperText Transfer Protocol

  • HTML과 같은 하이퍼미디어 문서를 전송하기 위한 애플리케이션 계층 프로토콜

HTTP의 특징

  • 클라이언트-서버 구조
  • 무상태 프로토콜, 비연결성
  • TCP 위에서 돌아감
  • ...

👀 애플리케이션 계층?

웹 브라우저를 사용하는 유저와 같은 최종 사용자에게 TCP/IP 환경에서 정보를 주고받을 수 있게 해주고 의미 있는 데이터들을 유저들에게 전달하게 해준다.

  • SMTP / FTP / SSH / HTTP 등...

HTTP 메시지

  • Header
POST /albums HTTP/1.1	- 메소드 / 요청 주소 / HTTP 버전
Host: localhost:9000
User-Agent: insomnia/2022.5.1
Content-Type: application/json	- JSON / TEXT 등 리소스의 media type
Accept: */*
Content-Length: 81	- 개체 본문(Body)의 크기 byte
  • Body
{
"id": "4",
"title": "Test Title",
"artist": "Test Artist",
"price": 49.99
}

브라우저에 웹 사이트 주소를 입력하거나 로그인을 하면 위 HTTP 메시지 형식으로 해당 웹 사이트에 HTTP 요청을 보내게 된다.

웹 사이트의 IP 주소는 DNS 서버를 통해 알 수 있다.

Socket?

애플리케이션 계층과 전송 계층 사이에 존재하며 하위 계층에서 어떤 방식으로 데이터가 전달되는지 몰라도 쉽게 네트워크 프로그래밍을 할 수 있도록 도와주는 라이브러리이다.

  • 네트워크 통신을 이용한 데이터 교환 기법

Socket 연결을 통해 클라이언트-서버 간 네트워크 통신이 가능해졌으면 HTTP 메시지를 전송할 수 있게 된다.

HTTP 프로토콜은 TCP 위에서 동작하는데 TCP의 특징은 다음과 같다.
1. 연결 지향
2. 데이터 신뢰성 보장

  • 흐름/오류/혼잡 제어를 통해 신뢰성 있는 데이터를 전송한다.

  • TCP를 통해 전달되는 패킷의 헤더는 위와 같다.
  • Flags 내부에 SYN와 FIN 비트가 있다.
  • TCP 헤더에 Source Port와 Destinaion Port에 값을 넣어준다.

연결 지향의 특징을 가지는 TCP 통신은 데이터를 주고받기 전 3-way handshake를 통해 상대방과의 연결을 확립한다.

  1. Client -> Server
    Sequence Number를 x로 설정하고 SYN bit가 1인 패킷을 보낸다.
  2. Server -> Client
    ACK Number가 (x + 1)이고 Sequence Number는 y, SYN bit가 1인 패킷을 보낸다.
  3. Client -> Server
    ACK Number가 (y + 1)인 패킷을 보낸다.

  • Encapsulation 과정

연결 과정을 마친 후 유저의 데이터(HTTP 메시지)는 전송 계층에서 TCP 헤더에 Source Port와 Destination Port에 알맞은 값을 넣어주고 네트워크 계층에서 IPv4 헤더에 Source IP와 Destination IP에 알맞은 값을 넣어준 후 서버에 전달된다.

유저의 데이터를 모두 정상적으로 보낸 것을 확인하면 클라이언트와 서버 간 연결을 종료하는데 이때는 4-way handshake 과정을 거치며 연결을 끊게 된다. 3-way handshake와 비슷한 방식으로 과정이 진행된다.

서버는 클라이언트의 요청에 맞는 행동을 한 후 응답을 보낸다.

HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Date: Mon, 29 Aug 2022 11:00:58 GMT
Content-Length: 93
profile
: )

0개의 댓글