브라우저 주소 입력란에 URL을 입력하면 웹 페이지를 볼 수 있다. 그렇다면 어떻게 웹 페이지가 보일까?
간단하게 설명하면 URL을 입력하면 어딘가에 송신되고 그 어딘가에서 응답이 돌아오면 웹페이지가 표시된다고 말할 수 있다.
웹 브라우저는 지정된 URL에 의지해서 웹 서버로부터 '리소스(Resouce)'라고 불리는 파일 등의 정보를 얻는다. 이때, 서버에 요청을 하는 웹 브라우저 등을 클라이언트(Client)라고 부른다.
이렇게 클라이언트에서 서버까지 일련의 흐름을 결정하고 있는 것은 웹에서 HTTP(Hyper Text Protocol)이라는 프로토콜이다. 여기서 프로토콜은 "약속"이라고 이해하면 된다. 즉, 웹은 HTTP라는 약속을 사용한 통신으로 이루어져 있다.
HTTP의 등장 배경
HTTP는 "여명기"라고도 말할 수 있는 1989년 3월에 세계 곳곳에 있는 연구자들의 지식 공유를 위해서 탄생되었다. CERN(유럽 입자 물리학 연구소)의 팀 버너스 리 박사가 WWW(World Wide Web)의 기본 개념이 되는 시스템을 최초로 고안하였다. 이러한 WWW를 구성하는 기술로서 HTML(HyperText Markup Language), 문서 전송 프로토콜(HTTP), URL(Uniform Resource Locator)등 세 가지가 제안되었다.
WWW는 지금으로 말하면 웹 브라우저, 그 당시에는 하이퍼텍스트를 열람할 수 있는 클라이언트 애플리케이션의 명칭이었다.
1990년 11월에 CERN에서는 세계 최초의 웹 서버와 웹 브라우저가 개발되었다. 또한 같은 해에 HTML1.0 초안(드래프트)도 검토되었지만 HTML 1.0은 애매한 부분이 많았기 때문에 초안인 상태로 폐기되었다.
1993년 1월에는 NCSA(미국 슈퍼 컴퓨터 응용 연구소)에서 현재 사용하는 웹 브라우저의 선조라고 말할 수 있는 모자이크(Mosaic)를 개발하였다. 같은 해 가을에는 윈도우 판과 매킨토시 판도 개발되었다.
1994년 12월에 넷스케이프(Netscape)사에서 넷스케이프 내비게이터(Netscape Navigator) 1.0을 출시하고 1995년에는 마이크로소프트(Microsoft)사에서 인터넷 익스플로러(Internet Explorer)를 출시하였다. 이 무렵에 현재 웹 서버 표준의 하나인 아파치(Apache), HTML 2.0도 등장하였다.
2004년에는 모질라 파이어폭스(Mozilla Firefox)가 출시되었다.
HTTP/0.9
HTTP가 1990년에 등장하였는데 1.0 이전의 버전이라는 의미에서 HTTP/0.9로 불리고 있다.
HTTP/1.0
1996년 5월에 HTTP가 정식 사양으로 공개되었고 HTTP/1.0으로 RFC1945가 발생되었다.
HTTP/1.1
1997년 1월 HTTP/1.1 버전이 공개되었다.
HTTP는 등장한 당시에 주로 텍스트를 전송하기 위한 프로토콜이었지만, 여러 가지 응용 방법을 고려해 기능이 계속 추가되었다. 지금은 웹이라는 틀을 넘어서 다양하게 사용되는 프로토콜이 되었다.
TCP/ IP
인터넷을 포함하여 일반적으로 사용하고 있는 네트워크는 TCP/IP라는 프로토콜에서 움직이고 있다. HTTP도 TCP/IP라는 프로토콜에서 움직인다.
컴퓨터와 네트워크 기기가 상호 간에 통신하기 위해서는 서로 같은 방법으로 통신하지 않으면 안 된다. 서로 다른 하트웨어와 운영체제 등을 가지고 서로 통신을 하기 위해서는 모든 요소에 규칙이 필요하게 된다. 이러한 규칙을 프로톨이라고 부른다.
프로토콜에는 여러 가지가 있는데 케이블 규격, IP 주소 지정 방법, 웹을 표시하기 위한 순서 등이다.
이렇게 인터넷과 관련된 프로토콜들을 모은 것을 TCP/IP라고 부른다. 또한 IP 프로토콜을 사용한 통신에서 사용되고 있는 프로토콜을 총칭해서 TCP/IP라는 이름이 사용되고 있다.
TCP/IP는 "애플리케이션 계층", "트랜스포트 계층", "네크워크 계층", "링크 계층"으로 4계층(Layer)으로 나뉘어져 있다. 이렇게 계층으로 나누어져 있는 이유는 만약 인터넷이 하나의 프로토콜로 되어 있다면 어디선가 사양이 변경되었을 때 전체를 바꾸지 않으면 안 된다. 하지만 계층화되어 있으면 사양이 변경된 계층만 바꾸면 되기 때문에 자유롭고 편하게 설계할 수 있기 때문이다.
TCP/IP로 통신할 때 계층을 순서대로 거쳐 상대와 통신을 한다. 송신하는 측은 애플리케이션 계층에서부터 내려가고 , 수신하는 측은 애플리케이션 계층으로 올라간다.
HTTP를 예로 들어 설명해보겠다.
1. 송신 측 클라이언트의 애플리케이션 계층(HTTP)에서 어느 웹 페이지를 보고 싶다라는 HTTP 리퀘스트를 지시한다.
2. 트랜스포트 계층(TCP)에서는 애플리케이션 계층에서 받은 데이터(HTTP 메시지)를 통신하기 쉽게 조각내어 안내 번호와 포트 번호를 붙여 네트워크 계층에 전달한다.
3. 네크워크 계층(IP)에서는 수신가 MAC 주소를 추가해서 링크 계층에 전달한다.
4. 링크 계층에서 네크워크를 통해 송신한다.
5. 수신 측 서버에서는 반대로 애플리케이션 계층까지 순서대로 전달하여 HTTP 리퀘스트 내용을 수신한다.
각 계층을 거칠 때는 반드시 헤더로 불려지는 해당 계층마다 해당 계층에 필요한 정보를 추가한다. 반대로 수신 측에서는 각 계층을 거칠 때마다 반드시 해당 계층마다 사용한 헤더를 삭제한다. 이렇게 정보를 감싸는 것을 "캡슐화"라고 부른다.
IP(네트워크 계층)/TCP(트랜스포트 계층)/DNS
IP의 역할은 개개의 패킷을 상대방에서 전달하는 것이다. 상대방에게 전달하기까지 여러 가지 요소가 필요하다. 그중에서도 IP 주소와 MAC 주소(Media Access Control Address)라는 요소가 중요하다.
IP 주소는 각 노드에 부여된 주소를 가리키고 MAC 주소는 각 네트워크 카드에 할당된 고유의 주소이다. IP 주소는 MAC 주소와 결부된다. IP 주소는 변경 가능하지만 기본적으로 MAC 주소는 변경할 수 없다.
IP 통신은 MAC 주소에 의존해서 통신을 한다. 인터넷에서 여러 대의 컴퓨터와 네트워크 기기를 중계해서 상대방에게 도착하게 된다. 그렇게 중계하는 동안에는 다음으로 중계할 곳의 MAC 주소를 사용하여 목적지를 찾아가는 것이다. 이때, ARP(Address Resolution Protocol)이라는 프로토콜이 사용된다.
ARP는 논리적인 IP주소를 기반으로 물리적인 MAC 주소로 바꾸어주는 프토토콜이다. IP를 이용하여 MAC 주소를 알아내기 위해 연결된 모든 장비에게 Request 메시지를 보내고, ARP Request 메시지를 받은 장비들은 누구에게 전달된 Request인지 IP주소를 확인하여 자신의 IP일 경우 Reply를 보내준다.
목적지까지 중계를 하는 도중에 컴퓨터와 라우터 등의 네트워크 기기는 목적지에 도착하기까지 대략적인 목적지만을 알고 있다. 이 시스템을 라우팅이라고 부르는데 택배 배송과 흡사하다. 화물을 보내는 사람은 택배 집배소 등에 화물을 가지고 가면 택배를 보낼 수 있는 것만 알고 있으며, 집배소는 화물을 보내는 곳을 보고 어느 지역의 집배소에 보내면 되는지만 알고 있다. 그리고 목적지에 있는 집배소는 어느 집에 배달하면 되는지만 알고 있다.
TCP(Transfer Control Protocol)는 신뢰성 있는 바이트 스트림 서비스를 제공한다. 바이트 스트림 서비스란 용량이 큰 데이터를 보내기 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 것을 말하고, 신뢰성 있는 서비스는 상대방에게 보내는 서비스를 의미한다. 결국 TCP는 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대에게 보내고, 정확하게 도착했는지 확인하는 역할을 담당하고 있다.
TCP는 상대에게 확실하게 데이터를 보내기 위해서 "Tree Way Handshaking"이라는 방법을 사용한다. 이 방법은 패킷을 보내고 나서 바로 끝내는 것이 아니라, 보내졌는지 여부를 상대에게 확인하러 간다. 이것은 'SYN'와 'ACK'라는 TCP플래그를 사용한다.
송신 측에서는 최초 'SYN' 플래그로 상대에게 접속함과 동시에 패킷을 보내고, 수신측에서는 'SYN/ACK' 플래그로 송신측에 접속함과 동시에 패킷을 수신한 사실을 전한다. 마지막으로 송신 측이 'ACK' 플래그를 보내 패킷 교환이 완료되었음을 전한다.
DNS(Domain Nmae System)는 HTTP와 같이 응용 계층 시스템에서 도메인 이름과 IP 주소 이름 확인을 제공한다. 컴퓨터는 IP 주소와는 별도로 호스트 이름과 도메인 이름을 붙일 수 있다.
주로 사용자는 IP 주소 대신 이름을 이용하여 상대의 컴퓨터를 지정한다. 숫자를 나열하는 IP 주소를 지정하는 것보다 영어나 숫자 등으로 표기해 컴퓨터의 이름을 지정하는 것이 인간에게 친숙하다. 그러나 컴퓨터에게는 친숙하지 않다. 이 문제를 해결하기 위해 DNS가 있다. DNS는 도메인 명에서 IP 주소를 조사하거나 반대로 IP 주소로부터 도메인명을 조사하는 서비스를 제공한다.
URI와 URL
보통 URI보다 URL(Uniform Resouce Locator)이 익숙할 것이다. 웹 브라우저 등으로 웹 페이지를 표시하기 위해 입력하는 주소가 바로 URL이다. 예를 들어서 https://www.google.co.kr이 URL이다.
URI는 리소스를 식별하기 위해 문자열 전반을 나타내는데 비해 URL은 리소스의 장소(네트워크 상의 위치)를 나타낸다. URL은 URI의 서브셋이다.
URI 예로서 다음과 같이 있다.
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ieft.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
**본 글은 "그림으로 배우는 Http&Network Basic"의 내용을 정리하였습니다
[사진 출처]
velog.io/@conatuseus/2019-09-10-2009-%EC%9E%91%EC%84%B1%EB%90%A8-xsk0ds2eqf
'Network' 카테고리의 다른 글
[웹 브라우저의 동작] 2. IP (0) | 2021.05.14 |
---|---|
[웹 브라우저의 동작] 1. HTTP (0) | 2021.05.12 |
HTTP 상태 코드 (0) | 2021.05.05 |
HTTP 메시지 (0) | 2021.05.04 |
HTTP 프로토콜의 구조 (0) | 2021.05.02 |