티스토리 뷰

Network

[Network] 웹과 네트워크

CharlieZip 2021. 7. 29. 02:09
반응형

[ HTTP 등장 배경 ]

HTTP란 웹에서 HTTP(HyperText Transfer Protocol)이라 불리는 프로토콜입니다.

과거에 CERN(유럽 인자 물리학 연구소)의 팀 버너스 리 박사는 멀리 떨어져 있는 동료 연구자와 지식을 공용하게 할 수 있도록 시스템을 고안하였습니다.

즉, 지식 공유를 위해 고안되었다고 생각하면 됩니다.

HTTP는 등장한 당시에는 주로 텍스트를 전송하기 위한 프로토콜이었지만, 프로토콜 자체가 상당히 심플해 여러 가지 응용 방법을 고려해 기능이 계속해서 추가되었습니다.

HTTP 메시지 전송 기능

  • HTML, TEXT
  • IMAGE, 영상, 파일
  • JSON, XML(API)

현재는 거의 모든 형태의 데이터 전송이 가능합니다.

 

[ HTTP 역사 ]

HTTP/1.0

  • HTTP가 정식 사양으로 공개된 것은 1996년 5월이었습니다.
  • RFC1945가 발행되었습니다.
  • 초기의 사양이지만 아직 서버상에서 가동되고 있는 곳도 있습니다.

HTTP/1.1

  • 1997년 1월에 RFC2068이 공개되었습니다.
  • RFC2068(1997)  -> RFC2616(1999)  -> RFC7230 ~ 7235(2014)
  • 현재 가장 많이 사용하는 스펙입니다.

HTTP/2.0

  • 2015년 5월에 RFC7540이 공개되었습니다.
  • 여러 성능 개선이 이뤄졌습니다.

 

[ TCP/IP 란? ]

HTTP를 이해하기 위해서는 TCP/IP 프로토콜에 대해 어느 정도 알고 있어야 할 필요가 있습니다.

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

HTTP는 그중 한 프로토콜입니다.

 

TCP/IP는 프로토콜의 집합

컴퓨터와 네트워크 기기가 상호 간에 통신하기 위해서는 서로 같은 방법으로 통신하지 않으면 안 됩니다.

  • 예를 들면, 어떻게 상대를 찾고, 어떻게 상대에게 이야기를 시작하고, 어떠한 언어로 이야기를 하며, 어떻게 이야기를 종료할까 와 같은 규칙을 결정할 필요가 있습니다.

이렇게 서로 다른 하드웨어와 운영체제 등을 가지고 서로 통신을 하기 위해서는 모든 요소에 규칙이 필요한데 이러한 규칙을 프로토콜이라고 부릅니다.

 

.

프로토콜에는 여러 가지가 있습니다

위 그림처럼 인터넷과 관련된 프로토콜을 모은 것을 TCP/IP라고 부릅니다.

 

[ 계층으로 관리하는 TCP/IP ]

TCP/IP 에서 중요한 개념 중 하나가 계층(Layer)입니다.

TCP/IP는 '애플리케이션 계층' , '트랜스포트 계층', '네트워크 계층', '링크 계층' 이렇게 4 계층으로 나뉘어 있습니다.

 

이렇게 계층화되어 있으면 사양이 변경되어도 전체를 바꾸지 않고 변경된 해당 계층만 바꾸면 됩니다.

또한 계층화하면 설계를 편하게 할 수 있습니다. 애플리케이션 층에서 애플리케이션은 자기 자신이 담당하는 부분을 고려하면 되고, 상대가 어디에 있는지, 어떠한 루트로 메시지를 전달하는지, 전달한 메시지가 확실하게 전달되고 있는지 같은 고려를 하지 않아도 됩니다.

 

  • 애플리케이션 계층 : 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정
  • 트랜스포트 계층 : 애플리케이션 계층에 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공.
    • 예) TCP(Transmission Control Protocol)과 UDP(User Data Protocol)이 해당됩니다.
  • 네트워크 계층 : 네트워크 상에서 패킷의 이동을 다룹니다.
    • 패킷이란 전송하는 데이터의 최소 단위입니다.
    • 이 계층에서는 어떠한 경로를 거쳐 상대의 컴퓨터까지 패킷을 보낼지를 결정하기도 합니다.
  • 링크 계층 : 네트워크에 접속하는 하드웨어적인 면을 다룹니다.
    • 운영체제가 하드웨어를 제어하기 때문에 디바이스 드라이버랑 네트워크 인터페이스 카드(NIC)를 포함합니다.
    • 케이블, LAN 장비 등과 같이 물리적으로 보이는 부분도 포함합니다.

 

 

