본문 바로가기

공부 정리

23.11.05: 웹과 네트워크 - TCP/IP 프로토콜

반응형

HTTP란?

 

웹은 HTTP로 나타납니다.

우리가(Client가) 웹 브라우저의 주소창에 URL을 입력하여 어디론가 요청을 보내면, 응답이 돌아와서 우리가 요청한 웹 페이지가 보여집니다. 이때 HTTP를 통해서 HTML과 같은 리소스들을 가져오는데요. HTTP는 클라이언트와 서버 간의 프로토콜입니다.   

 


Protocol 

the system of rules and acceptable behavior that people or organiztions should follw in official situations for example when they have formal discussions.

출처: Cambridge Dictionary

 

 

프로토콜의 정의를 살펴보면 사람들, 기관들 사이에서 공식적으로 협의된 어떠한 룰이라고 이해해 볼 수 있습니다.

즉, 웹에서 우리는 HTTP를 이용해 통신하기로 한다는 약속을 한 것입니다.

 

 

 

 

HTTP의 등장 배경

1989년 3월, 팀 버너스 리 박사가 동료 연구자와의 물리적 거리를 극복하고 서로 지식을 공용 할 수 있도록 시스템을 고안하면서 HTTP가 탄생하게 되었습니다. 처음에는 하이퍼텍스트에 의해 참조를 가능하게하는 World Wide Web, 웹의 기본이 되는 것이었습니다.

문서 기술 언어로는 SGML를 베이스로한 HTML, 문서 전송 프로토콜로 HTTP, 문서 주소 지정 방법으로 URL(Uniform Resource Locator) 등 세가지가 제안되었습니다. 

 

 

 

 

HTTP의 Version들

 

HTTP/0.9

1990년대에 등장한 HTTP는 정식 사양서가 아니라서 1.0 이전의 HTTP라는 의미로 0.9로 칭한다고 합니다. 이땐 매우 단순한 형태의 요청과 응답으로 이루어졌고, HTTP 헤더가 없었습니다. 또한 HTML 파일만 전송이 가능했습니다.

 

HTTP/1.0

1996년 5월에 드디어 HTTP가 정식 사양으로 공개되었습니다. HTTP 헤더 개념이 생겼고, 다양한 미디어 유형과 기타 데이터의 전송을 허용하였습니다. 단점은 여러 번의 TCP 연결이 필요하고 효율성이 낮다는 문제가 있었습니다.

 

HTTP/1.1 

1997년 1월에 공개되었습니다. Keep-Alive 기능을 이용하여 단일 TCP 연결로 여러 요청 및 응답을 처리할 수 있도록 했으며, 성능을 향상시켰습니다. 다양한 헤더 압축 및 캐시 기능을 추가하여 네트워크 사용량을 줄였습니다.

 

HTTP/2
2015년에 나온 버전으로, Google의 SPDY 프로토콜을 기반으로 만들어졌습니다. 다중화(multiplexing)와 스트림(stream) 지원을 통해 여러 요청을 동시에 처리하여 성능을 향상시켰습니다. 헤더 압축과 서버 푸시(server push) 기능을 추가하여 더 빠른 웹 페이지 로딩을 지원합니다.

HTTP/3
2020년에 나온 최신 버전으로, 기존의 TCP를 대체하기 위해 QUIC(Quick UDP Internet Connections) 프로토콜 위에서 동작합니다. 다중화와 빠른 연결 설정을 위해 UDP(사용자 데이터그램 프로토콜)를 사용하며, 오류 복구 및 향상된 보안 기능을 제공합니다. 더 빠른 성능, 낮은 지연, 더 안정적인 연결이 주요 특징입니다.

 

 

 

 

TCP/IP

HTTP를 이해하기 위해서는 TCP/IP를 이해해야한다고 합니다. TCP/IP는 컴퓨터 네트워크 및 인터넷 통신에 사용되는 프로토콜 슈트(protocol suite)로, 데이터 통신의 기본 규칙과 프로토콜을 정의합니다. TCP/IP는 네트워크에서 데이터 패킷(정보 전송의 기본 단위)을 보내고 받는 방법, 각 컴퓨터나 기기가 어떻게 식별되며 어떻게 데이터를 목적지로 보내야 하는지 등을 관리합니다. 또한, 데이터가 전송되는 도중에 오류를 검출하고 어떻게 그 오류를 수정하는지도 다룹니다.

