네트워크 세번째 시간

chu·2021년 5월 11일
0
post-thumbnail

이번 시간에는 네트워크에서도 중요한 HTTP와 HTTPS에 대해서 정리하려고 한다.


HTTP (Hyper Text Transfer Protocol)

HTTP(Hyper Text Transfer Protocol)란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.

즉, HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용하고 있다. 따라서 HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 된다.

HTTP는 1989년 팀 버너스 리(Tim Berners Lee)에 의해 처음 설계되었으며, WWW(World-Wide-Web) 기반에서 세계적인 정보를 공유하는데 큰 역할을 하였다.

하지만 HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이였기 때문에, HTTP로 비밀번호나 주민등록번호 등을 주고 받으면 제3자가 정보를 조회할 수 있었다. 그리고 이러한 문제를 해결하기 위해 HTTPS가 등장하게 되었다.

HTTP 구조

HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성된다.

여기서 Stateless는 무상태 라고 표현이 되는데 서버가 클라이언트의 이전 상태를 갖고 있지 않는다. 라고 생각하면 될 것 같다. 그렇기 때문에 서버 확장이 용이하다.

상태가 필요한 경우도 있겠지? 로그인을 했으면 지속적인 로그인을 유지 시켜야죠!
그래서 일반적으로 브라우저에서는 보통 쿠키와 세션을 이용해서 로그인을 유지 시키는 것 같다!

하지만 매번 요청을 가게되니 최소한의 상태만 유지를 시켜야한다고 한다!

IP (Internet Protocol)

지정한 IP 주소(IP address)에 데이터 전달하는 역할을 담당하고 있다.
여기서 데이터를 보낼 때는 패킷(Packet) 이라는 통신 단위로 전달한다.
전달을 하는 과정은 수 많은 노드를 지나서 전달이 이루어 진다.

Packet ?

수화물이라는 패키지와 덩어리를 뜻하는 버킷의 합성어이다.

하지만 IP만으로 데이터를 전달하는 것은 한계가 있다.

  1. 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  2. 비신뢰성 : 중간에 패킷이 사라지거나 패킷을 순서대로 전달하고 순서대로 오지 않는다면?

그래서 TCP / UDP 이 두 가지가 IP의 한계를 극복해준다.
위 에서 TCP 내용이 나왔으니 간단하게 TCP에서 정리를 하겠다.

TCP (Transmission Control Protocol)

전송 제어 프로토콜이며, 그럼 어떻게 IP의 한계를 극복 시킬 수 있을까?

1.연결 지향 - TCP 3 way handshake (가상 연결)

클라이언트와 서버와 서로 연결이 되는지 3단계로 확인 후 데이터를 전달한다.
현재는 최적화로 인해서 3단계 때 데이터를 같이 보낸다.
아래 이미지처럼 서로 연결되어 있는지를 확인하는 과정이 있는데, 이 부분으로 IP의 비연결성을 극복할 수 있다.

2.데이터 전달 보증

3.순서 보장 - 순서가 잘못 도착 시 잘못된 순서부터 클라이언트에게 재 전달 요청

이러한 방식으로 신뢰성이 높은 프로토콜이며, 현재는 대부분 HTTP/1.1, HTTP/2 에서 TCP를 주로 사용하고 있다. 하지만 신뢰성이 높은 만큼 비용도 크다고 한다.

그래서 이 부분을 대체하여 필요한 기능만 커스텀할 수 있는 UDP(User Datagram Protocol)도 존재한다.

HTTPS (Hyper Text Transfer Protocol Secure)

HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure 등으로 불리는 HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다. HTTPS는 HTTP와 다르게 433번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 공개키 암호화를 지원하고 있다.

프로젝트 배포 시 HTTPS Let's Encrypt에서 무료로 제공해주는 서비스를 이용했다.
다만 3개월(?) 정도 기간에만 사용할 수 있고, 그 후에는 또 발급받을 수 있다. 이렇게 되면 귀찮기 때문에 자동화 해주는 방법도 있다! 한 마디로 무제한 서비스! 비영리기관인 만큼 정말 고마운 존재다 ㅜ


TCP/IP 내용 및 이미지 자료 출처
모든 개발자를 위한 HTTP 웹 기본 지식

HTTP / HTTPS 정리 내용 출처
https://mangkyu.tistory.com/98 [MangKyu's Diary]

profile
한 걸음 한걸음 / 현재는 알고리즘 공부 중!

0개의 댓글