sharingStorage

HTTP와 웹 네트워크 기본 본문

CS지식

HTTP와 웹 네트워크 기본

Anstrengung 2023. 10. 22. 09:29

이 글은 그림으로 배우는 Http&Network Basic을 읽고 추가로 알고 싶은 내용과 함께 정리한 글입니다.

 

웹은 HTTP로 나타낸다.

웹 브라우저는 웹 브라우저 주소 입력란에 지정된 URL에 의지해서 웹 서버로부터 리소스라고 불리는 파일 등의 정보를 얻고있습니다.

이 때, 서버에 의뢰하는 웹 브라우저 등을 클라이언트라고 부릅니다.

이렇게 클라이언트에서 서버까지 일련의 흐름을 결정하고 있는 것을 웹에서 HTTP(HyperText Transfer Protocol)이라 불리는 프로토콜입니다.

프로토콜이라는 의미는 “약속”이며, 즉 웹은 HTTP라는 약속을 사용한 통신으로 이루어져 있습니다.

 

 HTTP 버전

HTTP/0.9

HTTP가 정식 사양서가 아니였을 때입니다. 1.0 버전 이전이라는 의미에서 0.9라고 불립니다.

HTTP/1.0

HTTP가 정식 사양으로 공개됐습니다. 초기의 사양이지만 현재에도 아직 많은 서버상에서 현역으로 가동되고 있는 프로토콜 사양입니다.

HTTP/1.1

1997년에 공개된 현재 가장 많이 사용되는 버전입니다.

웹 문서 전송 프로토콜로서 등장한 HTTP는 거의 버전이 업그레이드 되지 않았습니다.

HTTP/2.0

HTTP2.0은 기존 HTTP 1.1버전의 성능 향상에 초점을 맞춘 프로토콜입니다. 인터넷 표준의 대체가 아닌 확장으로써 1.1버전의 성능 저하 부분과 비효율적인 것들을 개선해서 탄생한 것이라고 생각하시면 됩니다.

HTTP1.1 까지는 한 번에 하나의 파일만 전송이 가능했습니다. 비록 파이프라이닝 기술이 있지만, 여러 파일을 전송할 경우 선행하는 파일의 전송이 늦어지면 HOLB(Head Of Line Blocking)이 발생합니다.

따라서 HTTP 2.0에서는 이 문제를 해결하기 위해 여러 파일을 한 번에 병렬로 전송합니다.

 

크롬 - 개발자도구 - 네트워크 탭에서 우클릭 - Header Option에서 Protocol을 클릭하면 현재 서버통신에서 사용되는 프로토콜을 볼 수 있습니다. 

+ Cookies나 Set Cooies도 설정해서 볼 수 있습니다.

1.1과 가장 중요한 차이점은 HTTP메세지가 1.1에서는 text로 전송되었던 것과 달리, 2.0에서는 binary frame로 인코딩되어 전송된다는 것입니다.

또한 HTTP헤더에서 헤더와 바디를 /r, /n 과 같은 개행 문자로 구분한다고 하였는데, HTTP/2.0에서는 헤더와 바디가 layer로 구분됩니다.

→ 이로 인해 데이터 파싱 및 전송 속도가 증가하였고 오류 발생 가능성이 줄어든다고 합니다.

HTTP/ 3.0

HTTP/3 도 있습니다.

가볍게 알아보니 HTTP3는 자체적으로 스트림을 다루는 전송 프로토콜인 QUIC를 위해 설계되었다고 합니다.

HOLB(Head Of Line Blocking)

네트워크에서 같은 큐에 있는 패킷이 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상.

QUIC

인터넷을 통해 데이터를 전송하는 새로운 방법, 이전 프로토콜보다 빠르고 효율적임

속도향상을 위해 TCP보다 빠르지만 안전성이 떨어지는 UDP전송 프로토콜을 사용합니다.

UDP 전송 프로토콜은 도중에 손실되는 데이터를 보충하기 위해 한 번에 여러 데이터 스트림을 전송하며 이는 “ 멀티플렉싱” 이라고 알려져있다.

 

네트워크의 기본은 TCP/IP

인터넷을 포함하여 일반적으로 사용되고 있는 네크워크는 TCP/IP라는 프로토콜에서 움직이고 있습니다.

HTTP는 그 중 하나입니다.

TCP/IP는 프로토콜의 집합

컴퓨터와 네트워크 기기가 상호 통신하기 위해서는 같은 방법으로 통신해야하며 서로 다른 하드웨어와 운영체제 등을 가지고 서로 통신하기 위해서는 모든 요소에 규칙이 필요하게 되는데 이러한 규칙을 프로토콜이라 합니다.

인터넷과 관련된 프로토콜을 모은 것을 TCP/IP라고 부립니다. TCP와 IP프로토콜을 가리켜 TCP/IP프로토콜이라고 부르기도 하지만, IP프로토콜을 사용한 통신에서 사용되고 있는 프로토콜을 총칭하여 TCP/IP라는 이름이 사용되고 있습니다.

계층으로 관리되고 있는 TCP/IP

TCP/IP에서 중요한 개념 중 하나가 계층입니다. TCP/IP는 아래 네 개의 계층으로 나뉘어 있습니다.

  • 애플리케이션 계층
  • 트랜스포트 계층
  • 네트워크 계층
  • 링크 계층

TCP/IP가 계층화된 이유는 계층 내부를 자유롭게 설계하고 만약 특정 부분이 변경되면 해당 계층만 변경하면 되기 때문에 간섭을 최소화하고 유지보수에 편리함을 가지기 때문입니다.

각 계층에 역할

애플리케이션 계층

애플리케이션 계층은 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정합니다.

FTP랑 DNS도 애플리케이션의 한가지이며, HTTP도 이 계층에 포함됩니다.

