본문 바로가기
HTTP

HTTP의 등장 배경 - TCP/IP 그리고 URI

by 코딩균 2021. 12. 17.

서로 다른 컴퓨터가 통신하기 위해서는 하나의 네트워크망 속에 연결되어 있어야 한다

 

네트워크는 총 5개의 계층으로 이루어져 있다.

 

5계층 : Application 

전송 혹은 전송 받은 메시지를 처리하는 end point

4계층 : Transport 

TCP / UDP 프로토콜로 진행되는 계층

TCP로 운송되는 패킷을 segment

UDP로 운송되는 패킷을 user-datagram

3계층 : Network

ip라는 interface를 가지고 패킷이 운송됨

모든 컴퓨터는 각자의 ip를 가지고 있음

2계층 : Data Link

해당 계층에서 전달되는 패킷을 frame이라고 함

1계층 : Physical

물리적인 계층


패킷의 계층 간 전달 과정

컴퓨터 A에서 다른 컴퓨터 B로 전송되는 패킷(메시지)는

network계층에서 패킷 헤더에 ip를 붙여서 네트워크망으로 전송한다.

 

(h2 : A IP | B IP) + 패킷 메시지 

 

네트워크 망을 타고 알아서 B까지 도착하면 좋겠지만 ip만 가지고는 현실은 아래와 같은 문제들이 발생한다

 

패킷 받는 쪽(B)의 서버가 불능

패킷이 네트워크 망을 타고 가다가 유실

패킷의 도착 순서가 뒤죽박죽인 경우

 

단순 네트워크 계층의 ip만으로는 위의 세 문제를 해결할 수 없기 떄문에 

4계층인 Transport 전송 계층이 등장했다. 

 

과정은 이러하다

 

  1. 응용Application계층에서 프로그램이 메시지를 Socket 라이브러리를 통해 패킷화
  2. 전송 Transport 계층에서 넘어온 패킷을 받아서 TCP / UDP 정보를 헤더에 추가
  3. 네크워크 Network 계층에서 전송 계층에서 넘어온 패킷에 IP정보를 담은 헤더를 추가
  4. Data Link + Physical 계층으로 패킷을 전달

 

즉 네트워크 계층을 지나면서 헤더를 아래와 같이 추가하는 것이다

 

(h2 : A IP | B IP) + (h3 : A의 port 번호 | B의 port 번호 | 전송제어 | 순서 | 검증정보) + 패킷 메시지 

 

port?

한 컴퓨터내에서 여러개의 어플리케이션이 실행될 떄, 해당 어플리케이션을 구분하기 위한 번호

0 ~ 65535번까지 할당 가능

그중에서 Well-Known-Port (1 ~ 1023)은 국제적으로 이미 정해놓은 약속?같은 포트번호라서 사용하지 않는 것이 좋음

  • HTTP - 80
  • HTTPS - 443

Transport 계층 프로토콜

 

TCP - Transmission Control Protocol 전송 제어 프로토콜

  • 신뢰성이 높은 프로토콜
  • 연결지향 - 연결을 먼저 후 메시지를 보내는 방식 ex) 3-way handshake
  • 순서 보장 - 커넥션 당 여러개의 buffer를 할당하여 해당 커넥션으로 들어온 패킷들의 순서를 맞춘다
  • 전달 데이터 오류 점검
  • HTTP 프로토콜의 근간

 

UDP - User Datagram Protocol 사용자 데이터그램  프로토콜

  • TCP가 가진 모든 기능이 없음
  • 빠르게 사용 환경에 최적화 가능 - 3 way handshake등 걸리는 시간이 없음
  • IP protocol에 port 확인, 오류 점검 기능 정도 추가
  • 커스텀화 때문에 HTTP3는 해당 프로토콜 사용하기도 함

 

여기서 HTTP는 TCP/IP 를 사용하여서 통신한다는 것을 생각한다면

우리가 www.pickyfarm.com 처럼 쓰는 도메인은 어떻게 IP와 매칭되는 것인가?

 

DNS - Domain Name System 도메인 네임 시스템

도메인 명을 키값으로 가지고 IP를 value값으로 가지는 테이블을 가지고 있는 서버다

www.pickyfarm.com 3.230.234.2
www.naver.com 3.234.23.23
www.daum.net 3.233.53.23

따라서 우리가 도메인을 치면 DNS 서버에 먼저 물어봐서 해당 서버의 ip주소를 가져와서 패킷의 헤더에 넣는다고 생각하면 된다

 


URI

Uniform Resource Identifier - 리소스를 구별하는 통일된 방식

URI = URL (locator) + URN (name) 으로 구성되어 있다

즉, 위치와 이름으로 결국 리소스를 구별해내는 방식 그래서 패킷이 해당 리소스에 도착할 수 있도록 나 여깄어 해주도록 도와주는 것이 URI 라고 생각하면 된다

 

http://www.pickyfarm.com:80/product/search?cat=fruit

위와 같이 위치와 이름을 모두 알 수 있다

  • www.pickyfarm.com  - DNS으로부터 ip 추출
  • http - 프로토콜
  • 80 - 포트번호 (생략 가능하다. 이미 http는 포트번호가 well-known 인 80이다)
  • 쿼리파라미터 - 리소스의 위치 혹은 이름 상세

이렇게 URL 즉 URI를 통해서 정보를 알 수 있다

 

이러한 URI 이면에 패킷의 메시지 부분에는 아래와 같은 메시지가 들어간다

GET /product/search?cat=fruit HTTP/1.1
HOST: www.pickyfarm.com

즉 이 메시지에 위의 과정에서처럼 헤더를 두개를 붙여서 컴퓨터 A에서 B로 보내는 것이다.

 

이러한 URI를 가지고 HTTP 형식의 메시지를 패킷에 넣어서 TCP/IP 방식으로 다른 컴퓨터와 소통하는 방식을 HTTP라고 한다

TCP방식을 가지고 있기 때문에 보안에 좋고 

DNS와 URI를 통해서 해당 컴퓨터 서버를 쉽게 네트워크 망에서 찾을 수 있다.

 

'HTTP' 카테고리의 다른 글

HTTP의 등장 배경 - TCP/IP 그리고 URI  (0) 2021.12.17