[ TCP/IP 통신의 흐름 ]

TCP/IP로 통신을 할 때 계층을 순서대로 거쳐 상대와 통신을 합니다.

송신하는 측은 애플리케이션 계층에서부터 내려가고, 수신하는 측은 애플리케이션 계층으로 올라갑니다.

  1. 클라이언트의 애플리케이션 계층(HTTP)에서 어느 웹 페이지를 보고 싶다 라는 HTTP Request를 지시합니다.
  2. 트랜스포트 계층(TCP)에서는 애플리케이션 계층에서 받은 데이터(HTTP 메시지)를 통신하기 쉽게 조각내어 안내 번호와 포트 번호를 붙여 네트워크 계층에 전달합니다.
  3. 네트워크 계층(IP)에서는 수신지 MAC 주소를 추가해서 링크 계층에 전달합니다.
  4. 네트워크를 통해 송신합니다.

5~7. 수신 측 링크 계층에서 데이터를 받아들여 순서대로 위의 계층에 전달합니다.

 

 

각 계층을 거칠 때는 반드시 해당 계층마다 헤더로 불려지는 해당 계층에 필요한 정보를 추가합니다.

반대로 수신 측에서는 각 계층을 거칠 때마다 반드시 해당 계층마다 사용한 헤더를 삭제합니다.

 

 

TCP/IP 중에서 HTTP와 관계가 깊은 IP, TCP, DNS 세 개의 프로토콜에 대해 알아보겠습니다.

 

[ IP(Internet Protocol) ]

IP(Internet Protocol)는 계층으로 말하자면 네트워크 층에 해당됩니다.

실제 이름 그대로 인터넷을 활용하는 대부분의 시스템이 IP를 이용하고 있습니다.

IP의 역할은 개개의 패킷을 상대방에게 전달하는 것인데요. 상대방에게 전달하기까지 여러 가지 요소가 필요합니다.

그중에서도 IP 주소MAC 주소(Media Access Control Address)라는 요소가 중요합니다.

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

 

이렇게만 보면 이게 무슨 말인가 생각이 드실 거 같습니다. 먼저 각각의 특징을 살펴보고, 예시를 들어 이해해보겠습니다.

 

IP 주소는 MAC 주소와 결부됩니다.

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

  • MAC 주소
    • MAC 주소는 데이터 링크 계층에서 사용하는 네트워크 인터페이스에 (보통 NIC(Network Interface card) 할당된 고유 식별 주소, 고유 식별자이고, 물리 주소나 하드웨어 주소라고도 불립니다.)
    • MAC 주소는 네트워크 인터페이스 컨트롤러(NIC 카드)를 만든 회사에서 할당하여 하드웨어에 저장됩니다.
    • 다른 MAC 주소와 겹치지 않는 고유의 주소를 할당하고, 48비트로 구성되어 있습니다.
    • e.g.) D1:F2:FK:CC:12:34
  • IP 주소
    • IP address - 호스트나 라우터 장비의 인터페이스에 할당된 32 bit의 주소입니다.
    • 이 주소를 통해서 장치들이 서로를 인식하고 통신할 수 있습니다.
    • e.g.) 현재 많이 사용하는 IPv4 기준 192.168.107.11과 같이 표기합니다.

 

그럼 MAC 주소와 IP 주소 왜 두 개나 필요할까요?

예시를 들어보면 이해가 훨씬 쉬울 수 있다.

 

A가 B에게 택배를 보낸다고 한다.

A는 B의 주소 '서울 송파구 방이동 44-2'으로 택배 보내줘 라고 합니다.

(예시를 들기 위해 우아한 형제들 주소를 사용했습니다.)