데이터 단위 : 데이터/ 메세지

예시 : 파일 전송, 이메일, HTTP, DNS, SMTP 등

트랜스포트 계층

애플리에키션에 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공합니다.

여기에는 서로 다른 성질을 가진 TCP와 UDP프로토콜이 있습니다.

데이터 단위 : 세그먼트

예시 : TCP, UDP

네트워크 계층 (인터넷 계층)

네트워크 상에서 패킷의 이동을 다룹니다.

패킷이란 전송하는 데이터의 최소 단위이며 이 계층에서는 어떠한 경로를 거쳐 상대의 컴퓨터까지 패킷을 보낼지를 결정하기도 합니다.

데이터 단위 : 패킷

예시 : IP, ARP, ICMP, RARP

링크 계층 (네트워크 인터페이스 계층, 데이터링크 계층)

네트워크에 접속하는 하드웨어적인 면을 다룹니다.

하드웨어적 측면은 모두 링크계층의 역할입니다.

데이터 단위 : 프레임

예시 : MAC, LAN, Ethernet 등

TCP/IP 통신의 흐름

TCP/IP로 통신할 때 계층을 순서대로 거쳐 상대와 통신합니다. 송신하는 측은 애플리케이션 계층부터 내려가고, 수신하는 측은 네트워크 계층부터 애플리케이션 계층으로 올라갑니다.

각 계층을 거칠 때는 반드시 헤더로 불려지는 해당 계층마다 필요한 정보를 추가합니다. 반대로 수신측에서는 각 계층을 거칠 때마다 반드시 해당 계층 마다 사용한 헤더를 삭제합니다.

이렇세 정보를 감싸는 것을 캡슐화라고 후릅니다.

HTTP와 관계가 깊은 프로토콜 IP/TCP/DNS

배송을 담당하는 IP

네트워크 층에 해당되는 인터넷을 활용하는 거의 대부분의 시스템이 IP를 이용하고 있습니다.

IP의 역할은 개개의 패킷을 상대방에게 전달하는 것이며

IP주소는 각 노드에 부여된 주소를 가리키고 MAC주소는 각 네트워크 카드에 할당된 고유의 주소입니다.

IP주소는 변경 가능하지만 기본적으로 MAC주소는 변경할 수 없습니다.

ARP 프로토콜

여러 대의 컴퓨터와 네트워크 기기를 중계해서 상대방에게 도착하는데 이렇게 중계하는 동안 다음 중계할 곳의 MAC주소를 사용하여 목적지를 찾아갑니다. 이때 ARP라는 프로토콜이 사용됩니다.

ARP는 주소를 해결하기 위한 프로토콜 중 하나인데 수신지의 IP주소를 바탕으로 MAC주소를 조사할 수 있습니다.

신뢰성을 담당하는 TCP

트랜스포트 층에 해당하는 신뢰성 있는 바이트 스트림 서비스를 제공하는 프로토콜입니다.

대용량의 데이터를 작게 분해하여 상대에게 보내고 이것이 잘 도착했는지 확인하는 역할을 담당합니다.

데이터를 확실하게 보내기 위해 TCP는 three way handshaking이라는 방법을 사용하고 있고 이 방법은 패킷을 보내고 나서 잘 보내졌는지 여부를 상대방에게 확인하는 것입니다.

바이트 스트림 서비스 : 용량이 큰 데이터를 보내기 쉽게 TCP세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 것

이름 해결을 담당하는 DNS

DNS는 HTTP와 같이 응용 계층 시스템에서 도메인 이름과 IP주소 이름 확인을 제공합니다.

도메인명에서 IP주소를 조사하거나 반대로 IP주소로 부터 도메인명을 조사하는 서비스를 제공합니다.

www.naver.com ↔ 101.189.832.295

URI와 URL

URI : 웹페이지를 표시하기 위해 입력하는 주소

URL : Uniform Resource Identifiers 의 약자로

Uniform

통일된 서식을 결정하는 것으로 여러가지 종류의 리소스 지정 방법을 같은 맥락에서 구별없이 취급할 수 있게 합니다.

Resource

식별가능한 모든것.

Identifiers

식별 가능한 것을 참조하는 오브젝트이며 식별자로 불립니다.

URI는 리소스를 식별하기 위해 문자열 전반을 나타내는데 비해 URL은 리소스의 장소를 나타냅니다.

URL은 URI의 서브셋입니다.

URL 포맷

URI는 필요한 정보 전체를 지정하는 완전 수식 절대 URI와 상대적 위치를 지정하는 상대URL이 있습니다.

절대 URI포맷

<http://user:pass@www.example.jp:80/dir/index.html?uid=1#ch1>

http: - 스키마 : http:와 https:같은 스키마를 사용하며, 리소스를 얻기 위해 사용하는 프로토콜을 지시, 매소문자는 무시되고 마지막에 :(콜론)이 하나 붙습니다 

www.example.jp - (<http://www.example.jp>) 서버주소

:80 - 서버포트

index.html - 계층적 파일패스

uid=1  - 쿼리스트링 : 파일패스로 지정된 리소스에 임의의 파라미터를 넘겨주기 위해 사용

 

Reference

https://inpa.tistory.com/entry/WEB-🌐-HTTP-20-통신-기술-이제는-확실히-이해하자

https://http3-explained.haxx.se/ko/h3/h3-h2

https://velog.io/@dyunge_100/Network-TCPIP-4계층에-대하여

 

'CS지식' 카테고리의 다른 글

간단한 프로토콜 http  (0) 2023.11.08
HTTP와 연계하는 웹 서버  (0) 2023.11.07
결과를 전달하는 HTTP 상태코드  (0) 2023.11.06
[NVM] window 환경에서 node 버전 관리  (0) 2023.03.27
Comments