간단히 말하면, TCP/IP는 컴퓨터와 기기 사이에서 정보를 안전하게 주고받을 수 있도록 도와주는 규칙과 절차들의 집합입니다.

 

 

출처: https://www.youtube.com/watch?v=wvPe4Zb0tUA

 

 

 

 

 

주요 특징, 구성 요소

 

1. 프로토콜 스택: TCP/IP는 여러 계층으로 구성되어있습니다. 이 계층에는 여러 이점이 있습니다. 인터넷이 하나의 프로토콜로 되어 있다면 어디선가 사양이 변경되었을 때 전체를 바꿔야 하지만, 계층화되어 있으면 해당 계층만 바꾸면 됩니다. 또한 계층이 연결되어 있는 부분만 결정되어 있어서, 각 계층의 내부는 자유롭게 설계가 가능합니다. 또한 각 계층의 역할에 맡게 고려하면 되기 때문에 설계 또한 쉽습니다. 

 

 대표적 계층은 다음과 같습니다.

 

  • 애플리케이션 계층: 사용자 애플리케이션과 네트워크 간의 상호작용을 다루고, 예로 HTTP, FTP, SMTP와 같은 프로토콜이 여기 속합니다.
  • 전송 계층: 데이터 전송을 관리하며, 오류 검출 및 복구 기능을 제공합니다. 주요 프로토콜로 TCP(신뢰성 있는 전송)와 UDP(신뢰성 없는 전송)이 있습니다.
  • 인터넷 계층: 데이터 패킷의 라우팅과 주소 지정을 담당하고, IP(Internet Protocol)이 이 계층의 핵심입니다.
  • 링크 계층: 물리적인 네트워크와의 연결을 다루며, Ethernet, Wi-Fi, PPP와 같은 기술들이 사용됩니다.

 

2. 주소 체계: TCP/IP는 IP 주소를 사용해서 네트워크에서 컴퓨터를 식별합니다. IP 주소는 전세계 어느 곳의 컴퓨터라도 고유하게 식별되도록 해줍니다. 

 

3. 패킷 통신: TCP/IP는 데이터를 작은 패킷으로 나눠 전송합니다. 각 패킷에 목적지 주소, 데이터 조각이 포함되고, 이러한 패킷은 네트워크를 통해 전송됩니다.

 

4. 신뢰성: TCP/IP 프로토콜 중 TCP는 데이터 전송의 신뢰성을 제공합니다. 데이터가 손실되거나 손상되면 TCP는 이를 감지하고 복구합니다.

 

5. 무역 및 오픈 표준: TCP/IP는 무료로 사용 가능하며, 개발자들이 쉽게 확장하고 사용자 정의할 수 있습니다. 이러한 개방성은 인터넷의 성장과 확장을 이루는 핵심입니다.

 

TCP/IP는 현재 인터넷 및 대부분의 기업 및 개인 네트워크에서 사용되는 표준 프로토콜이며, 전 세계적인 네트워크 통신의 기반을 제공합니다.

 

 

 

 

클라이언트와 서버 간의 TCP/IP 통신은 다음과 같은 단계로 이루어집니다:

 


클라이언트 (Client) 측:

1. 요청 생성: 클라이언트에서는 특정 서비스나 정보에 대한 요청을 생성합니다. 이 요청은 데이터로 구성되며, 주로 HTTP 요청 (웹 브라우징) 또는 다른 애플리케이션 프로토콜을 통해 이루어집니다.

2. 요청을 패킷으로 분할: 생성된 요청은 작은 패킷으로 분할됩니다. 각 패킷에는 요청 데이터와 목적지 서버의 주소 정보가 포함됩니다.

3. 패킷 전송: 분할된 패킷들은 인터넷을 통해 서버로 전송됩니다. 이 과정은 라우터, 스위치 및 다른 네트워크 장치를 통해 이루어집니다. 목적지 서버 주소는 라우팅을 위해 사용됩니다.

서버 (Server) 측:

1. 패킷 수신: 서버는 클라이언트로부터 오는 패킷을 수신합니다. 각 패킷은 전송된 순서대로 도착하지 않을 수 있으므로 서버는 패킷을 재조립해야 합니다.

2. 요청 처리: 서버는 수신된 패킷을 재조립하고 클라이언트의 요청을 처리합니다. 이 과정은 웹 서버에서 웹 페이지를 제공하거나 다른 서비스를 제공하는 것과 관련이 있습니다.

3. 응답 생성: 서버는 클라이언트의 요청을 처리한 결과로 응답 데이터를 생성합니다. 이 응답 데이터는 원래의 요청과 관련된 정보를 포함합니다.

4. 응답을 패킷으로 분할: 생성된 응답 데이터는 작은 패킷으로 분할되어 클라이언트로 전송됩니다. 각 패킷에는 응답 데이터와 클라이언트 주소 정보가 포함됩니다.

클라이언트 (Client) 측:

1. 응답 패킷 수신: 클라이언트는 서버로부터 오는 응답 패킷을 수신합니다.

2. 응답 재조립 및 처리: 클라이언트는 수신된 응답 패킷을 재조립하여 원래의 응답 데이터로 복구합니다. 그런 다음 응답 데이터를 처리하고 결과를 사용자에게 표시하거나 다른 목적에 사용합니다.

이러한 과정을 통해 클라이언트와 서버는 TCP/IP를 사용하여 데이터를 안전하게 주고받을 수 있습니다. 데이터는 패킷으로 나눠져 전송되며, 클라이언트와 서버 간의 상호작용이 가능하도록 해줍니다.





HTTP와 관계가 깊은 세가지 프로토콜

 

1.  TCP(Transfer Control Protocol)

 

출처: https://www.avg.com/en/signal/what-is-tcp-ip

 

  • 데이터의 안정적인 전송을 담당하는 프로토콜입니다.
  • Three way handshaking이라는 방법을 사용해 패킷을 보내고 나서 보내졌는지 여부를 상대에게 확인합니다.
  • 데이터를 세그먼트로 나누어 전송하고, 수신 측에서 이러한 세그먼트를 재조립하여 데이터 무결성과 순서를 보장합니다.
  • HTTP와 함께 사용되며, 웹 브라우징 및 웹 서버간의 안정적인 데이터 통신을 가능하게 합니다.

 

2.  IP(Internet Protocol)

 

출처: https://www.investopedia.com/terms/i/ip-address.asp

 

 

  • IP는 데이터 패킷을 라우팅하고 목적지로 전달하는 역할을 하는 프로토콜입니다.
  • 각 노드에 IP 주소를 할당하고 데이터 패킷을 해당 주소로 전송합니다.
  • MAC(Media Access Control Address) 주소는 각 네트워크 카드에 할당된 고유의 주소입니다. IP 주소는 변경 가능하나 MAC 주소는 변경이 불가합니다.
  • IP 통신은 MAC 주소에 의존해서 통신을 합니다.
  • 이 때, ARP(Address Resolution Protocol) 라는 프로토콜이 사용됩니다. ARP는 수신지의 IP 주소를 바탕으로 MAC 주소를 조사할 수 있습니다. 
  • HTTP와 함께 사용하여 데이터 패킷이 올바른 목적지로 안전하게 도달할 수 있도록 합니다.

 

3.  DNS(Domain Name System)

 

출처: https://raidboxes.io/en/blog/webdesign-development/domain-name-system-dns/



  • DNS는 IP 주소와 호스트 이름 간의 변환을 수행하는 시스템입니다.
  • HTTP 클라이언트가 웹 서버에 연결하려면 서버의 호스트 이름을 알아야 합니다.
  • DNS는 호스트 이름을 해당 호스트의 IP 주소로 변환하여 HTTP 클라이언트가 올바른 서버에 연결할 수 있게 합니다.

 

 

 

이렇게 TCP, IP, 그리고 DNS는 함께 작동하여 HTTP와 같은 애플리케이션 레벨 프로토콜을 지원하며, 웹 브라우징과 웹 서버 간의 통신을 원활하게 만듭니다.

 

 

 

 

 

References

HTTP의 진화 - MDN

그림으로 배우는 HTTP & Network Basic - 우에노 센 지음, 이병억 옮김

 

 

 

반응형