이때 '서울 송파구 방이동 44-2' 은 IP 주소에 해당한다. 그럼 MAC 주소는 무엇일까??

MAC 주소는 장소의 물리적 주소 경도와 위도입니다.

B의 경도 위도는 (37.51693420046939, 127.11278291842325)에 해당합니다.

 

음 그럼 MAC 주소와 IP 주소의 차이는 이제 이해가 갈 거 같습니다.

근데 그냥 애초에 MAC 주소를 가지고 배송하면 되는 거 아니냐?라고 반문할 수도 있습니다.

 

만약 B의 위치를 (37.5 xxx, 127.1 xxx)라고만 알려주게 된다면 택배기사님은 어디로 택배를 보내야 하는지 한눈에 알아보기도 어렵고, 택배를 보낼 경로를 찾기가 매우 어렵습니다.

그래서 '서울 송파구 방이동 44-2'이라는 주소를 통해서

 

송파구 택배 집배소  → 방이동 택배 집배소 → B의 경로로 택배를 보내게 됩니다.

 

만약 IP주소만을 통해 계속 택배를 보내는 건 어떨까요??

 

위에서 IP 주소는 고유한 주소가 아니라고 했습니다.

위의 예에서는 지번 주소를 사용하고 있지만 도로명 주소 '서울 송파구 위례성대로 2 장은빌딩'로도 나타낼 수 있고

후에 또 다른 주소로 변경이 가능합니다.

 

배송을 할 때는 IP주소와 MAC 주소 두 개 모두 필요합니다.

 

 

라우터는 위의 예시에서 집배소와 흡사합니다.

패킷을 어느 주소로 보내야 할지 대략적인 목적지만 알고 그 주소로 보내줍니다.

어떤 컴퓨터나 네트워크 기기도 인터넷 전체를 상세하게 파악하고 있지 못하기 때문에 라우팅 시스템을 통해 데이터를 전송합니다.

 

통신은 ARP를 이용하여 MAC 주소에서 한다.

IP 통신은 MAC 주소에 의존해서 통신을 합니다. 인터넷에서 통신 상대가 같은 랜선 내에 있을 경우는 적어서 여대 대의 컴퓨터와 네트워크 기기를 중계해서 상대방에게 도착합니다. 그렇게 중계하는 동안에는 다음으로 중계할 곳의 MAC 주소를 사용하여 목적지를 찾아가는 것입니다. 이때, ARP(Address Resolution Protocol)이라는 프로토콜이 사용됩니다.

간단하게 ARP를 통해 다음 목적지를 찾는다고 생각하시면 됩니다.

 

 

[ TCP ]

TCP(Transfer Control Protocol)는 트랜스포트 계층에 해당하는데 신뢰성 있는 바이트 스트림 서비스를 제공합니다.

바이트 스트림 서비스란 용량이 큰 데이터를 보내기 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 것을 말하고, 신뢰성 있는 서비스는 상대방에게 보내는 서비스를 의미합니다.

결국 TCP는 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대에게 보내고, 정확하게 도착했는지 확인하는 역할을 담당하고 있습니다.

상대에게 데이터를 확실하게 보내는 것이 일이다.

상대에게 확실하게 데이터를 보내기 위해서 TCP는 "3-way handshaking"이라는 방법을 사용하고 있습니다.

1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보냅니다.

2. 서버는 클라이언트의 요청인 SYN 패킷을 받고 클라이언트에게 요청을 수락했다는 ACK와 SYN 패킷을 보냅니다.

3. 클라이언트는 서버의 수락 응답인 ACK 패킷과, SYN 패킷을 받고 서버의 요청을 잘 받았다는 ACK 패킷을 서버로 보내면 연결이 성립됩니다.

 

TCP가 연결 성립하는 과정을 보았는데요. 좀 더 자세히 알고 싶은 분들은 링크를 타고 들어가서 글을 한번 읽어보시는걸 추천드립니다.

 

[ DNS ]

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

컴퓨터는 IP 주소와는 별도로 호스트 이름과 도메인 이름을 붙일 수 있습니다.

예를 들어 제 블로그는 IP주소 대신 "www.charlieZip.tistory"과 같이 적혀 있습니다.

