서버나 클라이언트나 인터넷을 통한 어떤것을 하더라도 접할 수 있는 것이 HTTP 다. 그런데 실제로 HTTP 에 대해서 공부하려고 하면 너무 양도 방대 하고 어디서 부터 어떻게 봐야할지 막막하다. 그래서 이 글에서는 HTTP 에 관해 그때 그때 생기는 궁금증을 위주로 정리해 보려고 한다.
HTTP 는 왜 필요 하나?
HTTP는 Hyper Text Transfer Protocol 의 약자로 서버와 클라이언트 간의 웹 통신에 주로 사용됩니다. HTTP 는 OSI 7 계층 중 어플리케이션 계층에 속하고, TCP/IP 위에서 동작합니다. 우리는 평소에 이러한 HTTP 통신을 이용해 서버에서 주는 텍스트 들을 전달 받아서 웹 페이지를 로딩할 수 있습니다.
HTTPS 는 뭔가
기본적인 HTTP 통신은 단순히 평문 데이터를 주고 받는 과정이기 때문에 네트워크 통신 과정 중에 어떤 데이터가 오가는지 쉽게 확인이 가능합니다. 만약 사용자의 개인 정보가 포함된 데이터를 주고 받는 다면 이 값들이 전부 노출되는 상황이 됩니다. 그래서, HTTP 통신을 하는 중에 암호화된 데이터를 주고 받을 수 있도록 제공하는 것이 HTTPS(Hyper Text Transfer Protocol Secure) 입니다.
HTTPS 는 대칭키 암호화와 비대칭키 암호화를 둘다 사용해서 암호화를 지원합니다. 처음 서로간의 대칭키를 만드는 과정을 비대칭키 암호화 방식으로 공유한 뒤, 얻어진 대칭 키를 이용해 통신을 합니다.
TCP 위에서 동작하는 HTTP 는 어떤 다른점이 있나?
HTTP 는 TCP 보다 높은 계층에 있고, HTTP 의 내부에는 결국 TCP 가 포함되어 있어서 TCP 의 특징인 3-way handshake 나 흐름 제어 등과 같은 특징을 그대로 가져갈 수 있습니다. TCP 는 연결 지향적인 특징을 가지고 있기 때문에, 세션이 한번 맺어지면 거기서 끊기지 않고 세션이 종료될때 까지 연결을 유지합니다. 하지만 HTTP 는 비연결지향적인 단방향 통신이기 때문에 요청할 때마다 새로운 TCP 연결을 생성하고 응답이 마치면 연결이 종료되는 형태입니다.
HTTP 의 keep-alive ?
위에서 HTTP 가 단방향 비연결지향적이라고 했는데, 그러면서 HTTP 통신이 늘어나게 되면 그 만큼의 TCP 통신횟수도 늘어나기 때문에 비효율 적인 모습이 생기게되었습니다. 그래서 HTTP 에서 keep-alive 라는 헤더를 통해 TCP 연결을 재사용할 수 있도록 제공되었습니다. (HTTP/1.1 에서는 디폴트 기능, 연결을 끝내고 싶으면 `Connection: close` 헤더를 붙여야 함)
참고
* https://mangkyu.tistory.com/98
* https://hwan-shell.tistory.com/271
* https://www.goanywhere.com/blog/http-vs-tcp-whats-the-difference
'네트워크' 카테고리의 다른 글
Go 에서 HTTP client 를 작성할 때 주의할 점 (0) | 2024.04.12 |
---|---|
RPC? gRPC? 에 대해서 알아보자 -(2) (3) | 2022.03.06 |
RPC? gRPC? 에 대해서 알아보자 -(1) (2) | 2022.02.13 |
예시를 통해 VLAN 에 대해서 알아보자 (1) | 2022.01.30 |
예시를 통해 터널링을 알아보자 (1) | 2022.01.28 |
댓글