주로 사용자는 IP 주소 대신 이름을 이용하여 상대의 컴퓨터를 지정합니다.

IP 주소보다는 영어나 숫자 등으로 표기해 컴퓨터의 이름을 지정하는 것이 인간에게 친숙하기 때문입니다.

 

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

 

 

[ URI와 URL ]

URI

URI(Uniform Resource Indentifiers)는 특정 리소스를 식별하는 통합 자원 식별자를 의미한다.

URI는 리소스를 식별하기 위해 문자열 전반을 나타냅니다

URL

URL은 리소스의 장소(네트워크 상의 위치)를 나타냅니다.

URL은 URI의 서브셋입니다.

 

절대 URI 포맷

출처: https://datatracker.ietf.org/doc/html/rfc3986#section-1.3

  • 스키마(scheme)
    • 'http:'와 'https:' 같은 스키마를 사용하여 리소스를 얻기 위해 사용하는 프로토콜을 지시합니다.
    • 대문자와 소문자는 무시되고 마지막에 콜론( : )이 하나 붙습니다.
    • 다양한 프로토콜의 종류가 알고 싶으시면 이 링크를 타고 가시면 됩니다.
  • 자격정보
    • 서버로부터 리소스를 취득하려면 자격정보(크리덴셜)가 필요합니다.
    • 옵션으로 유저명과 패스워드를 지정할 수 있습니다.
  • 서버 주소
    • 완전 수식 형식인 URI에서는 서버 주소를 지정할 필요가 있습니다. 주소는 www.hackr.jp와 같은 DNS 이름이나 "192.168.1.1"과 같은 IPv4 주소나 IPv6 주소를 지정합니다.
  • 서버 포트
    • 서버의 접속 대상이 되는 네트워크 포트 번호를 지정합니다.
    • 생략하면 디폴트 포트(HTTP는 80, HTTPS는 443)가 사용됩니다.
  • 계층적 파일 패스
    • 특정 리소스를 식별하기 위해서 서버 상의 파일 패스를 지정합니다.
    • UNIX 디렉터리 지정 방법과 비슷합니다.
  • 쿼리 문자열
    • 파일 패스로 지정된 리소스에 임의의 파라미터를 넘겨주기 위해 쿼리 문자열을 사용합니다.
  • 프래그먼트 식별자
    • 주로 취득한 리소스에서 서브 리소스(도큐먼트 중간에 위치)를 가리키기 위해서 프래그먼트 식별자가 사용됩니다.

 

[ 웹의 동작 원리 ]

출처: http://www.tcpschool.com/webbasic/works

1.2. 사용자가 브라우저에 웹 페이지의 URL을 입력

3.4. URL 주소중에서 도메인 네임 부분을 통해 DNS에서 IP 주소를 검색

5. HTTP 프로토콜을 통해 HTTP 요청 메시지를 생성

5 - 6. TCP 프로토콜을 통해 HTTP 메시지를 전달. 상대방의 위치는 IP를 통해 위치를 찾아 중계해 가면서 배송

6.7. HTTP 프로토콜을 통해 메시지를 서버에 전달

8. 서버에서 HTTP요청에 맞는 데이터를 검색한 후 HTTP 프로토콜을 통해 HTTP 응답 메시지를 생성

9.10. TCP 프로토콜을 통해 원래 컴퓨터로 전송

11.12. HTTP프로토콜을 사용하여 HTTP 응답 메시지를 전달하면 요청에 맞는 데이터를 추출 후 웹 브라우저에 출력

 

 

 

부족한 제 글 읽어주셔서 감사합니다. 오늘도 좋은 하루 되세요!!

 

 

참고자료

그림으로 배우는 http&Network Basic

http://www.tcpschool.com/webbasic/works

https://developer.mozilla.org/ko/docs/Web/HTTP

https://datatracker.ietf.org/doc/html/rfc3986#section-1.3

https://asfirstalways.tistory.com/356

 

반응형

'Network' 카테고리의 다른 글

GSLB(Global Server Load Balancing)란?  (0) 2023.05.09
[Network] HTTP 인증  (0) 2021.08.29
[Network] HTTPS  (0) 2021.08.14
[Network] HTTP 프로토콜  (0) 2021.08.02
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함